コード例 #1
0
ファイル: test_vmware.py プロジェクト: commandprompt/ansible
def test_required_params(request, params, msg, fake_ansible_module):
    """ Test if required params are correct or not"""
    fake_ansible_module.params = params
    with pytest.raises(FailJsonException):
        vmware_module_utils.connect_to_api(fake_ansible_module)
    assert fake_ansible_module.fail_json.called_once()
    assert msg in fake_ansible_module.fail_json.call_args[1]['msg']
コード例 #2
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(
        dict(vmk_name=dict(required=True, type='str'),
             ip_address=dict(required=True, type='str'),
             subnet_mask=dict(required=True, type='str')))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    vmk_name = module.params['vmk_name']
    ip_address = module.params['ip_address']
    subnet_mask = module.params['subnet_mask']

    try:
        content = connect_to_api(module, False)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed = configure_vmkernel_ip_address(host_system, vmk_name,
                                                ip_address, subnet_mask)
        module.exit_json(changed=changed)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #3
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(target_id=dict(required=True, type='int')))
    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    content = connect_to_api(module)
    host = find_hostsystem(content)

    target_lun_uuid = {}
    scsilun_canonical = {}

    # Associate the scsiLun key with the canonicalName (NAA)
    for scsilun in host.config.storageDevice.scsiLun:
        scsilun_canonical[scsilun.key] = scsilun.canonicalName

    # Associate target number with LUN uuid
    for target in host.config.storageDevice.scsiTopology.adapter[0].target:
        for lun in target.lun:
            target_lun_uuid[target.target] = lun.scsiLun

    module.exit_json(changed=False, canonical=scsilun_canonical[target_lun_uuid[module.params['target_id']]])
コード例 #4
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(vmk_name=dict(required=True, type='str'),
                         ip_address=dict(required=True, type='str'),
                         subnet_mask=dict(required=True, type='str')))

    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    vmk_name = module.params['vmk_name']
    ip_address = module.params['ip_address']
    subnet_mask = module.params['subnet_mask']

    try:
        content = connect_to_api(module, False)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed = configure_vmkernel_ip_address(host_system, vmk_name, ip_address, subnet_mask)
        module.exit_json(changed=changed)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #5
0
 def __init__(self, module):
     self.module = module
     self.content = connect_to_api(self.module)
     self.local_user_name = self.module.params['local_user_name']
     self.local_user_password = self.module.params['local_user_password']
     self.local_user_description = self.module.params['local_user_description']
     self.state = self.module.params['state']
コード例 #6
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(cluster_uuid=dict(required=False, type='str')))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    new_cluster_uuid = module.params['cluster_uuid']

    try:
        content = connect_to_api(module, False)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed, result, cluster_uuid = create_vsan_cluster(
            host_system, new_cluster_uuid)
        module.exit_json(changed=changed,
                         result=result,
                         cluster_uuid=cluster_uuid)

    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #7
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(
        dict(change_hostname_to=dict(required=True, type='str'),
             domainname=dict(required=True, type='str'),
             dns_servers=dict(required=True, type='list')))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    change_hostname_to = module.params['change_hostname_to']
    domainname = module.params['domainname']
    dns_servers = module.params['dns_servers']
    try:
        content = connect_to_api(module)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed = configure_dns(host_system, change_hostname_to, domainname,
                                dns_servers)
        module.exit_json(changed=changed)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #8
0
 def __init__(self, module):
     self.module = module
     self.dvs_portgroup = None
     self.switch_name = self.module.params['switch_name']
     self.portgroup_name = self.module.params['portgroup_name']
     self.vlan_id = self.module.params['vlan_id']
     self.num_ports = self.module.params['num_ports']
     self.portgroup_type = self.module.params['portgroup_type']
     self.dv_switch = None
     self.state = self.module.params['state']
     self.vlan_trunk = self.module.params['vlan_trunk']
     self.security_promiscuous = self.module.params['network_policy']['promiscuous']
     self.security_forged_transmits = self.module.params['network_policy']['forged_transmits']
     self.security_mac_changes = self.module.params['network_policy']['mac_changes']
     self.policy_block_override = self.module.params['port_policy']['block_override']
     self.policy_ipfix_override = self.module.params['port_policy']['ipfix_override']
     self.policy_live_port_move = self.module.params['port_policy']['live_port_move']
     self.policy_network_rp_override = self.module.params['port_policy']['network_rp_override']
     self.policy_port_config_reset_at_disconnect = self.module.params['port_policy']['port_config_reset_at_disconnect']
     self.policy_security_override = self.module.params['port_policy']['security_override']
     self.policy_shaping_override = self.module.params['port_policy']['shaping_override']
     self.policy_traffic_filter_override = self.module.params['port_policy']['traffic_filter_override']
     self.policy_uplink_teaming_override = self.module.params['port_policy']['uplink_teaming_override']
     self.policy_vendor_config_override = self.module.params['port_policy']['vendor_config_override']
     self.policy_vlan_override = self.module.params['port_policy']['vlan_override']
     self.content = connect_to_api(module)
