trouble with pysphere - ansible

2019-07-28 22:44发布

问题:

i am trying to deploy a VM via Ansible on my ESXi host. I am using the following role for this:

- vsphere_guest:
    vcenter_hostname: emea-esx-s18t.****.net
    username: ****
    password: ****
    guest: newvm001
    state: powered_off
    vm_extra_config:
      vcpu.hotadd: yes
      mem.hotadd:  yes
      notes: This is a test VM
    vm_disk:
      disk1:
        size_gb: 10
        type: thin
        datastore: ****
    vm_nic:
      nic1:
        type: vmxnet3
        network: VM Network
        network_type: standard
    vm_hardware:
      memory_mb: 4096
      num_cpus: 4
      osid: windows7Server64Guest
      scsi: paravirtual
    esxi:
      datacenter: MyDatacenter
      hostname: esx-s18t.****.net

when i execute this role now via a playbook i get the following message:

root@ansible1:~/ansible# ansible-playbook -i Inventory vmware_deploy.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [172.20.22.5]

TASK [vmware : vsphere_guest] **************************************************
fatal: [172.20.22.5]: FAILED! => {"changed": false, "failed": true, "msg": "pysphere module required"}

PLAY RECAP *********************************************************************
172.20.22.5                : ok=1    changed=0    unreachable=0    failed=1

So it seems to be "pysphere" module is missing. i've already checked that with the command:

root@ansible1:~/ansible# pip install pysphere
Requirement already satisfied (use --upgrade to upgrade): pysphere in /usr/local/lib/python2.7/dist-packages/pysphere-0                          .1.7-py2.7.egg

Then i did the "upgrade" and get the following message back:

root@ansible1:~/ansible# pip install pysphere --upgrade
Requirement already up-to-date: pysphere in /usr/local/lib/python2.7/dist-packages/pysphere-0.1.7-py2.7.egg

So it seems to be it is already installed and its up-to-date , why do i get this error message then? How can i fix it that my god damn role works fine now? Jesus, Ansible makes me crazy ..

I hope you guys can help me, thanks in advance!

kind regards, kgierman

EDIT: so i've writen a new playbook with the old stuff, the new playbool lookes like this(i've added your localhost and connection local stuff):

---
- hosts: localhost
  connection: local
  tasks:
    vsphere_guest:
        vcenter_hostname: emea-esx-s18t.****.net
            username: ****
            password: ****
            guest: newvm001
            state: powered_off
        vm_extra_config:
            vcpu.hotadd: yes
            mem.hotadd:  yes
            notes: This is a test VM
        vm_disk:
            disk1:
            size_gb: 10
            type: thin
            datastore: ****
        vm_nic:
            nic1:
            type: vmxnet3
            network: VM Network
            network_type: standard
        vm_hardware:
            memory_mb: 4096
            num_cpus: 4
            osid: windows7Server64Guest
            scsi: paravirtual
        esxi:
            datacenter: MyDatacenter
            hostname: esx-s18t.****.net

so when i execute this playbook i get the following error:

root@ansible1:~/ansible# ansible-playbook vmware2.yml
ERROR! Syntax Error while loading YAML.


The error appears to have been in '/root/ansible/vmware2.yml': line 7, column 19, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

        vcenter_hostname: emea-esx-s18t.sddc-hwl-family.net
          username: root
                  ^ here

the struggle is real -.-

回答1:

You generally should execute provisioning modules such as vsphere_guest on your local ansible machine.
I suspect that 172.20.22.5 is actually your ESX host, and ansible try to execute module from there, where pysphere is surely absent.
Use:

- hosts: localhost
  tasks:
    - vsphere_guest:
         ...


回答2:

Ran into this issue once again on macOS / OSX... It seems to be related to PYTHONPATH.

I have this in my .profile:

export PYTHONPATH="/usr/local/lib/python2.7/site-packages"

[ ... further down ... ]

export PYTHONPATH="/usr/local/Cellar/ansible/2.1.2.0/libexec/lib/python2.7/site-packages:/usr/local/Cellar/ansible/2.2.1.0/libexec/vendor/lib/python2.7/site-packages:$PYTHONPATH"

The first line with PYTHONPATH is where pysphere and other system modules reside.
Also take note of the specific version of Ansible!
Anyway, this seems to resolve the issue.

Source: https://github.com/debops/debops-tools/issues/159#issuecomment-236536195