Completed
Pull Request — master (#462)
by
unknown
02:23
created

VMNicEdit   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 47
Duplicated Lines 0 %
Metric Value
wmc 6
dl 0
loc 47
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B run() 0 45 6
1
#!/usr/bin/env python
2
3
# Licensed to the StackStorm, Inc ('StackStorm') under one or more
4
# contributor license agreements.  See the NOTICE file distributed with
5
# this work for additional information regarding copyright ownership.
6
# The ASF licenses this file to You under the Apache License, Version 2.0
7
# (the "License"); you may not use this file except in compliance with
8
# the License.  You may obtain a copy of the License at
9
#
10
#     http://www.apache.org/licenses/LICENSE-2.0
11
#
12
# Unless required by applicable law or agreed to in writing, software
13
# distributed under the License is distributed on an "AS IS" BASIS,
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
# See the License for the specific language governing permissions and
16
# limitations under the License.
17
18
from pyVmomi import vim
19
20
from vmwarelib import inventory
21
from vmwarelib import checkinputs
22
from vmwarelib.actions import BaseAction
23
24
25
class VMNicEdit(BaseAction):
26
27
    def run(self, vm_id, vm_name, network_adapter, network_name):
28
        # check means of finding the VM was provided
29
        checkinputs.one_of_two_strings(vm_id, vm_name, "ID or Name")
30
        # convert ids to stubs
31
        vm = inventory.get_virtualmachine(self.si_content,
32
                                          moid=vm_id,
33
                                          name=vm_name)
34
        network_obj = inventory.get_network(self.si_content,
35
                                            name=network_name)
36
37
        # find correct NIC
38
        for device in vm.config.hardware.device:
39
            if isinstance(device, vim.vm.device.VirtualEthernetCard)\
40
                    and device.deviceInfo.label == network_adapter:
41
                nic = device
42
43
        # Different test method due to fact that object
44
        # isn't instantiated if not found
45
        try:
46
            nic
47
        except:
48
            raise Exception('Unable to find Network Adapter provided')
49
50
        # Create object for new Specification
51
        new_spec = vim.vm.device.VirtualDeviceSpec()
52
        new_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.edit
53
        new_spec.device = nic
54
55
        # If network name provided assign new network
56
        # Room to expand the following to set additional flags/values
57
        if network_name:
58
            new_spec.device.backing.network = network_obj
59
            new_spec.device.backing.deviceName = network_obj.name
60
            new_spec.device.deviceInfo.summary = network_obj.name
61
62
        # format changes for config spec update
63
        dev_changes = []
64
        dev_changes.append(new_spec)
65
        spec = vim.vm.ConfigSpec()
66
        spec.deviceChange = dev_changes
67
68
        task = vm.ReconfigVM_Task(spec)
69
        self._wait_for_task(task)
70
71
        return {'state': str(task.info.state)}
72