コード例 #9
0
ファイル: vmware_guest_facts.py プロジェクト: ernstp/ansible
    def __init__(self, module):
        if not HAS_PYVMOMI:
            module.fail_json(msg='pyvmomi module required')

        self.module = module
        self.params = module.params
        self.content = connect_to_api(self.module)
コード例 #10
0
def main():
    spec = vmware_argument_spec()
    spec.update(dict(
        esxi_hostname=dict(required=True),
        vsan=dict(required=False, choices=['ensureObjectAccessibility',
                                           'evacuateAllData',
                                           'noAction']),
        evacuate=dict(required=False, type='bool', default=False),
        timeout=dict(required=False, default=0, type='int'),
        state=dict(required=False,
                   default='present',
                   choices=['present', 'absent'])))

    module = AnsibleModule(argument_spec=spec)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    content = connect_to_api(module)
    host = find_hostsystem_by_name(content, module.params['esxi_hostname'])

    if not host:
        module.fail_json(
            msg='Host not found in vCenter')

    if module.params['state'] == 'present':
        result = EnterMaintenanceMode(module, host)

    elif module.params['state'] == 'absent':
        result = ExitMaintenanceMode(module, host)

    module.exit_json(**result)
コード例 #11
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(target_id=dict(required=True, type='int')))
    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    content = connect_to_api(module)
    host = find_hostsystem(content)

    target_lun_uuid = {}
    scsilun_canonical = {}

    # Associate the scsiLun key with the canonicalName (NAA)
    for scsilun in host.config.storageDevice.scsiLun:
        scsilun_canonical[scsilun.key] = scsilun.canonicalName

    # Associate target number with LUN uuid
    for target in host.config.storageDevice.scsiTopology.adapter[0].target:
        for lun in target.lun:
            target_lun_uuid[target.target] = lun.scsiLun

    module.exit_json(changed=False,
                     canonical=scsilun_canonical[target_lun_uuid[
                         module.params['target_id']]])
コード例 #12
0
    def __init__(self, module):
        if not HAS_PYVMOMI:
            module.fail_json(msg='pyvmomi module required')

        self.module = module
        self.params = module.params
        self.content = connect_to_api(self.module)
コード例 #13
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(change_hostname_to=dict(required=True, type='str'),
                              domainname=dict(required=True, type='str'),
                              dns_servers=dict(required=True, type='list')))

    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    change_hostname_to = module.params['change_hostname_to']
    domainname = module.params['domainname']
    dns_servers = module.params['dns_servers']
    try:
        content = connect_to_api(module)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed = configure_dns(host_system, change_hostname_to, domainname, dns_servers)
        module.exit_json(changed=changed)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #14
0
ファイル: vmware_vsan_cluster.py プロジェクト: ernstp/ansible
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(cluster_uuid=dict(required=False, type='str')))

    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    new_cluster_uuid = module.params['cluster_uuid']

    try:
        content = connect_to_api(module, False)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed, result, cluster_uuid = create_vsan_cluster(host_system, new_cluster_uuid)
        module.exit_json(changed=changed, result=result, cluster_uuid=cluster_uuid)

    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #15
