Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,40 @@ jobs:
## If no one connects after 5 minutes, shut down server.
wait-timeout-minutes: 5

devel-tests:
strategy:
fail-fast: false
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Setup libvirt for Vagrant
uses: voxpupuli/setup-vagrant@v0
- name: Install Ansible
run: pip install --upgrade ansible-core
- name: Setup environment
run: ./setup-environment
- name: Start VMs
run: |
./forge vms start
- name: Configure repositories
run: |
./forge setup-repositories
- name: Run deployment
run: |
./forge deploy-dev --foreman-development-enabled-plugin foreman_ansible
- name: Setup upterm session
if: ${{ failure() }}
uses: owenthereal/action-upterm@v1
with:
## limits ssh access and adds the ssh public key for the user which triggered the workflow
limit-access-to-actor: true
## If no one connects after 5 minutes, shut down server.
wait-timeout-minutes: 5

# A dummy job that you can mark as a required check instead of each individual test
test-suite:
if: always()
Expand Down
2 changes: 1 addition & 1 deletion development/ansible.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
host_key_checking = False
stdout_callback=debug
stderr_callback=debug
roles_path = ./roles
roles_path = ./roles:../src/roles
display_skipped_hosts = no
60 changes: 60 additions & 0 deletions development/playbooks/deploy-dev/deploy-dev.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
- name: Deploy Foreman Development Environment
hosts: "{{ target_host if target_host is defined and target_host != '' else 'quadlet' }}"
become: true
vars_files:
- "../../../src/vars/defaults.yml"
- "../../../src/vars/{{ certificate_source }}_certificates.yml"
- "../../../src/vars/images.yml"
- "../../../src/vars/database.yml"
- "../../../src/vars/foreman.yml"
- "../../../src/vars/base.yaml"
vars:
httpd_foreman_backend: "http://localhost:3000"
roles:
- role: pre_install
- role: certificates
- role: postgresql
vars:
postgresql_databases:
- name: "{{ candlepin_database_name }}"
owner: "{{ candlepin_database_user }}"
- name: "{{ foreman_development_database_name }}"
owner: "{{ foreman_database_user }}"
- name: "{{ foreman_development_database_name }}_test"
owner: "{{ foreman_database_user }}"
- name: "{{ pulp_database_name }}"
owner: "{{ pulp_database_user }}"
postgresql_users:
- name: "{{ candlepin_database_user }}"
password: "{{ candlepin_database_password }}"
- name: "{{ foreman_database_user }}"
password: "{{ foreman_database_password }}"
role_attr_flags: SUPERUSER
- name: "{{ pulp_database_user }}"
password: "{{ pulp_database_password }}"
- role: redis
- role: candlepin
- role: httpd
- role: pulp
- role: foreman_development
post_tasks:
- name: Display development environment information
ansible.builtin.debug:
msg: |
Foreman development environment deployed successfully!

Access URLs:
- Foreman UI: https://{{ foreman_development_url }}
- Direct Rails: http://localhost:3000 (when running)

Credentials:
- Username: {{ foreman_development_admin_user }}
- Password: {{ foreman_development_admin_password }}

Next steps:
- SSH into the system
when using Vagrant: vagrant ssh quadlet
when using a remote system: ssh {{ foreman_development_user }}@{{ ansible_facts['fqdn'] }}
- Navigate to {{ foreman_development_foreman_dir }}
- Run: bundle exec foreman start
18 changes: 18 additions & 0 deletions development/playbooks/deploy-dev/metadata.obsah.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
help: |
Deploy and manage Foreman development environment with git-based Foreman and containerized backend services.

variables:
foreman_development_enabled_plugins:
help: Plugin to enable (can be used multiple times)
action: append
parameter: --foreman-development-enabled-plugin
target_host:
help: Target hostname or IP address for deployment
action: store
foreman_development_user:
help: Username for the development user account
action: store
foreman_development_github_username:
help: GitHub username to add as additional remote for git checkouts
action: store
5 changes: 5 additions & 0 deletions development/requirements.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
---
collections:
- ansible.posix
- community.crypto
- community.postgresql
- community.general
- name: containers.podman
version: ">=1.16.4"
- name: https://github.com/theforeman/forklift
type: git
- name: theforeman.foreman
- name: theforeman.operations
77 changes: 77 additions & 0 deletions development/roles/foreman_development/defaults/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
foreman_development_user: "vagrant"
foreman_development_group: "{{ foreman_development_user }}"
foreman_development_deployment_dir: "/home/{{ foreman_development_user }}"
foreman_development_foreman_dir: "{{ foreman_development_deployment_dir }}/foreman"
foreman_development_cert_dir: "{{ foreman_development_deployment_dir }}/foreman-certs"

foreman_development_ca_certificate: "{{ foreman_ca_certificate }}"
foreman_development_client_certificate: "{{ foreman_client_certificate }}"
foreman_development_client_key: "{{ foreman_client_key }}"

foreman_development_admin_user: "admin"
foreman_development_admin_password: "changeme"

foreman_development_git_repo: "https://github.com/theforeman/foreman.git"
foreman_development_git_revision: "develop"
foreman_development_github_username: ""

foreman_development_rails_port: 3000
foreman_development_rails_command: "puma -w 2 -p {{ foreman_development_rails_port }} --preload -b tcp://0.0.0.0"

foreman_development_url: "http://{{ ansible_facts['fqdn'] }}:{{ foreman_development_rails_port }}"

foreman_development_database_host: "localhost"
foreman_development_database_port: 5432
foreman_development_database_name: "foreman_development"
foreman_development_database_user: "foreman"
foreman_development_database_password: "foreman"

foreman_development_nodejs_stream: "22"

foreman_development_plugin_registry:
katello:
name: "katello/katello"
settings_template: "katello.yaml.j2"
manage_repo: true
extra_gemfiles:
- "gemfile.d/test.rb"
foreman_remote_execution:
name: "theforeman/foreman_remote_execution"
manage_repo: true
foreman_ansible:
name: "theforeman/foreman_ansible"
settings_template: "foreman_ansible.yaml.j2"
manage_repo: true
foreman_rh_cloud:
name: "theforeman/foreman_rh_cloud"
manage_repo: true
foreman_discovery:
name: "theforeman/foreman_discovery"
manage_repo: true
foreman_openscap:
name: "theforeman/foreman_openscap"
manage_repo: true
foreman_bootdisk:
name: "theforeman/foreman_bootdisk"
manage_repo: true

foreman_development_default_plugins:
- katello
- foreman_remote_execution

foreman_development_enabled_plugins: []

foreman_development_packages:
- git
- ruby-devel
- npm
- postgresql-devel
- libxml2-devel
- libxslt-devel
- libcurl-devel
- gcc-c++
- make
- rubygem-bundler
- rubygem-irb
- postgresql
Loading