Zur Steigerung der Flexibilität können Sie dem Cloud Assembly-Cloud-Vorlagencode Ausdrücke hinzufügen.

Funktionsweise von Ausdrücken

In Cloud Assembly-Ausdrücken wird das Konstrukt ${expression} verwendet, wie in den folgenden Beispielen gezeigt.

Hinweis: Cloud Assembly-Ausdrücke sind nicht mit regulären Ausdrücken identisch. Informationen finden Sie in der -Ausdruckssyntax für Cloud Assembly.

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

Spacer