0
def main():
    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(datacenter=dict(default=None, type='str'),
                              cluster=dict(default=None, type='str'),
                              folder=dict(type='str', default='/vm'),
                              vm_id=dict(required=True, type='str'),
                              vm_id_type=dict(default='vm_name', type='str', choices=['inventory_path', 'uuid', 'dns_name', 'vm_name']),
                              vm_username=dict(required=False, type='str'),
                              vm_password=dict(required=False, type='str', no_log=True),
                              vm_shell=dict(required=True, type='str'),
                              vm_shell_args=dict(default=" ", type='str'),
                              vm_shell_env=dict(default=None, type='list'),
                              vm_shell_cwd=dict(default=None, type='str')))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False,
                           required_if=[['vm_id_type', 'inventory_path', ['folder']]],
                           )

    if not HAS_PYVMOMI:
        module.fail_json(changed=False, msg='pyvmomi is required for this module')

    try:
        p = module.params
        datacenter_name = p['datacenter']
        cluster_name = p['cluster']
        folder = p['folder']
        content = connect_to_api(module)

        datacenter = None
        if datacenter_name:
            datacenter = find_datacenter_by_name(content, datacenter_name)
            if not datacenter:
                module.fail_json(changed=False, msg="datacenter not found")

        cluster = None
        if cluster_name:
            cluster = find_cluster_by_name(content, cluster_name, datacenter)
            if not cluster:
                module.fail_json(changed=False, msg="cluster not found")

        if p['vm_id_type'] == 'inventory_path':
            vm = find_vm_by_id(content, vm_id=p['vm_id'], vm_id_type="inventory_path", folder=folder)
        else:
            vm = find_vm_by_id(content, vm_id=p['vm_id'], vm_id_type=p['vm_id_type'], datacenter=datacenter, cluster=cluster)

        if not vm:
            module.fail_json(msg='VM not found')

        msg = execute_command(content, vm, p['vm_username'], p['vm_password'],
                              p['vm_shell'], p['vm_shell_args'], p['vm_shell_env'], p['vm_shell_cwd'])

        module.exit_json(changed=True, uuid=vm.summary.config.uuid, msg=msg)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(changed=False, msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(changed=False, msg=method_fault.msg)
    except Exception as e:
        module.fail_json(changed=False, msg=str(e))
コード例 #16
0
 def __init__(self, module):
     self.module = module
     self.content = connect_to_api(self.module)
     self.local_user_name = self.module.params['local_user_name']
     self.local_user_password = self.module.params['local_user_password']
     self.local_user_description = self.module.params[
         'local_user_description']
     self.state = self.module.params['state']
コード例 #17
0
 def __init__(self, module):
     self.module = module
     self.esxi_hostname = module.params['esxi_hostname']
     self.pg_name = module.params['pg_name']
     self.promiscuous_mode = module.params['promiscuous_mode']
     self.mac_address_changes = module.params['mac_address_changes']
     self.forged_transmits = module.params['forged_transmits']
     self.content = connect_to_api(module)
コード例 #18
0
def main():
    argument_spec = vmware_argument_spec()
    argument_spec.update(cluster_name=dict(required=True, type='str'),
                         fetch_from_cache=dict(required=False, type='bool'))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=True)

    if not HAS_PYVMOMI:
        module.fail_json(msg=missing_required_lib('PyVmomi'),
                         exception=PYVMOMI_IMP_ERR)

    if not HAS_VSANPYTHONSDK:
        module.fail_json(
            msg=missing_required_lib('vSAN Management SDK for Python'),
            exception=VSANPYTHONSDK_IMP_ERR)

    if not HAS_PYVMOMIJSON:
        module.fail_json(
            msg=
            'The installed version of pyvmomi lacks JSON output support; need pyvmomi>6.7.1'
        )

    try:
        si, content = connect_to_api(module, True, True)
    except Exception as e:
        module.fail_json(msg=e.msg)

    client_stub = si._GetStub()
    ssl_context = client_stub.schemeArgs.get('context')

    cluster = find_cluster_by_name(content, module.params['cluster_name'])

    if not cluster:
        module.fail_json(msg="Failed to find cluster %s" %
                         module.params['cluster_name'])

    apiVersion = vsanapiutils.GetLatestVmodlVersion(module.params['hostname'])
    vcMos = vsanapiutils.GetVsanVcMos(client_stub,
                                      context=ssl_context,
                                      version=apiVersion)

    vsanClusterHealthSystem = vcMos['vsan-cluster-health-system']

    try:
        clusterHealth = vsanClusterHealthSystem.VsanQueryVcClusterHealthSummary(
            cluster=cluster, fetchFromCache=module.params['fetch_from_cache'])
    except vmodl.fault.NotFound as not_found:
        module.fail_json(msg=not_found.msg)
    except vmodl.fault.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)

    health = json.dumps(clusterHealth,
                        cls=VmomiSupport.VmomiJSONEncoder,
                        sort_keys=True,
                        strip_dynamic=True)

    module.exit_json(changed=False, vsan_health_info=health)
