Para aumentar la flexibilidad, puede agregar expresiones al código de plantilla de nube de Cloud Assembly.
Funcionamiento de las expresiones
Las expresiones de Cloud Assembly utilizan la construcción ${expression}, como se muestra en los siguientes ejemplos.
Los siguientes ejemplos de código se resumieron para mostrar únicamente las líneas importantes. En la parte final, aparecerá la plantilla de nube completa sin editar.
Ejemplos
En el momento de la implementación, permita que el usuario pegue la clave cifrada necesaria para el acceso remoto:
inputs: sshKey: type: string maxLength: 500 resources: frontend: type: Cloud.Machine properties: remoteAccess: authentication: publicPrivateKey sshKey: '${input.sshKey}'
Para realizar una implementación en VMware Cloud on AWS, asigne a la carpeta el nombre requerido, Workload:
inputs: environment: type: string enum: - AWS - vSphere - Azure - VMC - GCP default: vSphere resources: frontend: type: Cloud.Machine properties: folderName: '${input.environment == "VMC" ? "Workload" : ""}'
Al realizar la implementación, etiquete la máquina con una etiqueta env que esté compuesta únicamente de minúsculas y que coincida con el entorno seleccionado:
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)}'
Establezca el número de máquinas en el clúster de front-end como uno (pequeño) o dos (grande). Tenga en cuenta que el clúster de gran tamaño se establece mediante el proceso de eliminación:
inputs: envsize: type: string enum: - Small - Large resources: frontend: type: Cloud.Machine properties: count: '${input.envsize == "Small" ? 1 : 2}'
Asocie máquinas a la misma red Default enlazando a la propiedad que se encuentra en el recurso de red:
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
Cifre las credenciales de acceso enviadas a la API:
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
Detecte la dirección de la máquina de API:
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}'
Plantilla de nube completa
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)}'