Skip to content

Commit

Permalink
Merge pull request #63 from tzumainn/openshift-cluster-uuid
Browse files Browse the repository at this point in the history
Updated openshift orchestration to cluster paradigm
  • Loading branch information
tzumainn authored Feb 1, 2024
2 parents b47284f + d06db2d commit 8b19eb9
Show file tree
Hide file tree
Showing 6 changed files with 369 additions and 255 deletions.
97 changes: 38 additions & 59 deletions esiclient/tests/unit/v1/cluster/test_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from esiclient.tests.unit import base
from esiclient.tests.unit import utils
from esiclient.v1.cluster import cluster
from esiclient.v1.cluster import utils as cluster_utils


class TestList(base.TestCommand):
Expand Down Expand Up @@ -167,6 +168,9 @@ def mock_find_network(name):
self.app.client_manager.network.find_port.return_value = self.port1
self.app.client_manager.image.find_image.return_value = self.image

@mock.patch(
'esiclient.v1.cluster.utils.set_node_cluster_info',
autospec=True)
@mock.patch(
'esiclient.utils.get_floating_ip',
autospec=True)
Expand All @@ -192,7 +196,7 @@ def mock_find_network(name):
@mock.patch('json.load', autospec=True)
def test_take_action(self, mock_load, mock_uuid, mock_ct, mock_gocp,
mock_pnwi, mock_bnfu, mock_goapfi, mock_gfnifp,
mock_gfi):
mock_gfi, mock_snci):
mock_load.return_value = {
"node_configs": [
{
Expand Down Expand Up @@ -276,21 +280,23 @@ def test_take_action(self, mock_load, mock_uuid, mock_ct, mock_gocp,
)
assert mock_gfnifp.call_count == 3
assert mock_gfi.call_count == 3
self.app.client_manager.baremetal.node.update.assert_has_calls([
call('node_uuid_1', [{'path': '/extra/esi_cluster_uuid',
'value': 'cluster-uuid', 'op': 'add'},
{'path': '/extra/esi_port_uuid',
'value': 'port_uuid_1', 'op': 'add'},
{'path': '/extra/esi_fip_uuid',
'value': 'fip_uuid_1', 'op': 'add'}]),
call('node_uuid_2', [{'path': '/extra/esi_cluster_uuid',
'value': 'cluster-uuid', 'op': 'add'},
{'path': '/extra/esi_port_uuid', 'value':
'port_uuid_2', 'op': 'add'}]),
call('node_uuid_3', [{'path': '/extra/esi_cluster_uuid',
'value': 'cluster-uuid', 'op': 'add'},
{'path': '/extra/esi_port_uuid',
'value': 'port_uuid_3', 'op': 'add'}])
mock_snci.assert_has_calls([
call(self.app.client_manager.baremetal, 'node_uuid_1',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-uuid',
cluster_utils.ESI_PORT_UUID: 'port_uuid_1',
cluster_utils.ESI_FIP_UUID: 'fip_uuid_1'
}),
call(self.app.client_manager.baremetal, 'node_uuid_2',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-uuid',
cluster_utils.ESI_PORT_UUID: 'port_uuid_2',
}),
call(self.app.client_manager.baremetal, 'node_uuid_3',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-uuid',
cluster_utils.ESI_PORT_UUID: 'port_uuid_3',
}),
])

@mock.patch('json.load', autospec=True)
Expand Down Expand Up @@ -335,7 +341,7 @@ def test_take_action_insufficient_nodes(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"Cannot find 3 free baremetal nodes",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -387,7 +393,7 @@ def test_take_action_unavailable_node(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"node5 is not an available node",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -439,7 +445,7 @@ def test_take_action_no_network(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"Must specify a network",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -491,7 +497,7 @@ def test_take_action_invalid_provisioning_type(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
cluster.ESIOrchestrationException,
cluster_utils.ESIOrchestrationException,
"Unknown provisioning method",
self.cmd.take_action,
parsed_args)
Expand Down Expand Up @@ -547,20 +553,14 @@ def setUp(self):
"name": "node5",
"extra": {}
})
self.trunk = utils.create_mock_object({
"id": "trunk_uuid_1",
"name": "trunk",
})

self.app.client_manager.baremetal.node.list.return_value = [
self.node1, self.node2, self.node3, self.node4]
self.app.client_manager.network.find_trunk.return_value = \
self.trunk

@mock.patch(
'esiclient.utils.delete_trunk',
'esiclient.v1.cluster.utils.clean_cluster_node',
autospec=True)
def test_take_action(self, mock_dt):
def test_take_action(self, mock_ccn):
arglist = ['cluster-uuid-1']
verifylist = []

Expand All @@ -571,35 +571,14 @@ def test_take_action(self, mock_dt):
self.app.client_manager.baremetal.node.list.assert_called_once_with(
fields=["uuid", "name", "extra"],
)
self.app.client_manager.baremetal.node.set_provision_state.\
assert_has_calls([
call('node_uuid_1', 'deleted'),
call('node_uuid_2', 'deleted'),
call('node_uuid_3', 'deleted')
])
self.app.client_manager.network.find_trunk.\
assert_called_once_with('trunk-uuid-1')
mock_dt.assert_called_once_with(
self.app.client_manager.network, self.trunk)
self.app.client_manager.network.delete_port.assert_has_calls([
call('port-uuid-2'),
call('port-uuid-3')
])
self.app.client_manager.network.delete_ip.assert_called_once_with(
'fip-uuid-1'
)
self.app.client_manager.baremetal.node.update.assert_has_calls([
call('node_uuid_1', [
{'path': '/extra/esi_cluster_uuid', 'op': 'remove'},
{'path': '/extra/esi_trunk_uuid', 'op': 'remove'},
{'path': '/extra/esi_fip_uuid', 'op': 'remove'}
]),
call('node_uuid_2', [
{'path': '/extra/esi_cluster_uuid', 'op': 'remove'},
{'path': '/extra/esi_port_uuid', 'op': 'remove'}
]),
call('node_uuid_3', [
{'path': '/extra/esi_cluster_uuid', 'op': 'remove'},
{'path': '/extra/esi_port_uuid', 'op': 'remove'}
])
mock_ccn.assert_has_calls([
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node1),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node2),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node3),
])
145 changes: 76 additions & 69 deletions esiclient/tests/unit/v1/cluster/test_openshift.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from esiclient.tests.unit import base
from esiclient.tests.unit import utils
from esiclient.v1.cluster import openshift
from esiclient.v1.cluster import utils as cluster_utils


class MockResponse:
Expand Down Expand Up @@ -305,6 +306,9 @@ def mock_find_port(uuid):
"floating_ip_address": "4.4.4.4"
})