コード例 #19
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(
        dict(
            vm_name=dict(required=True, aliases=['vm'], type='str'),
            destination_host=dict(required=True, aliases=['destination'], type='str'),
        )
    )
    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyVmomi is required for this module')

    content = connect_to_api(module=module)

    vm_object = find_vm_by_name(content=content, vm_name=module.params['vm_name'])
    host_object = find_hostsystem_by_name(content=content, hostname=module.params['destination_host'])

    # Setup result
    result = {
        'changed': False
    }

    # Check if we could find the VM or Host
    if not vm_object:
        module.fail_json(msg='Cannot find virtual machine')
    if not host_object:
        module.fail_json(msg='Cannot find host')

    # Make sure VM isn't already at the destination
    if vm_object.runtime.host.name == module.params['destination_host']:
        module.exit_json(**result)

    if not module.check_mode:
        # Migrate VM and get Task object back
        task_object = migrate_vm(vm_object=vm_object, host_object=host_object)

        # Wait for task to complete
        wait_for_task(task_object)

        # If task was a success the VM has moved, update running_host and complete module
        if task_object.info.state == vim.TaskInfo.State.success:
            vm_object = find_vm_by_name(content=content, vm_name=module.params['vm_name'])
            result['running_host'] = vm_object.runtime.host.name
            result['changed'] = True
            module.exit_json(**result)
        else:
            if task_object.info.error is None:
                module.fail_json(msg='Unable to migrate VM due to an error, please check vCenter')
            else:
                module.fail_json(msg='Unable to migrate VM due to an error: %s' % task_object.info.error)
    else:
        # If we are in check mode return a result as if move was performed
        result['running_host'] = module.params['destination_host']
        result['changed'] = True
        module.exit_json(**result)
コード例 #20
0
    def __init__(self, module):
        if not HAS_PYVMOMI:
            module.fail_json(msg='pyvmomi module required')

        self.module = module
        self.params = module.params
        self.content = connect_to_api(self.module)
        self.cache = PyVmomiCache(self.content,
                                  dc_name=self.params['datacenter'])
コード例 #21
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(
        dict(
            vm_name=dict(required=True, aliases=['vm'], type='str'),
            destination_host=dict(required=True, aliases=['destination'], type='str'),
        )
    )
    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyVmomi is required for this module')

    content = connect_to_api(module=module)

    vm_object = find_vm_by_name(content=content, vm_name=module.params['vm_name'])
    host_object = find_hostsystem_by_name(content=content, hostname=module.params['destination_host'])

    # Setup result
    result = {
        'changed': False
    }

    # Check if we could find the VM or Host
    if not vm_object:
        module.fail_json(msg='Cannot find virtual machine')
    if not host_object:
        module.fail_json(msg='Cannot find host')

    # Make sure VM isn't already at the destination
    if vm_object.runtime.host.name == module.params['destination_host']:
        module.exit_json(**result)

    if not module.check_mode:
        # Migrate VM and get Task object back
        task_object = migrate_vm(vm_object=vm_object, host_object=host_object)

        # Wait for task to complete
        wait_for_task(task_object)

        # If task was a success the VM has moved, update running_host and complete module
        if task_object.info.state == vim.TaskInfo.State.success:
            vm_object = find_vm_by_name(content=content, vm_name=module.params['vm_name'])
            result['running_host'] = vm_object.runtime.host.name
            result['changed'] = True
            module.exit_json(**result)
        else:
            if task_object.info.error is None:
                module.fail_json(msg='Unable to migrate VM due to an error, please check vCenter')
            else:
                module.fail_json(msg='Unable to migrate VM due to an error: %s' % task_object.info.error)
    else:
        # If we are in check mode return a result as if move was performed
        result['running_host'] = module.params['destination_host']
        result['changed'] = True
        module.exit_json(**result)
コード例 #22
0
 def __init__(self, module):
     self.module = module
     self.host_system = None
     self.migrate_switch_name = self.module.params['migrate_switch_name']
     self.migrate_portgroup_name = self.module.params['migrate_portgroup_name']
     self.device = self.module.params['device']
     self.esxi_hostname = self.module.params['esxi_hostname']
     self.current_portgroup_name = self.module.params['current_portgroup_name']
     self.current_switch_name = self.module.params['current_switch_name']
     self.content = connect_to_api(module)
