Skip to content

Commit 161c11b

Browse files
committed
My stab at a proxy deployment
1 parent 4fb4b6e commit 161c11b

15 files changed

Lines changed: 166 additions & 36 deletions

File tree

.github/workflows/test.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ jobs:
104104
run: ./setup-environment
105105
- name: Start VMs
106106
run: |
107-
./forge vms start --vms "quadlet client ${{ matrix.database == 'external' && 'database' || '' }}"
107+
./forge vms start --vms "quadlet proxy client ${{ matrix.database == 'external' && 'database' || '' }}"
108108
- name: Configure remote-database
109109
if: matrix.database == 'external'
110110
run: |
@@ -116,6 +116,7 @@ jobs:
116116
if: matrix.certificate_source == 'custom_server'
117117
run: |
118118
./forge custom-certs
119+
./forge custom-certs --hostname proxy.example.com
119120
- name: Setup security mode ${{ matrix.security }}
120121
if: matrix.security != 'none'
121122
run: |
@@ -153,6 +154,16 @@ jobs:
153154
--add-feature remote-execution \
154155
--add-feature bmc \
155156
${{ matrix.iop == 'enabled' && '--add-feature iop' || '' }}
157+
- name: Build certs bundle for proxy
158+
run: |
159+
./foremanctl certificate-bundle proxy.example.com \
160+
${{ matrix.certificate_source == 'custom_server' && '--certificate-server-certificate /root/custom-certificates/certs/proxy.example.com.crt --certificate-server-key /root/custom-certificates/private/proxy.example.com.key' || '' }}
161+
- name: Deploy proxy
162+
run: |
163+
./forge fetch-bundle proxy.example.com
164+
./foremanctl deploy-node \
165+
--certificate-bundle $(pwd)/.var/lib/foremanctl/proxy.example.com.tar.gz \
166+
--foreman-name quadlet.example.com
156167
- name: Run tests
157168
run: |
158169
./forge test --pytest-args="--database-mode=${{ matrix.database }}"

Vagrantfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@ Vagrant.configure("2") do |config|
3030
end
3131
end
3232

33+
config.vm.define "proxy" do |override|
34+
override.vm.box = ENV.fetch("FOREMANCTL_BASE_BOX", "centos/stream9")
35+
if override.vm.box == "centos/stream10"
36+
override.vm.box_url = "https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-Vagrant-10-latest.x86_64.vagrant-libvirt.box"
37+
end
38+
override.vm.hostname = "proxy.#{DOMAIN}"
39+
40+
override.vm.provider "libvirt" do |libvirt, provider|
41+
libvirt.memory = 10240
42+
libvirt.cpus = 4
43+
libvirt.machine_virtual_size = 30
44+
end
45+
end
46+
3347
config.vm.define "client" do |override|
3448
override.vm.box = "centos/stream9"
3549
override.vm.hostname = "client.#{DOMAIN}"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@
4545
- role: redis
4646
- role: candlepin
4747
- role: httpd
48-
- role: pulp
4948
- role: foreman_development
5049
vars:
5150
foreman_development_oauth_consumer_key: "{{ foreman_oauth_consumer_key }}"
5251
foreman_development_oauth_consumer_secret: "{{ foreman_oauth_consumer_secret }}"
5352
foreman_development_candlepin_oauth_secret: "{{ candlepin_oauth_secret }}"
53+
- role: pulp
5454
- role: iop_core
5555
when:
5656
- "'iop' in enabled_features"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
- name: Fetch generated bundle from server
3+
hosts:
4+
- quadlet
5+
become: true
6+
vars_files:
7+
- "../../../src/vars/base.yaml"
8+
- "../../../src/vars/certificates.yml"
9+
tasks:
10+
- name: Fetch bundle
11+
ansible.builtin.fetch:
12+
src: "{{ certificates_ca_directory }}/bundles/{{ hostname }}.tar.gz"
13+
dest: "{{ obsah_state_path }}/{{ hostname }}.tar.gz"
14+
flat: true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
help: |
3+
Fetch a certificate bundle
4+
5+
variables:
6+
hostname:
7+
parameter: hostname
8+
help: Hostname to fetch the certificate bundle for.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
- name: Setup proxy demo machine
3+
hosts:
4+
- proxy
5+
become: true
6+
vars_files:
7+
- "../../vars/defaults.yml"
8+
- "../../vars/flavors/{{ flavor }}.yml"
9+
- "../../vars/certificates.yml"
10+
- "../../vars/images.yml"
11+
- "../../vars/tuning/{{ tuning }}.yml"
12+
- "../../vars/database.yml"
13+
- "../../vars/foreman.yml"
14+
- "../../vars/base.yaml"
15+
roles:
16+
- role: pre_install
17+
- role: checks
18+
vars:
19+
checks_databases: "{{ all_databases }}"
20+
- role: certificates
21+
- role: certificate_checks
22+
vars:
23+
certificate_checks_certificate: "{{ server_certificate }}"
24+
certificate_checks_key: "{{ server_key }}"
25+
certificate_checks_ca: "{{ server_ca_certificate }}"
26+
- role: postgresql
27+
when:
28+
- database_mode == 'internal'
29+
- redis
30+
- httpd
31+
- pulp
32+
- role: systemd_target
33+
- role: foreman_proxy
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
help: |
3+
Install infra node
4+
5+
variables:
6+
certificates_bundle:
7+
help: Path to the certificates bundle
8+
type: AbsolutePath
9+
parameter: --certificate-bundle
10+
persist: false
11+
foreman_name:
12+
help: Hostname of the main Foreman instance
13+
type: FQDN
14+
15+
include:
16+
- _certificate_source
17+
- _certificate_validity
18+
- _database_mode
19+
- _database_connection
20+
- _tuning
21+
- _flavor_features
22+
- _pulp

