Search code examples
ansiblevmwareipconfig

ansible vmware windows server


I am trying to execute my ansible playbook to launch VMware-windows-server with IP settings, but VM is getting launched but without IP settings.

after executing the playbook am not getting any errors and its shows changes also done, but when i checked in Vmware environment IP is not reflecting.

tried all possible ways, can anyone help me out on this. thanks

here is my playbook :

---
- hosts: vm-windows-server2012
  gather_facts: false
  connection: local
  vars_files:
      - group_vars/vm-windows-server2012
  tasks:
  - name: "PROVISION | Create Windows server 2012 from template"
    vmware_guest:
      validate_certs: false
      hostname: "{{ vcenter_host }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      datacenter: "{{ datacenter }}"
      name: "{{ guest_name }}"
      folder: "{{ folder }}"
      template: "{{ vmtemplate }}"
      state: poweredon
      esxi_hostname: "{{ esxi_host }}"
      hardware:
        num_cpus: "{{ cpu }}"
        memory_mb: "{{ mem_mb }}"
      disk:
        - size_gb: "{{ disk }}"
          type: thin
          datastore: "{{ datastore }}"
    register: new_vm
  - name: Wait for VMware tools to become available
    vmware_guest_tools_wait:
       hostname: "{{ vcenter_host }}"
       username: "{{ vcenter_username }}"
       password: "{{ vcenter_password }}"
       validate_certs: False
       name: "{{ vm_name }}"
       folder: "/{{ datacenter }}/vm/{{ folder }}"
  - name: "IP configuration"
    local_action:
       module: vmware_vm_shell
       hostname: "{{ vcenter_host }}"
       username: "{{ vcenter_username }}"
       password: "{{ vcenter_password }}"
       datacenter: "{{ datacenter }}"
       vm_id: "{{ vm_name }}"
       vm_username: "{{ v_username }}"
       vm_password: "{{ v_password }}"
       vm_shell: 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe'
       vm_shell_args: 'netsh interface ip set address "Ethernet0 2" static 10.193.34.250 255.255.255.192 10.193.34.193'
       vm_shell_cwd: 'C:\Users\Administrator'
       validate_certs: False

Solution

  • Your code is fine, but you have to wait for the VMWare Tools to be active on the VM in order to use vmware_vm_shell.

    Use this before your vmware_vm_shell:

      - name: Wait for VMware tools to become available
        vmware_guest_tools_wait:
          hostname: "{{ vcenter_host }}"
          username: "{{ vcenter_username }}"
          password: "{{ vcenter_password }}"
          validate_certs: False
          name: "{{ vm_name }}"
          folder: "/{{ vcenter_datacenter }}/vm/{{ default_vm_folder }}"
    
       - name: Change IP Address for Windows Machine
          vmware_vm_shell:
            hostname: "{{ vcenter_host }}"
            username: "{{ vcenter_username }}"
            password: "{{ vcenter_password }}"
            validate_certs: False
            datacenter: "{{ vcenter_datacenter }}"
            folder: "/{{ datacenter }}/vm/{{ folder }}"
            vm_id: "{{ vm_name }}"
            vm_username: "{{ v_username }}"
            vm_password: "{{ v_password }}"
            vm_shell: netsh.exe
            vm_shell_args: ' interface ip set address name="Ethernet0 2" static 10.193.34.250 255.255.255.192 10.193.34.193'
            vm_shell_cwd: "C:\\Windows\\System32"
    
        - name: Change DNS for Windows Machine
          vmware_vm_shell:
            hostname: "{{ vcenter_host }}"
            username: "{{ vcenter_username }}"
            password: "{{ vcenter_password }}"
            validate_certs: False
            datacenter: "{{ vcenter_datacenter }}"
            folder: "/{{ datacenter }}/vm/{{ folder }}"
            vm_id: "{{ vm_name }}"
            vm_username: "{{ v_username }}"
            vm_password: "{{ v_password }}"
            vm_shell       : netsh.exe
            vm_shell_args  : ' interface ip set dns name="Ethernet0 2" static 8.8.8.8'
            vm_shell_cwd   : "C:\\Windows\\System32"
    
        - name: Wait until the ipaddress of machine is ready
          wait_for:
            port: 5986
            delay: 20
            state: started
            host: "10.193.34.250"