-
Notifications
You must be signed in to change notification settings - Fork 22
/
enos_vagrant.py
68 lines (57 loc) · 2.17 KB
/
enos_vagrant.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import copy
import logging
from enos.provider.provider import Provider
from enos.utils.extra import gen_enoslib_roles
import enoslib.infra.enos_vagrant.provider as enoslib_vagrant
from enoslib.infra.enos_vagrant.configuration import Configuration
from enoslib.api import expand_groups
# - SPHINX_DEFAULT_CONFIG
DEFAULT_CONFIG = {
'backend': 'virtualbox',
'box': 'generic/debian9',
'user': 'root',
}
# + SPHINX_DEFAULT_CONFIG
LOGGER = logging.getLogger(__name__)
def _build_enoslib_conf(config):
conf = copy.deepcopy(config)
enoslib_conf = conf.get("provider", {})
enoslib_conf.pop("type", None)
if enoslib_conf.get("resources") is not None:
return enoslib_conf
# This coould be common to everyone
# Enoslib needs to be patched here
resources = conf.get("topology", conf.get("resources", {}))
machines = []
for desc in gen_enoslib_roles(resources):
# NOTE(msimonin): in the basic definition, we consider only
# two networks
grps = expand_groups(desc["group"])
for grp in grps:
machines.append({
"flavour": desc["flavor"],
"roles": [grp, desc["role"]],
"number": desc["number"],
})
networks = [
{"roles": ["network_interface"], "cidr": "192.168.42.0/24"},
{"roles": ["neutron_external_interface"], "cidr": "192.168.43.0/24"}
]
enoslib_conf.update({"resources": {"machines": machines,
"networks": networks}})
return enoslib_conf
class Enos_vagrant(Provider):
def init(self, conf, force_deploy=False):
LOGGER.info("Vagrant provider")
enoslib_conf = _build_enoslib_conf(conf)
_conf = Configuration.from_dictionnary(enoslib_conf)
vagrant = enoslib_vagrant.Enos_vagrant(_conf)
roles, networks = vagrant.init(force_deploy)
return roles, networks
def destroy(self, env):
LOGGER.info("Destroying vagrant deployment")
enoslib_conf = _build_enoslib_conf(env['config'])
vagrant = enoslib_vagrant.Enos_vagrant(enoslib_conf)
vagrant.destroy()
def default_config(self):
return DEFAULT_CONFIG