@mock.patch(
'esiclient.v1.cluster.utils.set_node_cluster_info',
autospec=True)
@mock.patch(
'esiclient.utils.get_or_assign_port_floating_ip',
autospec=True)
Expand All @@ -330,7 +334,7 @@ def mock_find_port(uuid):
"API_TOKEN": "api-token"})
def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
mock_wfn, mock_bnfu, mock_gocp, mock_gocpbi,
mock_goapfi):
mock_goapfi, mock_snci):
mock_load.return_value = {
"cluster_name": "test_cluster",
"api_vip": "1.1.1.1",
Expand Down Expand Up @@ -398,8 +402,6 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
'openshift_version': '1',
'high_availability_mode': 'Full',
'base_dns_domain': "foo.bar",
'api_vip': '1.1.1.1',
'ingress_vip': '2.2.2.2',
'ssh_public_key': "ssh-public-key",
'pull_secret': 'pull_secret_value'
}),
Expand All @@ -422,7 +424,17 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
call("clusters/%s/" % self.cluster_id, 'get', headers),
# set machine network cidr
call("clusters/%s" % self.cluster_id, 'patch', headers,
{'machine_network_cidr': self.private_subnet.cidr}),
{
'machine_network_cidr': self.private_subnet.cidr,
'api_vips': [{
'cluster_id': self.cluster_id,
'ip': '1.1.1.1'
}],
'ingress_vips': [{
'cluster_id': self.cluster_id,
'ip': '2.2.2.2'
}]
}),
# start installing
call("clusters/%s/actions/install" % self.cluster_id, 'post',
headers),
Expand Down Expand Up @@ -470,6 +482,23 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep, mock_caia,
self.app.client_manager.network),
])
self.assertEqual(expected, results)
mock_snci.assert_has_calls([
call(self.app.client_manager.baremetal, 'node1',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-id',
cluster_utils.ESI_PORT_UUID: 'private_port_uuid_1',
}),
call(self.app.client_manager.baremetal, 'node2',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-id',
cluster_utils.ESI_PORT_UUID: 'private_port_uuid_2',
}),
call(self.app.client_manager.baremetal, 'node3',
{
cluster_utils.ESI_CLUSTER_UUID: 'cluster-id',
cluster_utils.ESI_PORT_UUID: 'private_port_uuid_3',
}),
])

