Skip to content

Commit b569046

Browse files
committed
Add development workflow with source on vm
Signed-off-by: Eric D. Helms <ericdhelms@gmail.com>
1 parent 74ebf59 commit b569046

21 files changed

Lines changed: 772 additions & 27 deletions

File tree

.github/workflows/test.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,40 @@ jobs:
108108
## If no one connects after 5 minutes, shut down server.
109109
wait-timeout-minutes: 5
110110

111+
devel-tests:
112+
strategy:
113+
fail-fast: false
114+
runs-on: ubuntu-24.04
115+
steps:
116+
- uses: actions/checkout@v5
117+
- name: Set up Python
118+
uses: actions/setup-python@v6
119+
with:
120+
python-version: '3.12'
121+
- name: Setup libvirt for Vagrant
122+
uses: voxpupuli/setup-vagrant@v0
123+
- name: Install Ansible
124+
run: pip install --upgrade ansible-core
125+
- name: Setup environment
126+
run: ./setup-environment
127+
- name: Start VMs
128+
run: |
129+
./forge vms start
130+
- name: Configure repositories
131+
run: |
132+
./forge setup-repositories
133+
- name: Run deployment
134+
run: |
135+
./forge deploy-dev --foreman-development-enabled-plugin foreman_ansible
136+
- name: Setup upterm session
137+
if: ${{ failure() }}
138+
uses: owenthereal/action-upterm@v1
139+
with:
140+
## limits ssh access and adds the ssh public key for the user which triggered the workflow
141+
limit-access-to-actor: true
142+
## If no one connects after 5 minutes, shut down server.
143+
wait-timeout-minutes: 5
144+
111145
# A dummy job that you can mark as a required check instead of each individual test
112146
test-suite:
113147
if: always()

development/ansible.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
host_key_checking = False
33
stdout_callback=debug
44
stderr_callback=debug
5-
roles_path = ./roles
5+
roles_path = ./roles:../src/roles
66
display_skipped_hosts = no
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
- name: Deploy Foreman Development Environment
3+
hosts: "{{ target_host if target_host is defined and target_host != '' else 'quadlet' }}"
4+
become: true
5+
vars_files:
6+
- "../../../src/vars/defaults.yml"
7+
- "../../../src/vars/{{ certificate_source }}_certificates.yml"
8+
- "../../../src/vars/images.yml"
9+
- "../../../src/vars/database.yml"
10+
- "../../../src/vars/foreman.yml"
11+
- "../../../src/vars/base.yaml"
12+
vars:
13+
httpd_foreman_backend: "http://localhost:3000"
14+
roles:
15+
- role: pre_install
16+
- role: certificates
17+
- role: postgresql
18+
vars:
19+
postgresql_databases:
20+
- name: "{{ candlepin_database_name }}"
21+
owner: "{{ candlepin_database_user }}"
22+
- name: "{{ foreman_development_database_name }}"
23+
owner: "{{ foreman_database_user }}"
24+
- name: "{{ foreman_development_database_name }}_test"
25+
owner: "{{ foreman_database_user }}"
26+
- name: "{{ pulp_database_name }}"
27+
owner: "{{ pulp_database_user }}"
28+
postgresql_users:
29+
- name: "{{ candlepin_database_user }}"
30+
password: "{{ candlepin_database_password }}"
31+
- name: "{{ foreman_database_user }}"
32+
password: "{{ foreman_database_password }}"
33+
role_attr_flags: SUPERUSER
34+
- name: "{{ pulp_database_user }}"
35+
password: "{{ pulp_database_password }}"
36+
- role: redis
37+
- role: candlepin
38+
- role: httpd
39+
- role: pulp
40+
- role: foreman_development
41+
post_tasks:
42+
- name: Display development environment information
43+
ansible.builtin.debug:
44+
msg: |
45+
Foreman development environment deployed successfully!
46+
47+
Access URLs:
48+
- Foreman UI: https://{{ foreman_development_url }}
49+
- Direct Rails: http://localhost:3000 (when running)
50+
51+
Credentials:
52+
- Username: {{ foreman_development_admin_user }}
53+
- Password: {{ foreman_development_admin_password }}
54+
55+
Next steps:
56+
- SSH into the system
57+
when using Vagrant: vagrant ssh quadlet
58+
when using a remote system: ssh {{ foreman_development_user }}@{{ ansible_facts['fqdn'] }}
59+
- Navigate to {{ foreman_development_foreman_dir }}
60+
- Run: bundle exec foreman start
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
help: |
3+
Deploy and manage Foreman development environment with git-based Foreman and containerized backend services.
4+
5+
variables:
6+
foreman_development_enabled_plugins:
7+
help: Plugin to enable (can be used multiple times)
8+
action: append
9+
parameter: --foreman-development-enabled-plugin
10+
target_host:
11+
help: Target hostname or IP address for deployment
12+
action: store
13+
foreman_development_user:
14+
help: Username for the development user account
15+
action: store
16+
foreman_development_github_username:
17+
help: GitHub username to add as additional remote for git checkouts
18+
action: store

