Skip to content

Commit 6bb3f24

Browse files
ShimShteinehelms
authored andcommitted
Add foreman-rake wrapper
1 parent 4d2d756 commit 6bb3f24

4 files changed

Lines changed: 91 additions & 1 deletion

File tree

src/roles/foreman/defaults/main.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
foreman_container_image: "quay.io/foreman/foreman"
33
foreman_container_tag: "nightly"
4+
foreman_container_name: foreman
45

56
foreman_database_name: foreman
67
foreman_database_user: foreman

src/roles/foreman/tasks/main.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109

110110
- name: Deploy Foreman Container
111111
containers.podman.podman_container:
112-
name: "foreman"
112+
name: "{{ foreman_container_name }}"
113113
image: foreman.image
114114
state: quadlet
115115
sdnotify: true
@@ -150,6 +150,14 @@
150150
After=foreman-db-migrate.service
151151
notify: Restart foreman
152152

153+
- name: Install foreman-rake wrapper
154+
ansible.builtin.template:
155+
src: foreman-rake.j2
156+
dest: /usr/sbin/foreman-rake
157+
owner: root
158+
group: root
159+
mode: '0755'
160+
153161
- name: Deploy Dynflow Container
154162
containers.podman.podman_container:
155163
name: "dynflow-sidekiq-%i"
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/bash
2+
3+
validate_actions() {
4+
# This list is generated by running:
5+
# rg '# foreman-rake' | awk '{ print $3 }' | sort -u
6+
# against the foreman documentation repository (https://github.com/theforeman/foreman-documentation).
7+
# The intention is to have a list of tasks that were mentioned explicitly in the documentation.
8+
local allowed_actions=(
9+
"audits:anonymize"
10+
"audits:expire"
11+
"audits:list_attributes"
12+
"console"
13+
"facts:clean"
14+
"foreman_openscap:bulk_upload:default"
15+
"foreman_tasks:cleanup"
16+
"interfaces:clean"
17+
"katello:delete_orphaned_content"
18+
"katello:migrate_deb_content_attributes_to_pulp3"
19+
"katello:upgrade_check"
20+
"ldap:refresh_usergroups"
21+
"orchestration:dhcp:add_missing"
22+
"orchestration:dhcp:remove_offending"
23+
"permissions:reset"
24+
"reports:daily"
25+
"reports:expire"
26+
"reports:monthly"
27+
"reports:weekly"
28+
"telemetry:metrics"
29+
"templates:cleanup"
30+
)
31+
32+
local joined_pattern
33+
joined_pattern=$(IFS="|"; echo "${allowed_actions[*]}")
34+
35+
local pattern="(^|[[:space:]])($joined_pattern)([[:space:]]|$)"
36+
37+
if [[ ! "$*" =~ $pattern ]]; then
38+
if [ "${ALLOW_UNSUPPORTED}" != "true" ]; then
39+
echo "ERROR: Unsupported action detected." >&2
40+
exit 1
41+
else
42+
echo "WARNING: Unsupported action detected. Please use with caution." >&2
43+
fi
44+
fi
45+
}
46+
47+
if [ "$(id -u)" -ne 0 ]; then
48+
echo "This script must be run as root" >&2
49+
exit 1
50+
fi
51+
52+
validate_actions "$@"
53+
54+
# Use an array to avoid shell expansion issues
55+
TTY_ARGS=()
56+
if [ -t 0 ]; then
57+
TTY_ARGS=(-it)
58+
fi
59+
60+
exec podman exec "${TTY_ARGS[@]}" {{ foreman_container_name }} foreman-rake "$@"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
def test_foreman_rake_wrapper_exists(server):
2+
wrapper = server.file('/usr/sbin/foreman-rake')
3+
assert wrapper.exists
4+
assert wrapper.mode == 0o755
5+
6+
7+
def test_foreman_rake_list_tasks(server):
8+
result = server.run('ALLOW_UNSUPPORTED=true foreman-rake -T')
9+
assert result.succeeded
10+
assert 'WARNING: Unsupported action detected' in result.stderr
11+
assert 'rake cron:daily' in result.stdout
12+
13+
14+
def test_foreman_rake_rejects_unsupported_action(server):
15+
result = server.run_expect([1], 'foreman-rake unsupported:task')
16+
assert 'ERROR: Unsupported action detected' in result.stderr
17+
18+
19+
def test_foreman_rake_supported_action(server):
20+
result = server.run('foreman-rake facts:clean')
21+
assert result.succeeded

0 commit comments

Comments
 (0)