Lors d'un déploiement sur vSphere dans Cloud Assembly, vous pouvez attribuer une adresse IP statique, mais vous devez éviter d'introduire des conflits entre les commandes d'initialisation cloudConfig et les spécifications de personnalisation.

Exemples de conception

Les conceptions suivantes appliquent en toute sécurité une adresse IP statique sans conflit entre les commandes d'initialisation de modèle de cloud et les spécifications de personnalisation. Elle contient toutes le paramètre de réseau assignment: static.

Concevoir Exemple de code de modèle de cloud

Attribuer une adresse IP statique à une machine Linux sans code cloud-init

resources:
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: public
      constraints:
        - tag: sqa
  DBTier:
    type: Cloud.vSphere.Machine
    properties:
      flavor: small
      image: linux-template
      networks:
        - name: '${wpnet.name}'
          assignment: static
          network: '${resource.wpnet.id}'

Attribuer une adresse IP statique à une machine Linux avec un code cloud-init qui ne contient pas de commandes d'attribution réseau.

REMARQUE : la spécification de personnalisation de vSphere est appliquée que vous définissiez la propriété customizeGuestOs sur true ou omettiez la propriété customizeGuestOs.

Exemple Ubuntu

resources:
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: public
      constraints:
        - tag: sqa
  DBTier:
    type: Cloud.vSphere.Machine
    properties:
      flavor: small
      image: ubuntu-template
      customizeGuestOs: true
      cloudConfig: |
        #cloud-config
        ssh_pwauth: yes
        chpasswd:
          list: |
            root:Pa$$w0rd
          expire: false
        write_files:
          - path: /tmpFile.txt
            content: |
              ${resource.wpnet.dns}
        runcmd:
          - hostnamectl set-hostname --pretty ${self.resourceName}
          - touch /etc/cloud/cloud-init.disabled
      networks:
        - name: '${wpnet.name}'
          assignment: static
          network: '${resource.wpnet.id}'

Exemple CentOS

resources:
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: public
      constraints:
        - tag: sqa
  DBTier:
    type: Cloud.vSphere.Machine
    properties:
      flavor: small
      image: centos-template
      customizeGuestOs: true
      cloudConfig: |
        #cloud-config
        write_files:
          - path: /test.txt
            content: |
              deploying in power off.
              then rebooting.
      networks:
        - name: '${wpnet.name}'
          assignment: static
          network: '${resource.wpnet.id}'

Attribuez une adresse IP statique à une machine Linux avec un code cloud-init contenant des commandes d'attribution réseau.

La propriété customizeGuestOs doit être false.

Exemple Ubuntu

resources:
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: public
      constraints:
        - tag: sqa
  DBTier:
    type: Cloud.vSphere.Machine
    properties:
      flavor: small
      image: ubuntu-template
      customizeGuestOs: false
      cloudConfig: |
        #cloud-config
        write_files:
          - path: /etc/netplan/99-installer-config.yaml
            content: |
              network:
                version: 2
                renderer: networkd
                ethernets:
                  ens160:
                    addresses:
                      - ${resource.DBTier.networks[0].address}/${resource.wpnet.prefixLength}
                    gateway4: ${resource.wpnet.gateway}
                    nameservers:
                      search: ${resource.wpnet.dnsSearchDomains}
                      addresses: ${resource.wpnet.dns}
        runcmd:
          - netplan apply
          - hostnamectl set-hostname --pretty ${self.resourceName}
          - touch /etc/cloud/cloud-init.disabled
      networks:
        - name: '${wpnet.name}'
          assignment: static
          network: '${resource.wpnet.id}'

Exemple CentOS

resources:
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: public
      constraints:
        - tag: sqa
  DBTier:
    type: Cloud.vSphere.Machine
    properties:
      flavor: small
      image: centos-template
      customizeGuestOs: false
      cloudConfig: |
        #cloud-config
        ssh_pwauth: yes
        chpasswd:
          list: |
            root:VMware1!
          expire: false
        runcmd:
          - nmcli con add type ethernet con-name 'custom ens192' ifname ens192 ip4 ${self.networks[0].address}/${resource.wpnet.prefixLength} gw4 ${resource.wpnet.gateway}
          - nmcli con mod 'custom ens192' ipv4.dns "${join(resource.wpnet.dns,' ')}"
          - nmcli con mod 'custom ens192' ipv4.dns-search "${join(resource.wpnet.dnsSearchDomains,',')}"
          - nmcli con down 'System ens192' ; nmcli con up 'custom ens192'
          - nmcli con del 'System ens192'
          - hostnamectl set-hostname --static `dig -x ${self.networks[0].address} +short | cut -d "." -f 1`
          - hostnamectl set-hostname --pretty ${self.resourceName}
          - touch /etc/cloud/cloud-init.disabled
      networks:
        - name: '${wpnet.name}'
          assignment: static
          network: '${resource.wpnet.id}'

Lorsque vous basez le déploiement sur une image référencée, attribuez une adresse IP statique à une machine Linux avec un code cloud-init contenant des commandes d'attribution réseau.

La propriété customizeGuestOs doit être false.

En outre, le modèle de cloud ne doit pas inclure la propriété ovfProperties, ce qui bloque la personnalisation.

resources:
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: public
      constraints:
        - tag: sqa
  DBTier:
    type: Cloud.vSphere.Machine
    properties:
      flavor: small
      imageRef: 'https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.ova'
      customizeGuestOs: false
      cloudConfig: |
        #cloud-config
        ssh_pwauth: yes
        chpasswd:
          list: |
            root:Pa$$w0rd
            ubuntu:Pa$$w0rd
          expire: false
        write_files:
          - path: /etc/netplan/99-netcfg-vrac.yaml
            content: |
              network:
                version: 2
                renderer: networkd
                ethernets:
                  ens192:
                    dhcp4: no
                    dhcp6: no
                    addresses:
                      - ${resource.DBTier.networks[0].address}/${resource.wpnet.prefixLength}
                    gateway4: ${resource.wpnet.gateway}
                    nameservers:
                      search: ${resource.wpnet.dnsSearchDomains}
                      addresses: ${resource.wpnet.dns}
        runcmd:
          - netplan apply
          - hostnamectl set-hostname --pretty ${self.resourceName}
          - touch /etc/cloud/cloud-init.disabled
      networks:
        - name: '${wpnet.name}'
          assignment: static
          network: '${resource.wpnet.id}'

Conceptions qui ne fonctionnent pas ou qui peuvent produire des résultats indésirables

  • Le code cloud-init ne contient pas de commandes d'attribution réseau et la propriété customizeGuestOs est false.

    Ni les commandes d'initialisation ni la spécification de personnalisation ne sont présentes pour configurer les paramètres réseau.

  • Le code cloud-init ne contient pas de commandes d'attribution réseau et la propriété ovfProperties est définie.

    Les commandes d'initialisation ne sont pas présentes, mais ovfProperties a bloqué la spécification de personnalisation.

  • Le code cloud-init contient des commandes d'attribution réseau et la propriété customizeGuestOs est manquante ou définie sur true.

    L'application de la spécification de personnalisation est en conflit avec les commandes d'initialisation.

Autres solutions pour cloud-init et les spécifications de personnalisation

Lors d'un déploiement sur vSphere, vous pouvez également personnaliser une image pour résoudre les conflits de cloud-init et de spécifications de personnalisation. Pour plus d'informations, reportez-vous au référentiel externe suivant.

Espacement