Bei der Bereitstellung auf vSphere in Cloud Assembly können Sie eine statische IP-Adresse zuweisen, müssen jedoch darauf achten, dass keine Konflikte zwischen cloudConfig-Initialisierungsbefehlen und Anpassungsspezifikationen entstehen.

Beispieldesigns

In den folgenden Designs wird auf sichere Art und Weise eine statische IP-Adresse angewendet, ohne dass Konflikte zwischen Initialisierungsbefehlen für Cloud-Vorlagen und Anpassungsspezifikationen auftreten. Alle enthalten die Netzwerkeinstellung assignment: static.

Design Beispiel für Cloud-Vorlagencode

Zuweisen einer statischen IP-Adresse zu einer Linux-Maschine, für die kein cloud-init-Code verfügbar ist

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

Weisen Sie einer Linux-Maschine mit cloud-init-Code, der keine Netzwerkzuweisungsbefehle enthält, eine statische IP-Adresse zu.

HINWEIS: Die vSphere-Anpassungsspezifikation wird angewendet, unabhängig davon, ob Sie die Eigenschaft „customizeGuestOs“ auf „true“ festlegen oder die Eigenschaft „customizeGuestOs“ weglassen.

Ubuntu-Beispiel

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

CentOS-Beispiel

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

Weisen Sie einer Linux-Maschine mit cloud-init-Code, der Netzwerkzuweisungsbefehle enthält, eine statische IP-Adresse zu.

Die Eigenschaft „customizeGuestOs“muss „false“ sein.

Ubuntu-Beispiel

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

CentOS-Beispiel

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

Wenn die Bereitstellung auf einem referenzierten Image beruht, weisen Sie einer Linux-Maschine mit cloud-init-Code, der Netzwerkzuweisungsbefehle enthält, eine statische IP-Adresse zu.

Die Eigenschaft „customizeGuestOs“muss „false“ sein.

Darüber hinaus darf die Cloud-Vorlage nicht die Eigenschaft „ovfProperties“ enthalten, die die Anpassung blockiert.

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

Designs, die nicht funktionieren oder zu unerwünschten Ergebnissen führen können

  • Der cloud-init-Code enthält keine Netzwerkzuweisungsbefehle, und die Eigenschaft „customizeGuestOs“ ist „false“.

    Es sind weder Initialisierungsbefehle noch Anpassungsspezifikationen zum Konfigurieren der Netzwerkeinstellungen vorhanden.

  • Der cloud-init-Code enthält keine Netzwerkzuweisungsbefehle, und die Eigenschaft „ovfProperties“ ist festgelegt.

    Initialisierungsbefehle sind nicht vorhanden, aber „ovfProperties“ hat die Anpassungsspezifikation blockiert.

  • Der cloud-init-Code enthält Netzwerkzuweisungsbefehle, und die Eigenschaft „customizeGuestOs“ fehlt oder ist auf „true“ festgelegt.

    Die Anwendung der Anpassungsspezifikation steht in Konflikt mit Initialisierungsbefehlen.

Andere Problemumgehungen für cloud-init und Anpassungsspezifikationen

Bei der Bereitstellung in vSphere können Sie ein Image auch so anpassen, dass Konflikte mit cloud-init und Anpassungsspezifikationen umgangen werden können. Weitere Informationen finden Sie im folgenden externen Repository.

Marker