@mock.patch('json.load', autospec=True)
@mock.patch.dict(os.environ, {"PULL_SECRET": "pull_secret_file",
Expand All @@ -495,7 +524,7 @@ def test_take_action_missing_fields(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
openshift.OrchestrationException,
cluster_utils.ESIOrchestrationException,
'Please specify these missing values',
self.cmd.take_action, parsed_args)

Expand Down Expand Up @@ -523,7 +552,7 @@ def test_take_action_missing_pull_secret(self, mock_load):

with patch("builtins.open"):
self.assertRaisesRegex(
openshift.OrchestrationException,
cluster_utils.ESIOrchestrationException,
'Please export PULL_SECRET',
self.cmd.take_action, parsed_args)

Expand All @@ -534,48 +563,6 @@ def setUp(self):
super(TestUndeploy, self).setUp()
self.cmd = openshift.Undeploy(self.app, None)

self.provisioning_port1 = utils.create_mock_object({
"id": "provisioning_port_uuid_1",
"network_id": "network_uuid_2",
})
self.provisioning_port2 = utils.create_mock_object({
"id": "provisioning_port_uuid_2",
"network_id": "network_uuid_2",
})
self.provisioning_port3 = utils.create_mock_object({
"id": "provisioning_port_uuid_3",
"network_id": "network_uuid_2",
})
self.private_port1 = utils.create_mock_object({
"id": "private_port_uuid_1",
"network_id": "network_uuid_1",
})
self.private_port2 = utils.create_mock_object({
"id": "private_port_uuid_2",
"network_id": "network_uuid_1",
})
self.private_port3 = utils.create_mock_object({
"id": "private_port_uuid_3",
"network_id": "network_uuid_1",
})

def mock_find_port(uuid):
if uuid == "esi-node1-provisioning_network":
return self.provisioning_port1
if uuid == "esi-node2-provisioning_network":
return self.provisioning_port2
if uuid == "esi-node3-provisioning_network":
return self.provisioning_port3
if uuid == "esi-node1-private_network":
return self.private_port1
if uuid == "esi-node2-private_network":
return self.private_port2
if uuid == "esi-node3-private_network":
return self.private_port3
return None
self.app.client_manager.network.find_port.\
side_effect = mock_find_port

self.api_port = utils.create_mock_object({
"id": "api_port_uuid_1",
"network_id": "network_uuid_1",
Expand Down Expand Up @@ -616,15 +603,38 @@ def mock_ips(fixed_ip_address=None):
self.app.client_manager.network.delete_ip.\
return_value = None

self.app.client_manager.baremetal.node.set_provision_state.\
return_value = None
self.node1 = utils.create_mock_object({
"uuid": "node_uuid_1",
"name": "node1",
})
self.node2 = utils.create_mock_object({
"uuid": "node_uuid_2",
"name": "node2",
})
self.node3 = utils.create_mock_object({
"uuid": "node_uuid_3",
"name": "node3",
})

@mock.patch('time.sleep', autospec=True)
def mock_get_node(name):
if name == "node1":
return self.node1
if name == "node2":
return self.node2
if name == "node3":
return self.node3
return None
self.app.client_manager.baremetal.node.get.\
side_effect = mock_get_node

@mock.patch(
'esiclient.v1.cluster.utils.clean_cluster_node',
autospec=True)
@mock.patch('json.loads', autospec=True)
@mock.patch('json.load', autospec=True)
@mock.patch.dict(os.environ, {"PULL_SECRET": "pull_secret_file",
"API_TOKEN": "api-token"})
def test_take_action(self, mock_load, mock_loads, mock_sleep):
def test_take_action(self, mock_load, mock_loads, mock_ccn):
mock_load.return_value = {
"cluster_name": "test_cluster",
"api_vip": "1.1.1.1",
Expand Down Expand Up @@ -663,24 +673,21 @@ def test_take_action(self, mock_load, mock_loads, mock_sleep):
self.app.client_manager.network.delete_port.assert_has_calls([
call('api_port_uuid_1'),
call('apps_port_uuid_1'),
call('provisioning_port_uuid_1'),
call('private_port_uuid_1'),
call('provisioning_port_uuid_2'),
call('private_port_uuid_2'),
call('provisioning_port_uuid_3'),
call('private_port_uuid_3')
])
self.app.client_manager.baremetal.node.set_provision_state.\
self.app.client_manager.baremetal.node.get.\
assert_has_calls([
call('node1', 'deleted'),
call('node2', 'deleted'),
call('node3', 'deleted')
call('node1'),
call('node2'),
call('node3')
])
self.app.client_manager.network.find_port.assert_has_calls([
call('esi-node1-provisioning_network'),
call('esi-node1-private_network'),
call('esi-node2-provisioning_network'),
call('esi-node2-private_network'),
call('esi-node3-provisioning_network'),
call('esi-node3-private_network')
mock_ccn.assert_has_calls([
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node1),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node2),
call(self.app.client_manager.baremetal,
self.app.client_manager.network,
self.node3),
])
Loading

0 comments on commit 8b19eb9

Please sign in to comment.