Skip to content

Commit 43092f0

Browse files
jshimkus-rhmkanoor
andauthored
refactor: [AAP-20044] ContainerRequest defines data (#694)
Co-authored-by: Madhu Kanoor <mkanoor@redhat.com>
1 parent 631cde5 commit 43092f0

File tree

4 files changed

+89
-131
lines changed

4 files changed

+89
-131
lines changed

src/aap_eda/core/models/event_stream.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import typing as tp
16-
1715
from django.db import models
1816

1917
from aap_eda.core.enums import (
@@ -112,8 +110,6 @@ def __str__(self) -> str:
112110
return f"EventStream {self.name} ({self.id})"
113111

114112
# Implementation of the ContainerableMixin.
115-
def get_command_line_parameters(self) -> dict[str, tp.Any]:
116-
params = super().get_command_line_parameters()
117-
return params | {
118-
"skip_audit_events": True,
119-
}
113+
def _get_skip_audit_events(self) -> bool:
114+
"""Event stream skips audit events."""
115+
return True

src/aap_eda/services/activation/engine/common.py

Lines changed: 27 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -147,56 +147,22 @@ class ContainerableNoLatestInstanceError(ContainerableMixinError):
147147
# rulebook_rulesets str
148148
#
149149
class ContainerableMixin:
150-
def get_command_line_parameters(self) -> dict[str, tp.Any]:
151-
"""Return parameters for running ansible-rulebook."""
152-
self.validate()
153-
154-
access_token, refresh_token = create_jwt_token()
155-
return {
156-
"id": str(self.latest_instance.id),
157-
"ws_url": self._get_ws_url(),
158-
"log_level": self._get_log_level(),
159-
"ws_ssl_verify": settings.WEBSOCKET_SSL_VERIFY,
160-
"ws_token_url": self._get_ws_token_url(),
161-
"ws_access_token": access_token,
162-
"ws_refresh_token": refresh_token,
163-
"heartbeat": settings.RULEBOOK_LIVENESS_CHECK_SECONDS,
164-
"skip_audit_events": False,
165-
}
166-
167-
def get_container_parameters(self) -> dict[str, tp.Any]:
168-
"""Return parameters used to create a ContainerRquest."""
169-
self.validate()
170-
171-
return {
172-
"credential": self._get_image_credential(),
173-
"name": self._get_container_name(),
174-
"image_url": self.decision_environment.image_url,
175-
"ports": self._get_ports(),
176-
"env_vars": settings.PODMAN_ENV_VARS,
177-
"extra_args": settings.PODMAN_EXTRA_ARGS,
178-
"mem_limit": settings.PODMAN_MEM_LIMIT,
179-
"mounts": settings.PODMAN_MOUNTS,
180-
"process_parent_id": self.id,
181-
"rulebook_process_id": self.latest_instance.id,
182-
"cmdline": self._build_cmdline(),
183-
}
184-
185150
def get_container_request(self) -> ContainerRequest:
186151
"""Return ContainerRequest used for creation."""
187-
params = self.get_container_parameters()
152+
self.validate()
153+
188154
return ContainerRequest(
189-
credential=params["credential"],
190-
name=params["name"],
191-
image_url=params["image_url"],
192-
ports=params["ports"],
193-
process_parent_id=params["process_parent_id"],
194-
rulebook_process_id=params["rulebook_process_id"],
195-
env_vars=params["env_vars"],
196-
extra_args=params["extra_args"],
197-
mem_limit=params["mem_limit"],
198-
mounts=params["mounts"],
199-
cmdline=params["cmdline"],
155+
credential=self._get_image_credential(),
156+
name=self._get_container_name(),
157+
image_url=self.decision_environment.image_url,
158+
ports=self._get_ports(),
159+
process_parent_id=self.id,
160+
rulebook_process_id=self.latest_instance.id,
161+
env_vars=settings.PODMAN_ENV_VARS,
162+
extra_args=settings.PODMAN_EXTRA_ARGS,
163+
mem_limit=settings.PODMAN_MEM_LIMIT,
164+
mounts=settings.PODMAN_MOUNTS,
165+
cmdline=self._build_cmdline(),
200166
)
201167

202168
def get_restart_policy(self) -> str:
@@ -216,17 +182,17 @@ def validate(self):
216182
raise ContainerableInvalidError from e
217183

218184
def _build_cmdline(self) -> AnsibleRulebookCmdLine:
219-
params = self.get_command_line_parameters()
185+
access_token, refresh_token = create_jwt_token()
220186
return AnsibleRulebookCmdLine(
221-
ws_url=params["ws_url"],
222-
log_level=params["log_level"],
223-
ws_ssl_verify=params["ws_ssl_verify"],
224-
ws_access_token=params["ws_access_token"],
225-
ws_refresh_token=params["ws_refresh_token"],
226-
ws_token_url=params["ws_token_url"],
227-
heartbeat=params["heartbeat"],
228-
id=params["id"],
229-
skip_audit_events=params["skip_audit_events"],
187+
ws_url=self._get_ws_url(),
188+
log_level=self._get_log_level(),
189+
ws_ssl_verify=settings.WEBSOCKET_SSL_VERIFY,
190+
ws_access_token=access_token,
191+
ws_refresh_token=refresh_token,
192+
ws_token_url=self._get_ws_token_url(),
193+
heartbeat=settings.RULEBOOK_LIVENESS_CHECK_SECONDS,
194+
id=str(self.latest_instance.id),
195+
skip_audit_events=self._get_skip_audit_events(),
230196
)
231197

232198
def _get_log_level(self) -> tp.Optional[str]:
@@ -266,6 +232,10 @@ def _get_image_credential(self) -> tp.Optional[Credential]:
266232
def _get_ports(self) -> list[tuple]:
267233
return find_ports(self.rulebook_rulesets, self._get_context())
268234

235+
def _get_skip_audit_events(self) -> bool:
236+
"""Return not skipping audit events as default."""
237+
return False
238+
269239
def _get_ws_url(self) -> str:
270240
return f"{settings.WEBSOCKET_BASE_URL}{self._get_ws_url_subpath()}"
271241

tests/integration/services/activation/test_activation.py

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from aap_eda.core import models
1919
from aap_eda.services.activation.engine.common import (
20+
AnsibleRulebookCmdLine,
2021
ContainerableInvalidError,
2122
ContainerRequest,
2223
)
@@ -53,47 +54,42 @@ def activation(activation_no_instance) -> models.Activation:
5354

5455

5556
@pytest.mark.django_db
56-
def test_command_line_parameters(activation):
57-
params = activation.get_command_line_parameters()
58-
assert params["ws_url"] is not None
59-
assert params["log_level"] is None
60-
assert params["ws_ssl_verify"] is not None
61-
assert params["ws_token_url"] is not None
62-
assert params["ws_access_token"] is not None
63-
assert params["ws_refresh_token"] is not None
64-
assert params["heartbeat"] is not None
65-
assert not params["skip_audit_events"]
66-
assert params["id"] == str(activation.latest_instance.id)
67-
68-
69-
@pytest.mark.django_db
70-
def test_container_parameters(activation):
71-
params = activation.get_container_parameters()
72-
assert params["name"] is not None
73-
assert params["image_url"] is not None
74-
assert params["ports"] is not None
75-
assert params["env_vars"] is not None
76-
assert params["extra_args"] is not None
77-
assert params["mem_limit"] is not None
78-
assert params["mounts"] is not None
79-
assert params["process_parent_id"] == activation.id
80-
assert params["rulebook_process_id"] == activation.latest_instance.id
81-
82-
83-
@pytest.mark.django_db
84-
def test_container_parameters_no_credential(activation):
57+
def test_container_request_no_credential(activation):
8558
"""Test container params when no credential exists."""
86-
params = activation.get_container_parameters()
87-
assert params["credential"] is None
59+
request = activation.get_container_request()
60+
assert request.credential is None
8861

8962

9063
@pytest.mark.django_db
9164
def test_get_container_request(activation):
9265
"""Test the construction of a ContainerRequest."""
9366
request = activation.get_container_request()
67+
9468
assert isinstance(request, ContainerRequest)
95-
assert not request.cmdline.skip_audit_events
96-
assert "--skip-audit-events" not in request.cmdline.get_args()
69+
assert request.name is not None
70+
assert request.image_url is not None
71+
assert request.ports is not None
72+
assert request.env_vars is not None
73+
assert request.extra_args is not None
74+
assert request.mem_limit is not None
75+
assert request.mounts is not None
76+
assert request.process_parent_id == activation.id
77+
assert request.rulebook_process_id == activation.latest_instance.id
78+
79+
cmdline = request.cmdline
80+
assert (cmdline is not None) and isinstance(
81+
cmdline, AnsibleRulebookCmdLine
82+
)
83+
assert cmdline.id == str(activation.latest_instance.id)
84+
assert cmdline.ws_url is not None
85+
assert cmdline.log_level is None
86+
assert cmdline.ws_ssl_verify is not None
87+
assert cmdline.ws_token_url is not None
88+
assert cmdline.ws_access_token is not None
89+
assert cmdline.ws_refresh_token is not None
90+
assert cmdline.heartbeat is not None
91+
assert not cmdline.skip_audit_events
92+
assert "--skip-audit-events" not in cmdline.get_args()
9793

9894

9995
@pytest.mark.django_db

tests/integration/services/activation/test_event_stream.py

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from aap_eda.core import models
1919
from aap_eda.services.activation.engine.common import (
20+
AnsibleRulebookCmdLine,
2021
ContainerableInvalidError,
2122
ContainerRequest,
2223
)
@@ -43,7 +44,7 @@ def event_stream_no_instance(
4344

4445
@pytest.fixture
4546
def event_stream(event_stream_no_instance) -> models.EventStream:
46-
"""Return an activation with associated RulebookProcess."""
47+
"""Return an event stream with associated RulebookProcess."""
4748
models.RulebookProcess.objects.create(
4849
name="event-stream-instance-1",
4950
event_stream=event_stream_no_instance,
@@ -53,47 +54,42 @@ def event_stream(event_stream_no_instance) -> models.EventStream:
5354

5455

5556
@pytest.mark.django_db
56-
def test_command_line_parameters(event_stream):
57-
params = event_stream.get_command_line_parameters()
58-
assert params["ws_url"] is not None
59-
assert params["log_level"] is None
60-
assert params["ws_ssl_verify"] is not None
61-
assert params["ws_token_url"] is not None
62-
assert params["ws_access_token"] is not None
63-
assert params["ws_refresh_token"] is not None
64-
assert params["heartbeat"] is not None
65-
assert params["skip_audit_events"]
66-
assert params["id"] == str(event_stream.latest_instance.id)
67-
68-
69-
@pytest.mark.django_db
70-
def test_container_parameters(event_stream):
71-
params = event_stream.get_container_parameters()
72-
assert params["name"] is not None
73-
assert params["image_url"] is not None
74-
assert params["ports"] is not None
75-
assert params["env_vars"] is not None
76-
assert params["extra_args"] is not None
77-
assert params["mem_limit"] is not None
78-
assert params["mounts"] is not None
79-
assert params["process_parent_id"] == event_stream.id
80-
assert params["rulebook_process_id"] == event_stream.latest_instance.id
81-
82-
83-
@pytest.mark.django_db
84-
def test_container_parameters_no_credential(event_stream):
57+
def test_container_request_no_credential(event_stream):
8558
"""Test container params when no credential exists."""
86-
params = event_stream.get_container_parameters()
87-
assert params["credential"] is None
59+
request = event_stream.get_container_request()
60+
assert request.credential is None
8861

8962

9063
@pytest.mark.django_db
9164
def test_get_container_request(event_stream):
9265
"""Test the construction of a ContainerRequest."""
9366
request = event_stream.get_container_request()
67+
9468
assert isinstance(request, ContainerRequest)
95-
assert request.cmdline.skip_audit_events
96-
assert "--skip-audit-events" in request.cmdline.get_args()
69+
assert request.name is not None
70+
assert request.image_url is not None
71+
assert request.ports is not None
72+
assert request.env_vars is not None
73+
assert request.extra_args is not None
74+
assert request.mem_limit is not None
75+
assert request.mounts is not None
76+
assert request.process_parent_id == event_stream.id
77+
assert request.rulebook_process_id == event_stream.latest_instance.id
78+
79+
cmdline = request.cmdline
80+
assert (cmdline is not None) and isinstance(
81+
cmdline, AnsibleRulebookCmdLine
82+
)
83+
assert cmdline.id == str(event_stream.latest_instance.id)
84+
assert cmdline.ws_url is not None
85+
assert cmdline.log_level is None
86+
assert cmdline.ws_ssl_verify is not None
87+
assert cmdline.ws_token_url is not None
88+
assert cmdline.ws_access_token is not None
89+
assert cmdline.ws_refresh_token is not None
90+
assert cmdline.heartbeat is not None
91+
assert cmdline.skip_audit_events
92+
assert "--skip-audit-events" in cmdline.get_args()
9793

9894

9995
@pytest.mark.django_db

0 commit comments

Comments
 (0)