コード例 #23
0
 def __init__(self, module):
     self.module = module
     self.host_system = None
     self.migrate_switch_name = self.module.params['migrate_switch_name']
     self.migrate_portgroup_name = self.module.params['migrate_portgroup_name']
     self.device = self.module.params['device']
     self.esxi_hostname = self.module.params['esxi_hostname']
     self.current_portgroup_name = self.module.params['current_portgroup_name']
     self.current_switch_name = self.module.params['current_switch_name']
     self.content = connect_to_api(module)
コード例 #24
0
 def __init__(self, module):
     self.module = module
     self.dvs = None
     self.switch_name = self.module.params['switch_name']
     self.datacenter_name = self.module.params['datacenter_name']
     self.mtu = self.module.params['mtu']
     self.uplink_quantity = self.module.params['uplink_quantity']
     self.discovery_proto = self.module.params['discovery_proto']
     self.discovery_operation = self.module.params['discovery_operation']
     self.state = self.module.params['state']
     self.content = connect_to_api(module)
コード例 #25
0
ファイル: vmware_dvswitch.py プロジェクト: ernstp/ansible
 def __init__(self, module):
     self.module = module
     self.dvs = None
     self.switch_name = self.module.params['switch_name']
     self.datacenter_name = self.module.params['datacenter_name']
     self.mtu = self.module.params['mtu']
     self.uplink_quantity = self.module.params['uplink_quantity']
     self.discovery_proto = self.module.params['discovery_proto']
     self.discovery_operation = self.module.params['discovery_operation']
     self.state = self.module.params['state']
     self.content = connect_to_api(module)
コード例 #26
0
 def __init__(self, module):
     self.module = module
     self.datacenter_name = module.params['datacenter_name']
     self.cluster_name = module.params['cluster_name']
     self.esxi_hostname = module.params['esxi_hostname']
     self.esxi_username = module.params['esxi_username']
     self.esxi_password = module.params['esxi_password']
     self.state = module.params['state']
     self.cluster = None
     self.host = None
     self.content = connect_to_api(module)
コード例 #27
0
 def __init__(self, module):
     self.host_system = None
     self.content = None
     self.vss = None
     self.module = module
     self.switch_name = module.params['switch_name']
     self.number_of_ports = module.params['number_of_ports']
     self.nic_name = module.params['nic_name']
     self.mtu = module.params['mtu']
     self.state = module.params['state']
     self.content = connect_to_api(self.module)
コード例 #28
0
ファイル: vmware_cluster.py プロジェクト: ernstp/ansible
 def __init__(self, module):
     self.module = module
     self.cluster_name = module.params['cluster_name']
     self.datacenter_name = module.params['datacenter_name']
     self.enable_drs = module.params['enable_drs']
     self.enable_ha = module.params['enable_ha']
     self.enable_vsan = module.params['enable_vsan']
     self.desired_state = module.params['state']
     self.datacenter = None
     self.cluster = None
     self.content = connect_to_api(module)
コード例 #29
0
 def __init__(self, module):
     self.module = module
     self.dvs_portgroup = None
     self.switch_name = self.module.params['switch_name']
     self.portgroup_name = self.module.params['portgroup_name']
     self.vlan_id = self.module.params['vlan_id']
     self.num_ports = self.module.params['num_ports']
     self.portgroup_type = self.module.params['portgroup_type']
     self.dv_switch = None
     self.state = self.module.params['state']
     self.content = connect_to_api(module)
コード例 #30
0
 def __init__(self, module):
     self.module = module
     self.cluster_name = module.params['cluster_name']
     self.datacenter_name = module.params['datacenter_name']
     self.enable_drs = module.params['enable_drs']
     self.enable_ha = module.params['enable_ha']
     self.enable_vsan = module.params['enable_vsan']
     self.desired_state = module.params['state']
     self.datacenter = None
     self.cluster = None
     self.content = connect_to_api(module)
コード例 #31
0
 def _connect(self):
     """Connect to vcenter and return content."""
     try:
         return vmware.connect_to_api(self.module)
     except socket.gaierror as ex:
         logging.critical('connection error\n%s', ex)
     except vim.fault.InvalidLogin as ex:
         logging.critical('authentication error\n%s', ex.msg)
     except AttributeError:
         logging.error('error connecting to vcenter')
     sys.exit(1)
コード例 #32
0
ファイル: vmware_vswitch.py プロジェクト: ernstp/ansible
 def __init__(self, module):
     self.host_system = None
     self.content = None
     self.vss = None
     self.module = module
     self.switch = module.params['switch']
     self.number_of_ports = module.params['number_of_ports']
     self.nics = module.params['nics']
     self.mtu = module.params['mtu']
     self.state = module.params['state']
     self.content = connect_to_api(self.module)
