Zur Steigerung der Flexibilität können Sie dem Automation Assembler-Cloud-Vorlagencode Ausdrücke hinzufügen.
Funktionsweise von Ausdrücken
In Automation Assembler-Ausdrücken wird das Konstrukt ${expression} verwendet, wie in den folgenden Beispielen gezeigt.
In den folgenden Codebeispielen werden lediglich die wichtigen Zeilen angezeigt. Die gesamte unbearbeitete Cloud-Vorlage wird am Ende angezeigt.
Beispiele
Lassen Sie zu, dass der Benutzer zum Zeitpunkt der Bereitstellung den verschlüsselten Schlüssel einfügt, der für den Remote-Zugriff erforderlich ist:
inputs: sshKey: type: string maxLength: 500 resources: frontend: type: Cloud.Machine properties: remoteAccess: authentication: publicPrivateKey sshKey: '${input.sshKey}'
Für die Bereitstellung von in VMware Cloud on AWS legen Sie den Ordnernamen auf den erforderlichen Namen von Workload fest:
inputs: environment: type: string enum: - AWS - vSphere - Azure - VMC - GCP default: vSphere resources: frontend: type: Cloud.Machine properties: folderName: '${input.environment == "VMC" ? "Workload" : ""}'
Versehen Sie zum Zeitpunkt der Bereitstellung die Maschine mit einem nur aus Kleinbuchstaben bestehenden env-Tag, das der ausgewählten Umgebung entspricht:
inputs: environment: type: string enum: - AWS - vSphere - Azure - VMC - GCP default: vSphere resources: frontend: type: Cloud.Machine properties: constraints: - tag: '${"env:" + to_lower(input.environment)}'
Legen Sie die Anzahl der Maschinen im Front-End-Cluster auf eine (small) oder zwei (large) fest. Beachten Sie, dass der umfangreiche Cluster durch Löschung festgelegt wird:
inputs: envsize: type: string enum: - Small - Large resources: frontend: type: Cloud.Machine properties: count: '${input.envsize == "Small" ? 1 : 2}'
Hängen Sie Maschinen an dasselbe Standardnetzwerk an, indem Sie sie an die in der Netzwerkressource gefundene Eigenschaft binden:
resources: frontend: type: Cloud.Machine properties: networks: - network: '${resource.Cloud_Network_1.name}' apitier: type: Cloud.Machine properties: networks: - network: '${resource.Cloud_Network_1.name}' Cloud_Network_1: type: Cloud.Network properties: name: Default networkType: existing
Verschlüsseln Sie die für die API bereitgestellten Zugriffsanmeldedaten:
resources: apitier: type: Cloud.Machine properties: cloudConfig: | #cloud-config runcmd: - export apikey=${base64_encode(input.username:input.password)} - curl -i -H 'Accept:application/json' -H 'Authorization:Basic :$apikey' http://example.com
Ermitteln Sie die Adresse der API-Maschine:
resources: frontend: type: Cloud.Machine properties: cloudConfig: | runcmd: - echo ${resource.apitier.networks[0].address} apitier: type: Cloud.Machine properties: networks: - network: '${resource.Cloud_Network_1.name}'
Vollständige Cloud-Vorlage
inputs: environment: type: string enum: - AWS - vSphere - Azure - VMC - GCP default: vSphere sshKey: type: string maxLength: 500 envsize: type: string enum: - Small - Large resources: frontend: type: Cloud.Machine properties: folderName: '${input.environment == "VMC" ? "Workload" : ""}' image: ubuntu flavor: medium count: '${input.envsize == "Small" ? 1 : 2}' remoteAccess: authentication: publicPrivateKey sshKey: '${input.sshKey}' cloudConfig: | packages: - nginx runcmd: - echo ${resource.apitier.networks[0].address} constraints: - tag: '${"env:" + to_lower(input.environment)}' networks: - network: '${resource.Cloud_Network_1.name}' apitier: type: Cloud.Machine properties: folderName: '${input.environment == "VMC" ? "Workload" : ""}' image: ubuntu flavor: small cloudConfig: | #cloud-config runcmd: - export apikey=${base64_encode(input.username:input.password)} - curl -i -H 'Accept:application/json' -H 'Authorization:Basic :$apikey' http://example.com remoteAccess: authentication: publicPrivateKey sshKey: '${input.sshKey}' constraints: - tag: '${"env:" + to_lower(input.environment)}' networks: - network: '${resource.Cloud_Network_1.name}' Cloud_Network_1: type: Cloud.Network properties: name: Default networkType: existing constraints: - tag: '${"env:" + to_lower(input.environment)}'