in pkg/barrier/barrier.go [361:454]
func generateInjector(f *ci.Framework) {
var injector strings.Builder
injector.WriteString("#!/bin/bash")
injector.WriteString("\n")
if f.Status != nil {
injector.WriteString("\n")
injector.WriteString(
"echo " + InjectorFilePath + ": Start to inject environment variables")
injector.WriteString("\n")
// FB_{UpperCase({TaskRoleName})}_IPS=
// {Task[0].PodIP},...,
// {Task[TaskRole.TaskNumber-1].PodIP}
injector.WriteString("\n")
for _, taskRoleStatus := range f.TaskRoleStatuses() {
taskRoleName := taskRoleStatus.Name
taskCountStatus := int32(len(taskRoleStatus.TaskStatuses))
taskRoleSpec := f.GetTaskRoleSpec(taskRoleName)
if taskRoleSpec == nil {
continue
}
ipsEnvName := getTaskRoleEnvName(taskRoleName, "IPS")
injector.WriteString("export " + ipsEnvName + "=")
taskCountSpec := taskRoleSpec.TaskNumber
taskCountStatusAndSpec := common.MinInt32(taskCountStatus, taskCountSpec)
for taskIndex := int32(0); taskIndex < taskCountStatusAndSpec; taskIndex++ {
taskStatus := taskRoleStatus.TaskStatuses[taskIndex]
taskIP := *taskStatus.AttemptStatus.PodIP
if taskIndex > 0 {
injector.WriteString(",")
}
injector.WriteString(taskIP)
}
injector.WriteString("\n")
injector.WriteString("echo " + ipsEnvName + "=${" + ipsEnvName + "}")
injector.WriteString("\n")
}
// FB_{UpperCase({TaskRoleName})}_ADDRESSES=
// {Task[0].PodIP}:${FB_{UpperCase({TaskRoleName})}_PORT},...,
// {Task[TaskRole.TaskNumber-1].PodIP}:${FB_{UpperCase({TaskRoleName})}_PORT}
injector.WriteString("\n")
for _, taskRoleStatus := range f.TaskRoleStatuses() {
taskRoleName := taskRoleStatus.Name
taskCountStatus := int32(len(taskRoleStatus.TaskStatuses))
taskRoleSpec := f.GetTaskRoleSpec(taskRoleName)
if taskRoleSpec == nil {
continue
}
addrsEnvName := getTaskRoleEnvName(taskRoleName, "ADDRESSES")
portEnvName := getTaskRoleEnvName(taskRoleName, "PORT")
injector.WriteString("export " + addrsEnvName + "=")
taskCountSpec := taskRoleSpec.TaskNumber
taskCountStatusAndSpec := common.MinInt32(taskCountStatus, taskCountSpec)
for taskIndex := int32(0); taskIndex < taskCountStatusAndSpec; taskIndex++ {
taskStatus := taskRoleStatus.TaskStatuses[taskIndex]
taskAddr := *taskStatus.AttemptStatus.PodIP + ":" + "${" + portEnvName + "}"
if taskIndex > 0 {
injector.WriteString(",")
}
injector.WriteString(taskAddr)
}
injector.WriteString("\n")
injector.WriteString("echo " + addrsEnvName + "=${" + addrsEnvName + "}")
injector.WriteString("\n")
}
injector.WriteString("\n")
injector.WriteString(
"echo " + InjectorFilePath + ": Succeeded to inject environment variables")
injector.WriteString("\n")
}
err := ioutil.WriteFile(InjectorFilePath, []byte(injector.String()), 0755)
if err != nil {
klog.Errorf(
"Failed to generate the injector script to local file: %v, %v",
InjectorFilePath, err)
exit(ci.CompletionCode(1))
}
klog.Infof(
"Succeeded to generate the injector script to local file: %v",
InjectorFilePath)
}