コード例 #33
0
 def __init__(self, module):
     self.content = connect_to_api(module)
     self.module = module
     self.params = module.params
     self.mf_file = ''
     self.ovf_dir = ''
     # set read device content chunk size to 2 MB
     self.chunk_size = 2 * 2**20
     # set lease progress update interval to 15 seconds
     self.lease_interval = 15
     self.facts = {'device_files': []}
コード例 #34
0
 def __init__(self, module):
     self.module = module
     self.dv_switch = None
     self.uplink_portgroup = None
     self.host = None
     self.dv_switch = None
     self.nic = None
     self.content = connect_to_api(self.module)
     self.state = self.module.params['state']
     self.switch_name = self.module.params['switch_name']
     self.esxi_hostname = self.module.params['esxi_hostname']
     self.vmnics = self.module.params['vmnics']
コード例 #35
0
def main():

    argument_spec = vmware_argument_spec()
    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    content = connect_to_api(module)
    data = all_facts(content)
    module.exit_json(changed=False, ansible_facts=data)
コード例 #36
0
ファイル: vmware_host.py プロジェクト: ernstp/ansible
 def __init__(self, module):
     self.module = module
     self.datacenter_name = module.params['datacenter_name']
     self.cluster_name = module.params['cluster_name']
     self.esxi_hostname = module.params['esxi_hostname']
     self.esxi_username = module.params['esxi_username']
     self.esxi_password = module.params['esxi_password']
     self.state = module.params['state']
     self.dc = None
     self.cluster = None
     self.host = None
     self.content = connect_to_api(module)
コード例 #37
0
 def __init__(self, module):
     self.module = module
     self.name = module.params["name"]
     self.method = module.params["method"]
     self.datacenter = module.params["datacenter"]
     self.path = module.params["path"]
     self.compute_resource = module.params["compute_resource"]
     self.resource_pool = module.params["resource_pool"]
     self.datastore = module.params["datastore"]
     self.folder = module.params["folder"]
     self.disk_type = module.params["disk_type"]
     self.content = connect_to_api(module)
コード例 #38
0
ファイル: vmware_dvs_host.py プロジェクト: ernstp/ansible
 def __init__(self, module):
     self.module = module
     self.dv_switch = None
     self.uplink_portgroup = None
     self.host = None
     self.dv_switch = None
     self.nic = None
     self.content = connect_to_api(self.module)
     self.state = self.module.params['state']
     self.switch_name = self.module.params['switch_name']
     self.esxi_hostname = self.module.params['esxi_hostname']
     self.vmnics = self.module.params['vmnics']
コード例 #39
0
    def __init__(self, module):
        if not HAS_PYVMOMI:
            module.fail_json(msg='pyvmomi module required')

        self.module = module
        self.params = module.params
        self.si = None
        self.content = connect_to_api(self.module)
        self.configspec = None
        self.change_detected = False
        self.customspec = None
        self.current_vm_obj = None
        self.cache = PyVmomiCache(self.content, dc_name=self.params['datacenter'])
コード例 #40
0
    def sanitize_params(self):
        '''
        this method is used to verify user provided parameters
        '''
        self.vm_obj = self.get_vm()
        if self.vm_obj is None:
            vm_id = self.vm_uuid or self.vm_name or self.moid
            self.module.fail_json(
                msg="Failed to find the VM/template with %s" % vm_id)

        # connect to destination VC
        self.destination_content = connect_to_api(
            self.module,
            hostname=self.destination_vcenter,
            username=self.destination_vcenter_username,
            password=self.destination_vcenter_password,
            port=self.destination_vcenter_port,
            validate_certs=self.destination_vcenter_validate_certs)

        # Check if vm name already exists in the destination VC
        vm = find_vm_by_name(content=self.destination_content,
                             vm_name=self.params['destination_vm_name'])
        if vm:
            self.module.exit_json(
                changed=False, msg="A VM with the given name already exists")

        datastore_name = self.params['destination_datastore']
        datastore_cluster = find_obj(self.destination_content,
                                     [vim.StoragePod], datastore_name)
        if datastore_cluster:
            # If user specified datastore cluster so get recommended datastore
            datastore_name = self.get_recommended_datastore(
                datastore_cluster_obj=datastore_cluster)
            # Check if get_recommended_datastore or user specified datastore exists or not
        self.destination_datastore = find_datastore_by_name(
            content=self.destination_content, datastore_name=datastore_name)
        if self.destination_datastore is None:
            self.module.fail_json(msg="Destination datastore not found.")

        self.destination_host = find_hostsystem_by_name(
            content=self.destination_content,
            hostname=self.params['destination_host'])
        if self.destination_host is None:
            self.module.fail_json(msg="Destination host not found.")

        if self.params['destination_resource_pool']:
            self.destination_resource_pool = find_resource_pool_by_name(
                content=self.destination_content,
                resource_pool_name=self.params['destination_resource_pool'])
        else:
            self.destination_resource_pool = self.destination_host.parent.resourcePool
