예제 #1
0
 def __attach_nics(self, entity):
     # Attach NICs to VM, if specified:
     vnic_profiles_service = self._connection.system_service().vnic_profiles_service()
     nics_service = self._service.service(entity.id).nics_service()
     for nic in self._module.params['nics']:
         if search_by_name(nics_service, nic.get('name')) is None:
             if not self._module.check_mode:
                 nics_service.add(
                     otypes.Nic(
                         name=nic.get('name'),
                         interface=otypes.NicInterface(
                             nic.get('interface', 'virtio')
                         ),
                         vnic_profile=otypes.VnicProfile(
                             id=search_by_name(
                                 vnic_profiles_service,
                                 nic.get('profile_name'),
                             ).id
                         ) if nic.get('profile_name') else None,
                         mac=otypes.Mac(
                             address=nic.get('mac_address')
                         ) if nic.get('mac_address') else None,
                     )
                 )
             self.changed = True
예제 #2
0
    def create(self,
               name,
               vnic_profile,
               interface=VnicInterfaceType.VIRTIO,
               mac_addr=None):
        """
        :type name: string
        :type vnic_profile: netlib.VnicProfile
        :type interface: netlib.VnicInterfaceType
        :type mac_addr: string
        """

        sdk_type = types.Nic(name=name,
                             interface=interface,
                             vnic_profile=vnic_profile.get_sdk_type())
        if mac_addr is not None:
            sdk_type.mac = types.Mac(address=mac_addr)
        try:
            self._create_sdk_entity(sdk_type)
        except EntityCreationError as err:
            message = err.args[0]
            if 'MAC Address' in message and 'in use' in message:
                raise MacAddrInUseError(message)
            elif 'Not enough MAC addresses' in message:
                raise MacPoolIsInFullCapacityError(message)
            raise
예제 #3
0
 def build_entity(self):
     return otypes.Nic(
         name=self._module.params.get('name'),
         interface=otypes.NicInterface(self._module.params.get('interface'))
         if self._module.params.get('interface') else None,
         vnic_profile=otypes.VnicProfile(id=self.vnic_id, )
         if self.vnic_id else None,
         mac=otypes.Mac(address=self._module.params.get('mac_address'))
         if self._module.params.get('mac_address') else None,
     )
예제 #4
0
 def __attach_nics(self, entity):
     # Attach NICs to instance type, if specified:
     nics_service = self._service.service(entity.id).nics_service()
     for nic in self.param('nics'):
         if search_by_name(nics_service, nic.get('name')) is None:
             if not self._module.check_mode:
                 nics_service.add(
                     otypes.Nic(
                         name=nic.get('name'),
                         interface=otypes.NicInterface(
                             nic.get('interface', 'virtio')),
                         vnic_profile=otypes.VnicProfile(
                             id=self.__get_vnic_profile_id(nic), )
                         if nic.get('profile_name') else None,
                         mac=otypes.Mac(address=nic.get('mac_address'))
                         if nic.get('mac_address') else None,
                     ))
             self.changed = True
예제 #5
0
def mac_change(kvm_vnic):
    # Initiate oVirt SDK Connection
    try:
        connection = ovirt_connection()
        connection.authenticate()
    except:
        print("Failed to connect to oVirt engine!")
        exit(1)

    # Get the reference to the "vms" service:
    try:
        vms_service = connection.system_service().vms_service()
    except:
        print("Unable to establish OLVM system connection")
        exit(1)

    for i in range(len(kvm_vnic)):
        if "kvm" in kvm_vnic[i]['display_name']:
            try:
                # Find the virtual machine:
                vm = vms_service.list(
                    search="name={}".format(kvm_vnic[i]['display_name']))[0]
                # Locate the service that manages the virtual machine:
                vm_service = vms_service.vm_service(vm.id)
                # Locate the service that manages the NICS devices of the VM:
                nics_service = vm_service.nics_service()
                # Get the first found NIC:
                nic = nics_service.list()[0]
                # Locate the service that manages the NIC device found in previous step
                nic_service = nics_service.nic_service(nic.id)
                # Update the NIC MAC address
                nic_service.update(nic=types.Nic(
                    mac=types.Mac(address=kvm_vnic[i]['mac_address']), ), )
                print("VM " + kvm_vnic[i]['display_name'] +
                      " NIC MAC address was changed to: " +
                      kvm_vnic[i]['mac_address'])
            except:
                print("Unable to change MAC address to " +
                      kvm_vnic[i]['mac_address'] + " for VM " +
                      kvm_vnic[i]['display_name'])

    connection.close()
예제 #6
0
    def add_vm_network(
        self,
        vm: types.Vm,
        name: str,
        profile_name: str,
        mac: str,
        interface_type: types.NicInterface = types.NicInterface.VIRTIO
    ) -> types.Nic:
        profiles_service = self._connection.system_service(
        ).vnic_profiles_service()
        profile = find_one_in_list_by_name(profiles_service.list(),
                                           profile_name)

        nics_service = self._connection.system_service().vms_service(
        ).vm_service(vm.id).nics_service()
        return nics_service.add(
            types.Nic(
                name=name,
                mac=types.Mac(address=mac),
                interface=interface_type,
                vnic_profile=types.VnicProfile(id=profile.id, ),
            ))
예제 #7
0
def add_nic(api):
    NIC_NAME = 'eth0'
    # Locate the vnic profiles service and use it to find the ovirmgmt
    # network's profile id:
    profiles_service = api.system_service().vnic_profiles_service()
    profile_id = next((profile.id for profile in profiles_service.list()
                       if profile.name == MANAGEMENT_NETWORK), None)

    # Empty profile id would cause fail in later tests (e.g. add_filter):
    nt.assert_is_not_none(profile_id)

    # Locate the virtual machines service and use it to find the virtual
    # machine:
    vms_service = api.system_service().vms_service()
    vm = vms_service.list(search='name=%s' % VM0_NAME)[0]

    # Locate the service that manages the network interface cards of the
    # virtual machine:
    nics_service = vms_service.vm_service(vm.id).nics_service()

    # Use the "add" method of the network interface cards service to add the
    # new network interface card:
    nics_service.add(
        types.Nic(
            name=NIC_NAME,
            interface=types.NicInterface.VIRTIO,
            vnic_profile=types.VnicProfile(id=profile_id),
        ), )

    vm = vms_service.list(search='name=%s' % VM2_NAME)[0]
    nics_service = vms_service.vm_service(vm.id).nics_service()
    nics_service.add(
        types.Nic(
            name=NIC_NAME,
            interface=types.NicInterface.E1000,
            mac=types.Mac(address=UNICAST_MAC_OUTSIDE_POOL),
            vnic_profile=types.VnicProfile(id=profile_id),
        ), )