Extension AttrDict
Add implementation for some function in AttrDict in order to avoid recourse to AttrDict._dict In tests we use dict, but in fact should use _yaml.AttrDict Change-Id: Ie99f3b05bd65f195f2f81191bff67cbacef1b816
This commit is contained in:
parent
cbfd8bf89b
commit
2788592cb8
|
@ -74,6 +74,9 @@ class AttrDict(object):
|
|||
def __str__(self):
|
||||
return self._json(sort_keys=True)
|
||||
|
||||
def __len__(self):
|
||||
return len(self._dict)
|
||||
|
||||
|
||||
class JSONEncoder(json.JSONEncoder):
|
||||
def default(self, obj):
|
||||
|
|
|
@ -11,6 +11,7 @@ from six.moves import zip_longest
|
|||
from fuel_ccp.common import jinja_utils
|
||||
from fuel_ccp.common import utils
|
||||
from fuel_ccp import config
|
||||
from fuel_ccp.config import _yaml
|
||||
from fuel_ccp import kubernetes
|
||||
from fuel_ccp import templates
|
||||
from fuel_ccp.validation import deploy as deploy_validation
|
||||
|
@ -98,7 +99,7 @@ def parse_role(component, topology, configmaps):
|
|||
cm_version = 'dry-run'
|
||||
else:
|
||||
cm_version = _get_configmaps_version(
|
||||
configmaps, service_dir, files, CONF.configs._dict)
|
||||
configmaps, service_dir, files, CONF.configs)
|
||||
|
||||
for cont in service["containers"]:
|
||||
daemon_cmd = cont["daemon"]
|
||||
|
@ -386,7 +387,7 @@ def _make_topology(nodes, roles, replicas):
|
|||
raise RuntimeError("Failed to create topology for services")
|
||||
|
||||
# Replicas are optional, 1 replica will deployed by default
|
||||
replicas = replicas or dict()
|
||||
replicas = replicas or _yaml.AttrDict()
|
||||
|
||||
# TODO(sreshetniak): add validation
|
||||
k8s_nodes = kubernetes.list_k8s_nodes()
|
||||
|
@ -416,7 +417,7 @@ def _make_topology(nodes, roles, replicas):
|
|||
else:
|
||||
LOG.warning("Role '%s' defined, but unused", role)
|
||||
|
||||
replicas = replicas.copy()
|
||||
replicas = replicas._dict.copy()
|
||||
for svc, svc_hosts in six.iteritems(service_to_node):
|
||||
svc_replicas = replicas.pop(svc, None)
|
||||
|
||||
|
@ -570,7 +571,7 @@ def version_diff(from_image, to_image):
|
|||
|
||||
def deploy_components(components_map, components):
|
||||
|
||||
topology = _make_topology(CONF.nodes, CONF.roles, CONF.replicas._dict)
|
||||
topology = _make_topology(CONF.nodes, CONF.roles, CONF.replicas)
|
||||
if not components:
|
||||
components = set(topology.keys()) & set(components_map.keys())
|
||||
else:
|
||||
|
|
|
@ -5,6 +5,7 @@ import fixtures
|
|||
import mock
|
||||
import yaml
|
||||
|
||||
from fuel_ccp.config import _yaml
|
||||
from fuel_ccp import deploy
|
||||
from fuel_ccp.tests import base
|
||||
|
||||
|
@ -387,7 +388,7 @@ class TestDeployMakeTopology(base.TestCase):
|
|||
self.useFixture(fixtures.MockPatch(
|
||||
"fuel_ccp.kubernetes.get_object_names", return_value=node_list))
|
||||
|
||||
self._roles = {
|
||||
self._roles = _yaml.AttrDict({
|
||||
"controller": [
|
||||
"mysql",
|
||||
"keystone"
|
||||
|
@ -396,25 +397,29 @@ class TestDeployMakeTopology(base.TestCase):
|
|||
"nova-compute",
|
||||
"libvirtd"
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
def test_make_empty_topology(self):
|
||||
self.assertRaises(RuntimeError,
|
||||
deploy._make_topology, None, None, None)
|
||||
deploy._make_topology, _yaml.AttrDict(),
|
||||
_yaml.AttrDict(), _yaml.AttrDict())
|
||||
self.assertRaises(RuntimeError,
|
||||
deploy._make_topology, None, {"spam": "eggs"}, None)
|
||||
deploy._make_topology, _yaml.AttrDict(),
|
||||
_yaml.AttrDict({"spam": "eggs"}), _yaml.AttrDict())
|
||||
self.assertRaises(RuntimeError,
|
||||
deploy._make_topology, {"spam": "eggs"}, None, None)
|
||||
deploy._make_topology,
|
||||
_yaml.AttrDict({"spam": "eggs"}),
|
||||
_yaml.AttrDict(), _yaml.AttrDict())
|
||||
|
||||
def test_make_topology_without_replicas(self):
|
||||
nodes = {
|
||||
nodes = _yaml.AttrDict({
|
||||
"node1": {
|
||||
"roles": ["controller"]
|
||||
},
|
||||
"node[2-3]": {
|
||||
"roles": ["compute"]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
expected_topology = {
|
||||
"mysql": ["node1"],
|
||||
|
@ -423,33 +428,33 @@ class TestDeployMakeTopology(base.TestCase):
|
|||
"libvirtd": ["node2", "node3"]
|
||||
}
|
||||
|
||||
topology = deploy._make_topology(nodes, self._roles, None)
|
||||
topology = deploy._make_topology(nodes, self._roles, _yaml.AttrDict())
|
||||
self.assertDictEqual(expected_topology, topology)
|
||||
|
||||
def test_make_topology_without_replicas_unused_role(self):
|
||||
nodes = {
|
||||
nodes = _yaml.AttrDict({
|
||||
"node1": {
|
||||
"roles": ["controller"]
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
expected_topology = {
|
||||
"mysql": ["node1"],
|
||||
"keystone": ["node1"]
|
||||
}
|
||||
|
||||
topology = deploy._make_topology(nodes, self._roles, None)
|
||||
topology = deploy._make_topology(nodes, self._roles, _yaml.AttrDict())
|
||||
self.assertDictEqual(expected_topology, topology)
|
||||
|
||||
def test_make_topology_without_replicas_twice_used_role(self):
|
||||
nodes = {
|
||||
nodes = _yaml.AttrDict({
|
||||
"node1": {
|
||||
"roles": ["controller", "compute"]
|
||||
},
|
||||
"node[2-3]": {
|
||||
"roles": ["compute"]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
expected_topology = {
|
||||
"mysql": ["node1"],
|
||||
|
@ -457,18 +462,18 @@ class TestDeployMakeTopology(base.TestCase):
|
|||
"nova-compute": ["node1", "node2", "node3"],
|
||||
"libvirtd": ["node1", "node2", "node3"]
|
||||
}
|
||||
topology = deploy._make_topology(nodes, self._roles, None)
|
||||
topology = deploy._make_topology(nodes, self._roles, _yaml.AttrDict())
|
||||
self.assertDictEqual(expected_topology, topology)
|
||||
|
||||
def test_make_topology_without_replicas_twice_used_node(self):
|
||||
nodes = {
|
||||
nodes = _yaml.AttrDict({
|
||||
"node1": {
|
||||
"roles": ["controller"]
|
||||
},
|
||||
"node[1-3]": {
|
||||
"roles": ["compute"]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
expected_topology = {
|
||||
"mysql": ["node1"],
|
||||
|
@ -477,29 +482,29 @@ class TestDeployMakeTopology(base.TestCase):
|
|||
"libvirtd": ["node1", "node2", "node3"]
|
||||
}
|
||||
|
||||
topology = deploy._make_topology(nodes, self._roles, None)
|
||||
topology = deploy._make_topology(nodes, self._roles, _yaml.AttrDict())
|
||||
self.assertDictEqual(expected_topology, topology)
|
||||
|
||||
def test_make_topology_replicas_bigger_than_nodes(self):
|
||||
replicas = {
|
||||
replicas = _yaml.AttrDict({
|
||||
"keystone": 2
|
||||
}
|
||||
})
|
||||
|
||||
nodes = {
|
||||
nodes = _yaml.AttrDict({
|
||||
"node1": {
|
||||
"roles": ["controller"]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
self.assertRaises(RuntimeError,
|
||||
deploy._make_topology, nodes, self._roles, replicas)
|
||||
|
||||
def test_make_topology_unspecified_service_replicas(self):
|
||||
replicas = {
|
||||
replicas = _yaml.AttrDict({
|
||||
"foobar": 42
|
||||
}
|
||||
})
|
||||
|
||||
nodes = {}
|
||||
nodes = _yaml.AttrDict()
|
||||
|
||||
self.assertRaises(RuntimeError,
|
||||
deploy._make_topology, nodes, self._roles, replicas)
|
||||
|
|
Loading…
Reference in New Issue