コード例 #41
0
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(
        dict(portgroup_name=dict(required=True, type='str'),
             ip_address=dict(required=True, type='str'),
             subnet_mask=dict(required=True, type='str'),
             mtu=dict(required=False, type='int'),
             enable_vsan=dict(required=False, type='bool'),
             enable_vmotion=dict(required=False, type='bool'),
             enable_mgmt=dict(required=False, type='bool'),
             enable_ft=dict(required=False, type='bool'),
             vswitch_name=dict(required=True, type='str'),
             vlan_id=dict(required=True, type='int')))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    port_group_name = module.params['portgroup_name']
    ip_address = module.params['ip_address']
    subnet_mask = module.params['subnet_mask']
    mtu = module.params['mtu']
    enable_vsan = module.params['enable_vsan']
    enable_vmotion = module.params['enable_vmotion']
    enable_mgmt = module.params['enable_mgmt']
    enable_ft = module.params['enable_ft']
    vswitch_name = module.params['vswitch_name']
    vlan_id = module.params['vlan_id']

    try:
        content = connect_to_api(module)
        host = get_all_objs(content, [vim.HostSystem])
        if not host:
            module.fail_json(msg="Unable to locate Physical Host.")
        host_system = host.keys()[0]
        changed = create_vmkernel_adapter(host_system, port_group_name,
                                          vlan_id, vswitch_name, ip_address,
                                          subnet_mask, mtu, enable_vsan,
                                          enable_vmotion, enable_mgmt,
                                          enable_ft)
        module.exit_json(changed=changed)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
 def __init__(self, module):
     self.module = module
     self.datacenter_name = module.params["datacenter"]
     self.cluster_name = module.params["cluster"]
     self.folder = module.params["folder"]
     self.vm_id = module.params["vm_id"]
     self.vm_id_type = module.params["vm_id_type"]
     self.vm_username = module.params["vm_username"]
     self.vm_password = module.params["vm_password"]
     self.vm_shell = module.params["vm_shell"]
     self.vm_shell_args = module.params["vm_shell_args"]
     self.check_interval = module.params["check_interval"]
     self.time_out = module.params["time_out"]
     self.content = connect_to_api(module)
コード例 #43
0
ファイル: vmware_guest_find.py プロジェクト: ernstp/ansible
    def __init__(self, module):
        if not HAS_PYVMOMI:
            module.fail_json(msg='pyvmomi module required')

        self.datacenter = None
        self.folders = None
        self.foldermap = {
            'fvim_by_path': {},
            'path_by_fvim': {},
            'path_by_vvim': {},
            'paths': {},
            'uuids': {}
        }
        self.module = module
        self.params = module.params
        self.content = connect_to_api(self.module)
コード例 #44
0
    def __init__(self, module):
        self.si = connect_to_api(module)
        self.module = module
        self.params = module.params

        self.datastore = None
        self.datacenter = None
        self.resource_pool = None
        self.network_mappings = []

        self.ovf_descriptor = None
        self.tar = None

        self.lease = None
        self.import_spec = None
        self.entity = None
コード例 #45
0
 def __init__(self, module):
     self.module = module
     self.datacenter = module.params['datacenter']
     self.cluster = module.params['cluster']
     self.folder = module.params['folder']
     self.hostname = module.params['hostname']
     self.username = module.params['username']
     self.password = module.params['password']
     self.state = module.params['state']
     self.dc_obj = None
     self.cluster_obj = None
     self.host_obj = None
     self.folder_obj = None
     self.folder_name = None
     self.folder_expanded = None
     self.folder_full_path = []
     self.content = connect_to_api(module)
