Completed
Pull Request — master (#352)
by James
02:11
created

CreateVMAction.run()   B

Complexity

Conditions 3

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 3
dl 0
loc 28
rs 8.8571
1
import random
2
3
from lib.action import PyraxBaseAction
4
from lib.formatters import to_server_dict
5
6
__all__ = [
7
    'CreateVMAction'
8
]
9
10
11
class CreateVMAction(PyraxBaseAction):
12
    def run(self, name, image_id, flavor_id, key_material=None, metadata=None,
13
            region=None):
14
        if region:
15
            cs = self.pyrax.connect_to_cloudservers(region=region)
16
        else:
17
            cs = self.pyrax.cloudservers
18
19
        image = cs.images.get(image_id)
20
        flavor = cs.flavors.get(flavor_id)
21
22
        if key_material:
23
            key_name = 'key-%s' % (random.randint(1, 100000))
24
            cs.keypairs.create(key_name, key_material)
25
        else:
26
            key_name = None
27
28
        self.logger.info('Creating server...')
29
30
        server = cs.servers.create(name=name, image=image, flavor=flavor,
31
                                   key_name=key_name, meta=metadata)
32
33
        # Block until provisioned
34
        self.pyrax.utils.wait_for_build(server)
35
36
        self.logger.info('Server successfully created: %s' % (server))
37
38
        result = to_server_dict(server=server)
39
        return result
40