development/requirements.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
---
22
collections:
33
- ansible.posix
4+
- community.crypto
5+
- community.postgresql
46
- community.general
7+
- name: containers.podman
8+
version: ">=1.16.4"
59
- name: https://github.com/theforeman/forklift
610
type: git
11+
- name: theforeman.foreman
712
- name: theforeman.operations
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
foreman_development_user: "vagrant"
3+
foreman_development_group: "{{ foreman_development_user }}"
4+
foreman_development_deployment_dir: "/home/{{ foreman_development_user }}"
5+
foreman_development_foreman_dir: "{{ foreman_development_deployment_dir }}/foreman"
6+
foreman_development_cert_dir: "{{ foreman_development_deployment_dir }}/foreman-certs"
7+
8+
foreman_development_ca_certificate: "{{ foreman_ca_certificate }}"
9+
foreman_development_client_certificate: "{{ foreman_client_certificate }}"
10+
foreman_development_client_key: "{{ foreman_client_key }}"
11+
12+
foreman_development_admin_user: "admin"
13+
foreman_development_admin_password: "changeme"
14+
15+
foreman_development_git_repo: "https://github.com/theforeman/foreman.git"
16+
foreman_development_git_revision: "develop"
17+
foreman_development_github_username: ""
18+
19+
foreman_development_rails_port: 3000
20+
foreman_development_rails_command: "puma -w 2 -p {{ foreman_development_rails_port }} --preload -b tcp://0.0.0.0"
21+
22+
foreman_development_url: "http://{{ ansible_facts['fqdn'] }}:{{ foreman_development_rails_port }}"
23+
24+
foreman_development_database_host: "localhost"
25+
foreman_development_database_port: 5432
26+
foreman_development_database_name: "foreman_development"
27+
foreman_development_database_user: "foreman"
28+
foreman_development_database_password: "foreman"
29+
30+
foreman_development_nodejs_stream: "22"
31+
32+
foreman_development_plugin_registry:
33+
katello:
34+
name: "katello/katello"
35+
settings_template: "katello.yaml.j2"
36+
manage_repo: true
37+
extra_gemfiles:
38+
- "gemfile.d/test.rb"
39+
foreman_remote_execution:
40+
name: "theforeman/foreman_remote_execution"
41+
manage_repo: true
42+
foreman_ansible:
43+
name: "theforeman/foreman_ansible"
44+
settings_template: "foreman_ansible.yaml.j2"
45+
manage_repo: true
46+
foreman_rh_cloud:
47+
name: "theforeman/foreman_rh_cloud"
48+
manage_repo: true
49+
foreman_discovery:
50+
name: "theforeman/foreman_discovery"
51+
manage_repo: true
52+
foreman_openscap:
53+
name: "theforeman/foreman_openscap"
54+
manage_repo: true
55+
foreman_bootdisk:
56+
name: "theforeman/foreman_bootdisk"
57+
manage_repo: true
58+
59+
foreman_development_default_plugins:
60+
- katello
61+
- foreman_remote_execution
62+
63+
foreman_development_enabled_plugins: []
64+
65+
foreman_development_packages:
66+
- git
67+
- ruby-devel
68+
- npm
69+
- postgresql-devel
70+
- libxml2-devel
71+
- libxslt-devel
72+
- libcurl-devel
73+
- gcc-c++
74+
- make
75+
- rubygem-bundler
76+
- rubygem-irb
77+
- postgresql

0 commit comments

Comments
 (0)