コード例 #46
0
ファイル: vmware_vm_facts.py プロジェクト: ernstp/ansible
def main():

    argument_spec = vmware_argument_spec()
    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    try:
        content = connect_to_api(module)
        _virtual_machines = get_all_virtual_machines(content)
        module.exit_json(changed=False, virtual_machines=_virtual_machines)
    except vmodl.RuntimeFault as runtime_fault:
        module.fail_json(msg=runtime_fault.msg)
    except vmodl.MethodFault as method_fault:
        module.fail_json(msg=method_fault.msg)
    except Exception as e:
        module.fail_json(msg=str(e))
コード例 #47
0
 def __init__(self, module):
     self.module = module
     self.datacenter = module.params['datacenter']
     self.cluster = module.params['cluster']
     self.resource_pool = module.params['resource_pool']
     self.hostname = module.params['hostname']
     self.username = module.params['username']
     self.password = module.params['password']
     self.state = module.params['state']
     self.mem_shares = module.params['mem_shares']
     self.mem_limit = module.params['mem_limit']
     self.mem_reservation = module.params['mem_reservation']
     self.mem_expandable_reservations = module.params['cpu_expandable_reservations']
     self.cpu_shares = module.params['cpu_shares']
     self.cpu_limit = module.params['cpu_limit']
     self.cpu_reservation = module.params['cpu_reservation']
     self.cpu_expandable_reservations = module.params['cpu_expandable_reservations']
     self.dc_obj = None
     self.cluster_obj = None
     self.host_obj = None
     self.resource_pool_obj = None
     self.content = connect_to_api(module)
コード例 #48
0
ファイル: vmware_datacenter.py プロジェクト: ernstp/ansible
def main():

    argument_spec = vmware_argument_spec()
    argument_spec.update(
        dict(
            datacenter_name=dict(required=True, type='str'),
            state=dict(default='present', choices=['present', 'absent'], type='str')
        )
    )
    module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    context = connect_to_api(module)
    state = module.params.get('state')

    if state == 'present':
        create_datacenter(context, module)

    if state == 'absent':
        destroy_datacenter(context, module)
コード例 #49
0
def main():
    argument_spec = vmware_argument_spec()
    argument_spec.update(dict(
        labels=dict(type='dict', default=dict(source='ansible')),
        license=dict(type='str', required=True),
        state=dict(type='str', default='present', choices=['absent', 'present']),
    ))

    module = AnsibleModule(
        argument_spec=argument_spec,
        supports_check_mode=True,
    )

    license = module.params['license']
    state = module.params['state']

    # FIXME: This does not seem to work on vCenter v6.0
    labels = []
    for k in module.params['labels']:
        kv = vim.KeyValue()
        kv.key = k
        kv.value = module.params['labels'][k]
        labels.append(kv)

    result = dict(
        changed=False,
        diff=dict(),
    )

    if not HAS_PYVMOMI:
        module.fail_json(msg='pyvmomi is required for this module')

    content = connect_to_api(module)
    lm = content.licenseManager

    result['licenses'] = list_keys(lm.licenses)
    if module._diff:
        result['diff']['before'] = '\n'.join(result['licenses']) + '\n'

    if state == 'present' and license not in result['licenses']:

        result['changed'] = True
        if module.check_mode:
            result['licenses'].append(license)
        else:
            lm.AddLicense(license, labels)

            # Automatically assign to current vCenter, if needed
            key = find_key(lm.licenses, license)
            if content.about.name in key.name:
                try:
                    lam = lm.licenseAssignmentManager
                    lam.UpdateAssignedLicense(entity=content.about.instanceUuid, licenseKey=license)
                except:
                    module.warn('Could not assign "%s" (%s) to vCenter.' % (license, key.name))

            result['licenses'] = list_keys(lm.licenses)
        if module._diff:
            result['diff']['after'] = '\n'.join(result['licenses']) + '\n'

    elif state == 'absent' and license in result['licenses']:

        # Check if key is in use
        key = find_key(lm.licenses, license)
        if key.used > 0:
            module.fail_json(msg='Cannot remove key "%s", still in use %s time(s).' % (license, key.used))

        result['changed'] = True
        if module.check_mode:
            result['licenses'].remove(license)
        else:
            lm.RemoveLicense(license)
            result['licenses'] = list_keys(lm.licenses)
        if module._diff:
            result['diff']['after'] = '\n'.join(result['licenses']) + '\n'

    module.exit_json(**result)
コード例 #50
0
 def __init__(self, module):
     self.module = module
     self.content = connect_to_api(module)
     self.vm = None
     self.vm_name = module.params['vm_name']
     self.dvportgroup_name = module.params['dvportgroup_name']