src/playbooks/deploy/deploy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
- redis
3131
- candlepin
3232
- httpd
33-
- pulp
3433
- foreman
34+
- pulp
3535
- role: systemd_target
3636
- role: iop_core
3737
when:

src/roles/certificates/tasks/main.yml

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,37 @@
2929
state: directory
3030
mode: '0755'
3131

32-
- name: 'Generate CA certificate'
33-
ansible.builtin.include_tasks: ca.yml
34-
when: certificates_ca
35-
36-
- name: Issue host certificates
37-
ansible.builtin.include_tasks: host.yml
38-
when: certificates_hostnames is defined
39-
with_items: "{{ certificates_hostnames }}"
40-
loop_control:
41-
loop_var: certificates_hostname
42-
43-
- name: Create CA bundle with internal CA and custom server CA
44-
ansible.builtin.assemble:
45-
src: "{{ certificates_ca_directory_certs }}"
46-
dest: "{{ certificates_ca_directory_certs }}/ca-bundle.crt"
47-
regexp: '(ca|server-ca)\.crt$'
48-
mode: '0444'
49-
when:
50-
- certificates_source == 'custom_server'
51-
- certificates_custom_server_certificate is defined
32+
- name: 'Main certs'
33+
when: certificates_bundle is not defined
34+
block:
35+
- name: 'Generate CA certificate'
36+
ansible.builtin.include_tasks: ca.yml
37+
when: certificates_ca
38+
39+
- name: Issue host certificates
40+
ansible.builtin.include_tasks: host.yml
41+
when: certificates_hostnames is defined
42+
with_items: "{{ certificates_hostnames }}"
43+
loop_control:
44+
loop_var: certificates_hostname
45+
46+
- name: Create CA bundle with internal CA and custom server CA
47+
ansible.builtin.assemble:
48+
src: "{{ certificates_ca_directory_certs }}"
49+
dest: "{{ certificates_ca_directory_certs }}/ca-bundle.crt"
50+
regexp: '(ca|server-ca)\.crt$'
51+
mode: '0444'
52+
when:
53+
- certificates_source == 'custom_server'
54+
- certificates_custom_server_certificate is defined
55+
56+
- name: 'Bundle certs'
57+
when: certificates_bundle is defined
58+
block:
59+
- name: 'Unarchive the bundle'
60+
ansible.builtin.unarchive:
61+
src: "{{ certificates_bundle }}"
62+
dest: "{{ certificates_ca_directory }}"
63+
extra_opts:
64+
- "--strip-components"
65+
- "1"

src/roles/foreman/tasks/main.yaml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -312,12 +312,3 @@
312312
register: foreman_tasks_status
313313
when:
314314
- "'katello' in foreman_status.json['results']"
315-
316-
- name: Configure Foreman Proxy
317-
theforeman.foreman.smart_proxy:
318-
name: "{{ ansible_facts['fqdn'] }}-pulp"
319-
url: "https://{{ ansible_facts['fqdn'] }}/pulp/api/v3/smart_proxy"
320-
server_url: "{{ foreman_url }}"
321-
oauth1_consumer_key: "{{ foreman_oauth_consumer_key }}"
322-
oauth1_consumer_secret: "{{ foreman_oauth_consumer_secret }}"
323-
ca_path: "{{ foreman_ca_certificate }}"

0 commit comments

Comments
 (0)