Skip to content

Commit 94d02bb

Browse files
committed
Refactor compute service actions
Remove checks for services ialready in desired state so actions don't fail, service disable will update reason Point action at functions in openstack_api to simplify code Update unit tests
1 parent 533b107 commit 94d02bb

File tree

6 files changed

+33
-175
lines changed

6 files changed

+33
-175
lines changed

actions/hv.compute.service.disable.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ parameters:
77
timeout:
88
default: 5400
99
lib_entry_point:
10-
default: workflows.hv_service_actions.hv_service_disable
10+
default: openstack_api.openstack_service.disable_service
1111
immutable: true
1212
type: string
1313
requires_openstack:

actions/hv.compute.service.enable.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ parameters:
77
timeout:
88
default: 5400
99
lib_entry_point:
10-
default: workflows.hv_service_actions.hv_service_enable
10+
default: openstack_api.openstack_service.enable_service
1111
immutable: true
1212
type: string
1313
requires_openstack:

lib/openstack_api/openstack_service.py

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
def disable_service(
77
conn: Connection,
8-
service: Service,
98
hypervisor_name: str,
109
service_binary: str,
1110
disabled_reason: str,
@@ -19,22 +18,18 @@ def disable_service(
1918
:param disabled_reason: The reason for disabling the service.
2019
:return: Returns the Service object.
2120
"""
22-
23-
if service.status == "enabled":
24-
return conn.compute.disable_service(
25-
service,
26-
host=hypervisor_name,
27-
binary=service_binary,
28-
disabled_reason=disabled_reason,
29-
)
30-
raise RuntimeError(
31-
f"Failed to disable {service_binary} on {hypervisor_name}. Already disabled."
21+
service = conn.compute.find_service(
22+
service_binary, ignore_missing=False, host=hypervisor_name
23+
)
24+
# Needs to be service.id since just passing service won't update the service correctly
25+
return conn.compute.disable_service(
26+
service=service.id,
27+
disabled_reason=disabled_reason,
3228
)
3329

3430

3531
def enable_service(
3632
conn: Connection,
37-
service: Service,
3833
hypervisor_name: str,
3934
service_binary: str,
4035
) -> Optional[Service]:
@@ -46,11 +41,7 @@ def enable_service(
4641
:param service_binary: The name of the service.
4742
:return: Returns the Service object.
4843
"""
49-
50-
if service.status == "disabled":
51-
return conn.compute.enable_service(
52-
service, host=hypervisor_name, binary=service_binary
53-
)
54-
raise RuntimeError(
55-
f"Failed to enable {service_binary} on {hypervisor_name}. Already enabled."
44+
service = conn.compute.find_service(
45+
service_binary, ignore_missing=False, host=hypervisor_name
5646
)
47+
return conn.compute.enable_service(service=service.id)

lib/workflows/hv_service_actions.py

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 21 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,51 @@
11
from unittest.mock import MagicMock, NonCallableMagicMock
2-
import pytest
3-
from openstack_api.openstack_service import disable_service, enable_service
2+
from lib.openstack_api.openstack_service import enable_service, disable_service
43

54

6-
def test_disable_service_function_disables_service_when_enabled():
7-
"""tests that openstack disables the service when it is currently enabled"""
5+
def test_service_disabled_successfully():
6+
"""test that hv_service_disable disables an openstack service"""
87

98
mock_conn = MagicMock()
10-
mock_service = MagicMock()
119
mock_hypervisor_name = NonCallableMagicMock()
1210
mock_service_binary = NonCallableMagicMock()
13-
mock_disable_reason = NonCallableMagicMock()
11+
mock_disabled_reason = NonCallableMagicMock()
1412

15-
mock_service.status = "enabled"
13+
mock_service = MagicMock()
14+
mock_conn.compute.find_service.return_value = mock_service
1615

17-
res = disable_service(
16+
disable_service(
1817
mock_conn,
19-
mock_service,
2018
mock_hypervisor_name,
2119
mock_service_binary,
22-
mock_disable_reason,
20+
mock_disabled_reason,
2321
)
2422

25-
mock_conn.compute.disable_service.assert_called_once_with(
26-
mock_service,
27-
host=mock_hypervisor_name,
28-
binary=mock_service_binary,
29-
disabled_reason=mock_disable_reason,
23+
mock_conn.compute.find_service.assert_called_once_with(
24+
mock_service_binary, ignore_missing=False, host=mock_hypervisor_name
3025
)
3126

32-
assert res == mock_conn.compute.disable_service.return_value
27+
mock_conn.compute.disable_service.assert_called_once_with(
28+
service=mock_service.id,
29+
disabled_reason=mock_disabled_reason,
30+
)
3331

3432

35-
def test_disable_service_function_returns_none_when_disabled():
36-
"""tests that openstack returns None when the service is currently disabled"""
33+
def test_hv_service_enabled_successfully():
34+
"""test that hv_service_enable enables an openstack service"""
3735

3836
mock_conn = MagicMock()
39-
mock_service = MagicMock()
4037
mock_hypervisor_name = NonCallableMagicMock()
4138
mock_service_binary = NonCallableMagicMock()
42-
mock_disable_reason = NonCallableMagicMock()
4339

44-
mock_service.status = "disabled"
45-
46-
with pytest.raises(RuntimeError):
47-
disable_service(
48-
mock_conn,
49-
mock_service,
50-
mock_hypervisor_name,
51-
mock_service_binary,
52-
mock_disable_reason,
53-
)
54-
55-
56-
def test_enable_service_function_enables_service_when_disabled():
57-
"""tests that openstack enables the service when it is currently disabled"""
58-
59-
mock_conn = MagicMock()
6040
mock_service = MagicMock()
61-
mock_hypervisor_name = NonCallableMagicMock()
62-
mock_service_binary = NonCallableMagicMock()
41+
mock_conn.compute.find_service.return_value = mock_service
6342

64-
mock_service.status = "disabled"
43+
enable_service(mock_conn, mock_hypervisor_name, mock_service_binary)
6544

66-
res = enable_service(
67-
mock_conn, mock_service, mock_hypervisor_name, mock_service_binary
45+
mock_conn.compute.find_service.assert_called_once_with(
46+
mock_service_binary, ignore_missing=False, host=mock_hypervisor_name
6847
)
6948

7049
mock_conn.compute.enable_service.assert_called_once_with(
71-
mock_service,
72-
host=mock_hypervisor_name,
73-
binary=mock_service_binary,
50+
service=mock_service.id,
7451
)
75-
76-
assert res == mock_conn.compute.enable_service.return_value
77-
78-
79-
def test_enable_service_function_returns_none_when_enabled():
80-
"""tests that openstack returns none when the service is currently enabled"""
81-
82-
mock_conn = MagicMock()
83-
mock_service = MagicMock()
84-
mock_hypervisor_name = NonCallableMagicMock()
85-
mock_service_binary = NonCallableMagicMock()
86-
87-
mock_service.status = "enabled"
88-
89-
with pytest.raises(RuntimeError):
90-
enable_service(
91-
mock_conn, mock_service, mock_hypervisor_name, mock_service_binary
92-
)

tests/lib/workflows/test_hv_service_actions.py

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)