Skip to content

Commit dfaf253

Browse files
committed
Only pass hostname to Aq Make
Aq Manage or Aq create host should be used to manipulate the personality / arch / domain. This step should only make a VM, not introduce side-effects.
1 parent 8acc703 commit dfaf253

File tree

4 files changed

+11
-51
lines changed

4 files changed

+11
-51
lines changed

OpenStack-Rabbit-Consumer/rabbit_consumer/aq_api.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
from rabbit_consumer.rabbit_message import RabbitMessage
1414
from rabbit_consumer.vm_data import VmData
1515

16-
MAKE_SUFFIX = "/host/{0}/command/make"
17-
1816
HOST_CHECK_SUFFIX = "/host/{0}"
1917

2018
UPDATE_INTERFACE_SUFFIX = "/machine/{0}/interface/{1}?boot&default_route"
@@ -84,21 +82,11 @@ def setup_requests(
8482
return response.text
8583

8684

87-
def aq_make(addresses: List[OpenstackAddress], image_meta: AqMetadata) -> None:
85+
def aq_make(addresses: List[OpenstackAddress]) -> None:
8886
"""
89-
Runs AQ make against a list of addresses passed to build the default personality
87+
Runs AQ make against a list of addresses passed to refresh
88+
the given host
9089
"""
91-
params = {
92-
"personality": image_meta.aq_personality,
93-
"osversion": image_meta.aq_os_version,
94-
"osname": image_meta.aq_os,
95-
"archetype": image_meta.aq_archetype,
96-
}
97-
98-
assert all(
99-
i for i in params.values()
100-
), "Some fields were not set in the OS description"
101-
10290
# Manage and make these back to default domain and personality
10391
address = addresses[0]
10492
hostname = address.hostname
@@ -107,8 +95,8 @@ def aq_make(addresses: List[OpenstackAddress], image_meta: AqMetadata) -> None:
10795
if not hostname or not hostname.strip():
10896
raise ValueError("Hostname cannot be empty")
10997

110-
url = ConsumerConfig().aq_url + MAKE_SUFFIX.format(hostname)
111-
setup_requests(url, "post", "Make Template: ", params)
98+
url = ConsumerConfig().aq_url + f"/host/{hostname}/command/make"
99+
setup_requests(url, "post", "Make Template")
112100

113101

114102
def aq_manage(addresses: List[OpenstackAddress], image_meta: AqMetadata) -> None:

OpenStack-Rabbit-Consumer/rabbit_consumer/message_consumer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def handle_create_machine(rabbit_message: RabbitMessage) -> None:
160160

161161
# Manage host in Aquilon
162162
aq_api.create_host(image_meta, network_details, machine_name)
163-
aq_api.aq_make(network_details, image_meta)
163+
aq_api.aq_make(network_details)
164164

165165
add_aq_details_to_metadata(vm_data, network_details)
166166

OpenStack-Rabbit-Consumer/test/test_aq_api.py

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -130,45 +130,17 @@ def test_setup_requests_rest_methods(_, kerb_auth, requests, rest_verb):
130130

131131
@patch("rabbit_consumer.aq_api.setup_requests")
132132
@patch("rabbit_consumer.aq_api.ConsumerConfig")
133-
def test_aq_make_calls(config, setup, openstack_address_list, image_metadata):
133+
def test_aq_make_calls(config, setup, openstack_address_list):
134134
"""
135135
Test that aq_make calls the correct URLs with the correct parameters
136136
"""
137137
domain = "domain"
138138
config.return_value.aq_url = domain
139139

140-
aq_make(openstack_address_list, image_metadata)
141-
142-
expected_params = {
143-
"personality": image_metadata.aq_personality,
144-
"osversion": image_metadata.aq_os_version,
145-
"osname": image_metadata.aq_os,
146-
"archetype": image_metadata.aq_archetype,
147-
}
140+
aq_make(openstack_address_list)
148141

149142
expected_url = f"{domain}/host/{openstack_address_list[0].hostname}/command/make"
150-
setup.assert_called_once_with(expected_url, "post", mock.ANY, expected_params)
151-
152-
153-
@pytest.mark.parametrize(
154-
"field_to_blank",
155-
[
156-
"aq_personality",
157-
"aq_os_version",
158-
"aq_os",
159-
],
160-
)
161-
def test_aq_make_missing_fields(field_to_blank, openstack_address_list, image_metadata):
162-
"""
163-
Test that aq_make throws an exception when a required field is missing
164-
"""
165-
with pytest.raises(AssertionError):
166-
setattr(image_metadata, field_to_blank, None)
167-
aq_make(openstack_address_list, image_metadata)
168-
169-
with pytest.raises(AssertionError):
170-
setattr(image_metadata, field_to_blank, "")
171-
aq_make(openstack_address_list, image_metadata)
143+
setup.assert_called_once_with(expected_url, "post", mock.ANY)
172144

173145

174146
@pytest.mark.parametrize("hostname", [" ", "", None])
@@ -185,7 +157,7 @@ def test_aq_make_none_hostname(config, setup, openstack_address, hostname):
185157
address.hostname = hostname
186158

187159
with pytest.raises(ValueError):
188-
aq_make([address], NonCallableMock())
160+
aq_make([address])
189161

190162
setup.assert_not_called()
191163

OpenStack-Rabbit-Consumer/test/test_message_consumer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ def test_consume_create_machine_hostnames_good_path(
248248
aq_api.create_host.assert_called_once_with(
249249
image_metadata, network_details, machine_name
250250
)
251-
aq_api.aq_make.assert_called_once_with(network_details, image_metadata)
251+
aq_api.aq_make.assert_called_once_with(network_details)
252252

253253
# Metadata
254254
metadata.assert_called_once_with(vm_data, network_details)

0 commit comments

Comments
 (0)