Skip to content

Commit 2d0f028

Browse files
authored
Deploy hammer and smart proxy for development (#373)
1 parent c42d719 commit 2d0f028

File tree

15 files changed

+601
-0
lines changed

15 files changed

+601
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
variables:
3+
features:
4+
parameter: --add-feature
5+
help: Additional features to enable in this deployment.
6+
action: append_unique

development/playbooks/deploy-dev/metadata.obsah.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,6 @@ variables:
2929
foreman_development_github_username:
3030
help: GitHub username to add as additional remote for git checkouts
3131
action: store
32+
33+
include:
34+
- _flavor_features

development/roles/foreman_development/defaults/main.yaml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ foreman_development_group: "{{ foreman_development_user }}"
44
foreman_development_deployment_dir: "/home/{{ foreman_development_user }}"
55
foreman_development_foreman_dir: "{{ foreman_development_deployment_dir }}/foreman"
66
foreman_development_cert_dir: "{{ foreman_development_deployment_dir }}/foreman-certs"
7+
foreman_development_hammer_dir: "{{ foreman_development_deployment_dir }}/hammer-cli"
8+
foreman_development_smart_proxy_dir: "{{ foreman_development_deployment_dir }}/smart-proxy"
79

810
foreman_development_ca_certificate: "{{ foreman_ca_certificate }}"
911
foreman_development_client_certificate: "{{ foreman_client_certificate }}"
@@ -16,6 +18,10 @@ foreman_development_git_repo: "https://github.com/theforeman/foreman.git"
1618
foreman_development_git_revision: "develop"
1719
foreman_development_github_username: ""
1820

21+
foreman_development_hammer_git_repo: "https://github.com/theforeman/hammer-cli.git"
22+
23+
foreman_development_smart_proxy_git_repo: "https://github.com/theforeman/smart-proxy.git"
24+
1925
foreman_development_rails_port: 3000
2026
foreman_development_rails_command: "puma -w 2 -p {{ foreman_development_rails_port }} --preload -b tcp://0.0.0.0"
2127

@@ -36,43 +42,106 @@ foreman_development_plugin_registry:
3642
manage_repo: true
3743
extra_gemfiles:
3844
- "gemfile.d/test.rb"
45+
hammer:
46+
gem: hammer_cli_katello
47+
name: "Katello/hammer-cli-katello"
48+
module_config: katello.yml
3949
foreman_remote_execution:
4050
name: "theforeman/foreman_remote_execution"
4151
manage_repo: true
52+
hammer:
53+
name: "theforeman/hammer_cli_foreman_remote_execution"
54+
module_config: foreman_remote_execution.yml
55+
smart_proxy:
56+
name: "theforeman/smart_proxy_remote_execution_ssh"
57+
module_config: remote_execution_ssh.yml
4258
foreman_ansible:
4359
name: "theforeman/foreman_ansible"
4460
settings_template: "foreman_ansible.yaml.j2"
4561
manage_repo: true
62+
hammer:
63+
gem: hammer_cli_foreman_ansible
64+
name: "theforeman/hammer-cli-foreman-ansible"
65+
module_config: foreman_ansible.yml
66+
smart_proxy:
67+
name: "theforeman/smart_proxy_ansible"
68+
module_config: ansible.yml
4669
foreman_rh_cloud:
4770
name: "theforeman/foreman_rh_cloud"
4871
manage_repo: true
72+
hammer:
73+
gem: hammer_cli_foreman_rh_cloud
74+
name: "theforeman/hammer-cli-foreman-rh-cloud"
75+
module_config: foreman_rh_cloud.yml
4976
foreman_discovery:
5077
name: "theforeman/foreman_discovery"
5178
manage_repo: true
79+
hammer:
80+
gem: hammer_cli_foreman_discovery
81+
name: "theforeman/hammer-cli-foreman-discovery"
82+
module_config: foreman_discovery.yml
83+
smart_proxy:
84+
name: "theforeman/smart_proxy_discovery"
85+
module_config: discovery.yml
5286
foreman_openscap:
5387
name: "theforeman/foreman_openscap"
5488
manage_repo: true
89+
hammer:
90+
name: "theforeman/hammer_cli_foreman_openscap"
91+
module_config: foreman_openscap.yml
92+
smart_proxy:
93+
name: "theforeman/smart_proxy_openscap"
94+
module_config: openscap.yml
5595
foreman_bootdisk:
5696
name: "theforeman/foreman_bootdisk"
5797
manage_repo: true
98+
hammer:
99+
name: "theforeman/hammer_cli_foreman_bootdisk"
100+
module_config: foreman_bootdisk.yml
58101
foreman_theme_satellite:
59102
name: "redhatsatellite/foreman_theme_satellite"
60103
manage_repo: true
61104
foreman_tasks:
62105
name: "theforeman/foreman-tasks"
63106
manage_repo: true
107+
hammer:
108+
gem: hammer_cli_foreman_tasks
109+
name: "theforeman/hammer-cli-foreman-tasks"
110+
module_config: foreman_tasks.yml
111+
smart_proxy:
112+
name: "theforeman/smart_proxy_dynflow"
113+
module_config: dynflow.yml
64114
foreman_webhooks:
65115
name: "theforeman/foreman_webhooks"
66116
manage_repo: true
117+
hammer:
118+
gem: hammer_cli_foreman_webhooks
119+
name: "theforeman/hammer-cli-foreman-webhooks"
120+
module_config: foreman_webhooks.yml
121+
smart_proxy:
122+
name: "theforeman/smart_proxy_shellhooks"
123+
module_config: shellhooks.yml
67124
foreman_templates:
68125
name: "theforeman/foreman_templates"
69126
manage_repo: true
127+
hammer:
128+
gem: hammer_cli_foreman_templates
129+
name: "theforeman/hammer-cli-foreman-templates"
130+
module_config: foreman_templates.yml
70131
foreman_leapp:
71132
name: "theforeman/foreman_leapp"
72133
manage_repo: true
134+
hammer:
135+
gem: hammer_cli_foreman_leapp
136+
name: "theforeman/hammer-cli-foreman-leapp"
137+
module_config: foreman_leapp.yml
73138
foreman_puppet:
74139
name: "theforeman/foreman_puppet"
75140
manage_repo: true
141+
hammer:
142+
gem: hammer_cli_foreman_puppet
143+
name: "theforeman/hammer-cli-foreman-puppet"
144+
module_config: foreman_puppet.yml
76145

77146
foreman_development_default_plugins:
78147
- katello
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
- name: Deploy Hammer git repository
2+
ansible.builtin.include_role:
3+
name: git_repository
4+
vars:
5+
git_repository_destination_dir: "{{ foreman_development_hammer_dir }}"
6+
git_repository_user: "{{ foreman_development_user }}"
7+
git_repository_repository_owner: "theforeman"
8+
git_repository_repository_name: "hammer-cli"
9+
git_repository_revision: "{{ foreman_development_hammer_git_revision }}"
10+
git_repository_secondary_remote_owner: "{{ foreman_development_github_username }}"
11+
12+
- name: Setup hammer-cli-foreman
13+
ansible.builtin.include_tasks: hammer/plugin.yml
14+
vars:
15+
foreman_development_plugin_name: "hammer_cli_foreman"
16+
foreman_development_plugin_org: "theforeman"
17+
foreman_development_plugin_repo_url: "https://github.com/theforeman/hammer-cli-foreman.git"
18+
foreman_development_plugin_manage_repo: true
19+
foreman_development_plugin_settings_template: "hammer/foreman.yml.j2"
20+
foreman_development_plugin_extra_gemfiles: []
21+
22+
- name: Setup plugins
23+
ansible.builtin.include_tasks: hammer/plugin.yml
24+
vars:
25+
foreman_development_plugin_config: "{{ (foreman_development_plugin_registry[plugin_item] | default({})).hammer | default({}) }}"
26+
foreman_development_plugin_name: "{{ foreman_development_plugin_config.name.split('/')[1] }}"
27+
foreman_development_plugin_gem: "{{ foreman_development_plugin_config.gem }}"
28+
foreman_development_plugin_org: "{{ foreman_development_plugin_config.name.split('/')[0] }}"
29+
foreman_development_plugin_repo_url: "https://github.com/{{ foreman_development_plugin_config.name }}.git"
30+
foreman_development_plugin_manage_repo: "{{ foreman_development_plugin_config.manage_repo | default(true) }}"
31+
foreman_development_plugin_settings_template: "{{ foreman_development_plugin_config.settings_template | default('') }}"
32+
foreman_development_plugin_module_config: "{{ foreman_development_plugin_config.module_config | default('') }}"
33+
foreman_development_plugin_extra_gemfiles: []
34+
when: foreman_development_plugin_config != {}
35+
loop: "{{ foreman_development_default_plugins + foreman_development_enabled_plugins }}"
36+
loop_control:
37+
loop_var: plugin_item
38+
39+
- name: Install Ruby dependencies
40+
ansible.builtin.command:
41+
cmd: bundle install --path .vendor --jobs 3
42+
chdir: "{{ foreman_development_hammer_dir }}"
43+
become: true
44+
become_user: "{{ foreman_development_user }}"
45+
environment:
46+
PATH: "/usr/bin:/bin:/usr/local/bin"
47+
changed_when: true
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
- name: "Deploy plugin git repository for {{ foreman_development_plugin_name }}"
3+
ansible.builtin.include_role:
4+
name: git_repository
5+
vars:
6+
git_repository_destination_dir: "{{ foreman_development_deployment_dir }}/{{ foreman_development_plugin_name }}"
7+
git_repository_user: "{{ foreman_development_user }}"
8+
git_repository_repository_owner: "{{ foreman_development_plugin_org }}"
9+
git_repository_repository_name: "{{ foreman_development_plugin_name }}"
10+
git_repository_secondary_remote_owner: "{{ foreman_development_github_username }}"
11+
when: foreman_development_plugin_manage_repo
12+
13+
- name: "Create settings file for {{ foreman_development_plugin_name }}"
14+
ansible.builtin.template:
15+
src: "{{ foreman_development_plugin_settings_template }}"
16+
dest: "{{ foreman_development_hammer_dir }}/config/cli.modules.d/{{ foreman_development_plugin_settings_template.split('/')[1] | replace('.j2', '') }}"
17+
owner: "{{ foreman_development_user }}"
18+
group: "{{ foreman_development_group }}"
19+
mode: "0644"
20+
become: true
21+
become_user: "{{ foreman_development_user }}"
22+
when: foreman_development_plugin_settings_template != ""
23+
24+
- name: "Copy module config file for {{ foreman_development_plugin_name }}"
25+
ansible.builtin.shell: |
26+
cp {{ foreman_development_deployment_dir }}/{{ foreman_development_plugin_name }}/config/{{ foreman_development_plugin_module_config }} \
27+
{{ foreman_development_hammer_dir }}/config/cli.modules.d/{{ foreman_development_plugin_module_config }}
28+
args:
29+
creates: "{{ foreman_development_hammer_dir }}/config/cli.modules.d/{{ foreman_development_plugin_module_config }}"
30+
become: true
31+
become_user: "{{ foreman_development_user }}"
32+
when:
33+
- foreman_development_plugin_settings_template == ""
34+
- foreman_development_plugin_module_config | default("") != ""
35+
36+
- name: "Create bundler configuration for {{ foreman_development_plugin_name }}"
37+
ansible.builtin.lineinfile:
38+
line: >-
39+
gem '{{ foreman_development_plugin_gem | default(foreman_development_plugin_name) }}',
40+
path: '{{ foreman_development_deployment_dir }}/{{ foreman_development_plugin_name }}'
41+
path: "{{ foreman_development_hammer_dir }}/Gemfile.local.rb"
42+
create: true
43+
state: present
44+
regexp: "^\\s*gem '{{ foreman_development_plugin_name }}'"
45+
mode: "0644"
46+
become: true
47+
become_user: "{{ foreman_development_user }}"
48+
when: foreman_development_plugin_name != ""

development/roles/foreman_development/tasks/main.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,13 @@
241241
name: foreman-development
242242
state: stopped
243243
enabled: false
244+
245+
- name: Configure smart-proxy for development
246+
ansible.builtin.include_tasks: smart-proxy/main.yml
247+
when:
248+
- "'foreman-proxy' in enabled_features"
249+
250+
- name: Configure hammer for development
251+
ansible.builtin.include_tasks: hammer/main.yml
252+
when:
253+
- "'hammer' in enabled_features"
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
---
2+
- name: Deploy smart-proxy git repository
3+
ansible.builtin.include_role:
4+
name: git_repository
5+
vars:
6+
git_repository_destination_dir: "{{ foreman_development_smart_proxy_dir }}"
7+
git_repository_user: "{{ foreman_development_user }}"
8+
git_repository_repository_owner: "theforeman"
9+
git_repository_repository_name: "smart-proxy"
10+
git_repository_secondary_remote_owner: "{{ foreman_development_github_username }}"
11+
12+
- name: Create cert directories
13+
ansible.builtin.file:
14+
path: "{{ foreman_development_cert_dir }}/smart-proxy"
15+
state: directory
16+
mode: "0750"
17+
owner: "{{ foreman_development_user }}"
18+
19+
- name: Deploy certificates
20+
ansible.builtin.copy:
21+
src: "{{ item.src }}"
22+
dest: "{{ foreman_development_cert_dir }}/smart-proxy/{{ item.dest }}"
23+
remote_src: true
24+
mode: "0640"
25+
owner: "{{ foreman_development_user }}"
26+
loop:
27+
- src: "{{ httpd_server_ca_certificate }}"
28+
dest: "ca.crt"
29+
- src: "{{ httpd_server_certificate }}"
30+
dest: "proxy.crt"
31+
- src: "{{ httpd_server_key }}"
32+
dest: "proxy.key"
33+
34+
- name: Create smart-proxy settings.d file from template
35+
ansible.builtin.template:
36+
src: "smart-proxy/settings.yml.j2"
37+
dest: "{{ foreman_development_smart_proxy_dir }}/config/settings.yml"
38+
owner: "{{ foreman_development_user }}"
39+
group: "{{ foreman_development_group }}"
40+
mode: "0644"
41+
become: true
42+
become_user: "{{ foreman_development_user }}"
43+
44+
- name: Setup smart-proxy plugins
45+
ansible.builtin.include_tasks: smart-proxy/plugin.yml
46+
vars:
47+
foreman_development_plugin_config: "{{ (foreman_development_plugin_registry[plugin_item] | default({})).smart_proxy | default({}) }}"
48+
foreman_development_plugin_name: "{{ foreman_development_plugin_config.name.split('/')[1] }}"
49+
foreman_development_plugin_gem: "{{ foreman_development_plugin_config.gem | default(foreman_development_plugin_config.name.split('/')[1]) }}"
50+
foreman_development_plugin_org: "{{ foreman_development_plugin_config.name.split('/')[0] }}"
51+
foreman_development_plugin_repo_url: "https://github.com/{{ foreman_development_plugin_config.name }}.git"
52+
foreman_development_plugin_manage_repo: "{{ foreman_development_plugin_config.manage_repo | default(true) }}"
53+
foreman_development_plugin_settings_template: "{{ foreman_development_plugin_config.settings_template | default('') }}"
54+
foreman_development_plugin_module_config: "{{ foreman_development_plugin_config.module_config | default('') }}"
55+
foreman_development_plugin_bundler_path_prefix: "../../"
56+
foreman_development_plugin_extra_gemfiles: []
57+
when: foreman_development_plugin_config != {}
58+
loop: "{{ foreman_development_default_plugins + foreman_development_enabled_plugins }}"
59+
loop_control:
60+
loop_var: plugin_item
61+
62+
- name: Ensure the crb repository is enabled
63+
community.general.dnf_config_manager:
64+
name: crb
65+
state: enabled
66+
67+
- name: Install smart-proxy dependencies
68+
ansible.builtin.package:
69+
name:
70+
- libvirt-devel
71+
- krb5-devel
72+
- libyaml-devel
73+
- systemd-devel
74+
state: present
75+
76+
- name: Install smart-proxy Ruby dependencies
77+
ansible.builtin.command:
78+
cmd: bundle install --path .vendor --jobs 3
79+
chdir: "{{ foreman_development_smart_proxy_dir }}"
80+
become: true
81+
become_user: "{{ foreman_development_user }}"
82+
environment:
83+
PATH: "/usr/bin:/bin:/usr/local/bin"
84+
changed_when: true
85+
86+
- name: Create smart-proxy development systemd service
87+
ansible.builtin.template:
88+
src: smart-proxy/smart-proxy-development.service.j2
89+
dest: /etc/systemd/system/smart-proxy-development.service
90+
owner: root
91+
group: root
92+
mode: "0644"
93+
94+
- name: Reload systemd daemon
95+
ansible.builtin.systemd:
96+
daemon_reload: true
97+
98+
- name: Enable and start smart-proxy development service
99+
ansible.builtin.systemd:
100+
name: smart-proxy-development
101+
enabled: true
102+
state: started
103+
104+
- name: Wait for smart-proxy development server to be accessible
105+
ansible.builtin.uri:
106+
url: "http://{{ ansible_facts['fqdn'] }}:8000/features"
107+
validate_certs: false
108+
until: foreman_development_smart_proxy_status.status == 200
109+
retries: 30
110+
delay: 5
111+
register: foreman_development_smart_proxy_status
112+
113+
- name: Enable and start Foreman development service
114+
ansible.builtin.systemd:
115+
name: foreman-development
116+
enabled: true
117+
state: started
118+
119+
- name: Wait for Foreman development server to be accessible
120+
ansible.builtin.uri:
121+
url: '{{ foreman_development_url }}/api/v2/ping'
122+
validate_certs: false
123+
until: foreman_development_status.status == 200
124+
retries: 30
125+
delay: 5
126+
register: foreman_development_status
127+
128+
- name: Configure smart-proxy for development
129+
theforeman.foreman.smart_proxy:
130+
name: "{{ ansible_facts['fqdn'] }}-dev"
131+
url: "https://{{ ansible_facts['fqdn'] }}:8443"
132+
server_url: "{{ foreman_development_url }}"
133+
username: "{{ foreman_development_admin_user }}"
134+
password: "{{ foreman_development_admin_password }}"
135+
validate_certs: false
136+
137+
- name: Stop smart-proxy development service after smart proxy registration
138+
ansible.builtin.systemd:
139+
name: smart-proxy-development
140+
state: stopped
141+
enabled: false

0 commit comments

Comments
 (0)