func generateInjector()

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)
}