in main.go [65:247]
func main() {
nodeMetadata := make(map[string]string)
flag.Var(newStringMapVal(&nodeMetadata), "node-metadata",
"additional metadata of the form key=value to be included in the node configuration")
flag.Var(flag.Lookup("secrets-dir").Value, "secrets-dir-experimental",
"alias of secrets-dir. This flag is EXPERIMENTAL and will be removed in a later release")
flag.Var(flag.Lookup("node-metadata").Value, "node-metadata-experimental",
"alias of node-metadata. This flag is EXPERIMENTAL and will be removed in a later release")
flag.Var(flag.Lookup("gke-cluster-name").Value, "gke-cluster-name-experimental",
"alias of gke-cluster-name. This flag is EXPERIMENTAL and will be removed in a later release")
flag.Var(flag.Lookup("generate-mesh-id").Value, "generate-mesh-id-experimental",
"alias of generate-mesh-id. This flag is EXPERIMENTAL and will be removed in a later release")
flag.Var(flag.Lookup("config-mesh").Value, "config-mesh-experimental",
"alias of config-mesh. This flag is EXPERIMENTAL and will be removed in a later release")
flag.Parse()
if *gcpProjectNumber == 0 {
var err error
*gcpProjectNumber, err = getProjectID()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: failed to determine project id: %s\n", err)
os.Exit(1)
}
}
ip, err := getHostIP()
if err != nil {
fmt.Fprintf(os.Stderr, "Warning: failed to determine host's IP: %s\n", err)
}
// Retrieve zone from the metadata server only if not specified in args.
zone := *localityZone
if zone == "" {
zone, err = getZone()
if err != nil {
fmt.Fprintf(os.Stderr, "Warning: %s\n", err)
}
}
// Generate deployment info from metadata server or from command-line
// arguments, with the latter taking preference.
var deploymentInfo map[string]string
dType, err := getDeploymentType()
if err != nil {
fmt.Fprintf(os.Stderr, "Warning: unable to determine deployment type: %s\n", err)
}
switch dType {
case deploymentTypeGKE:
cluster := *gkeClusterName
if cluster == "" {
cluster, err = getClusterName()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: generating deployment info: %s\n", err)
os.Exit(1)
}
}
pod := *gkePodName
if pod == "" {
pod = getPodName()
}
clusterLocation := *gkeLocation
if clusterLocation == "" {
clusterLocation, err = getClusterLocality()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: generating deployment info: %s\n", err)
os.Exit(1)
}
}
deploymentInfo = map[string]string{
"GKE-CLUSTER": cluster,
"GKE-LOCATION": clusterLocation,
"GCP-ZONE": zone,
"INSTANCE-IP": ip,
"GKE-POD": pod,
}
if *gkeNamespace != "" {
deploymentInfo["GKE-NAMESPACE"] = *gkeNamespace
}
case deploymentTypeGCE:
vmName := *gceVM
if vmName == "" {
vmName = getVMName()
}
deploymentInfo = map[string]string{
"GCE-VM": vmName,
"GCP-ZONE": zone,
"INSTANCE-IP": ip,
}
}
meshID := *configMesh
if *generateMeshID {
if meshID != "" {
fmt.Fprint(os.Stderr, "Error: --config-mesh flag cannot be specified while --generate-mesh-id is also set.\n")
os.Exit(1)
}
clusterLocality := *gkeLocation
if clusterLocality == "" {
clusterLocality, err = getClusterLocality()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: unable to generate mesh id: %s\n", err)
os.Exit(1)
}
}
cluster := *gkeClusterName
if cluster == "" {
cluster, err = getClusterName()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: unable to generate mesh id: %s\n", err)
os.Exit(1)
}
}
meshNamer := csmnamer.MeshNamer{
ClusterName: cluster,
Location: clusterLocality,
}
meshID = meshNamer.GenerateMeshId()
}
gitCommitHash, err := getCommitID()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: unable to determine git commit ID: %s\n", err)
os.Exit(1)
}
input := configInput{
xdsServerURI: *xdsServerURI,
gcpProjectNumber: *gcpProjectNumber,
vpcNetworkName: *vpcNetworkName,
ip: ip,
zone: zone,
ignoreResourceDeletion: *ignoreResourceDeletion,
secretsDir: *secretsDir,
metadataLabels: nodeMetadata,
deploymentInfo: deploymentInfo,
configMesh: meshID,
ipv6Capable: isIPv6Capable(),
gitCommitHash: gitCommitHash,
isTrustedXDSServer: *isTrustedXDSServer,
includeAllowedGrpcServices: *includeAllowedGrpcServices,
}
if err := validate(input); err != nil {
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
os.Exit(1)
}
config, err := generate(input)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to generate config: %s\n", err)
os.Exit(1)
}
var output *os.File
if *outputName == "-" {
output = os.Stdout
} else {
output, err = os.Create(*outputName)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to open output file: %s\n", err)
os.Exit(1)
}
}
_, err = output.Write(config)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to write config: %s\n", err)
os.Exit(1)
}
_, err = output.Write([]byte("\n"))
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to write config: %s\n", err)
os.Exit(1)
}
err = output.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to close config: %s\n", err)
os.Exit(1)
}
}