209 Create iocage pkglist file¶
Use case¶
Use the role vbotka.freebsd.iocage to create iocage list of packages for Automatic Package Installation. Create Ansible template for Apache HTTP server.
Tree¶
shell> tree .
.
├── ansible.cfg
├── files
│ ├── pk_admins.txt
│ └── pkgs.json
├── group_vars
│ └── all
│ ├── pkgdict.yml
│ ├── pkgdict_versions.yml
│ └── pkglist.yml
├── host_vars
│ └── iocage_04
│ └── iocage.yml
├── iocage.ini
└── pb-pkglist.yml
Synopsis¶
At the control node use:
-
to create iocage list of packages
files/pkgs.jsonfor Automatic Package Installation of the Apache HTTP Server.
playbook vbotka.freebsd.pb_iocage_template.yml:
to create Ansible template
ansible_client_apache.
Requirements¶
Notes¶
Use the same
pkgdict_*.ymlvariables in:role vbotka.freebsd.poudriere to build packages
role vbotka.freebsd.packages to install packages
role vbotka.freebsd.iocage to install packages in jails.
The inventory
iocage.iniis not needed to create the filepkgs.json. It would be sufficient to run the play at thelocalhost. It is used here because normally the filespkgs.json, after being created, are used in theiocagemanaged nodes.This example covers the simplest case of creating the common file
pkgs.jsonfor all managed nodes in the groupiocage.See the tasks
playbooks/pb_iocage_template/pkglist.ymlhow thetemplateattributepkglistis used.
See also
pkgdict_*.yamlvariables in the role vbotka.freebsd.postinstall defaults
ansible.cfg¶
[defaults]
gathering = explicit
callback_result_format = yaml
display_skipped_hosts = false
[connection]
pipelining = true
Inventory iocage.ini¶
iocage_04 ansible_host=10.1.0.29
[iocage]
iocage_04
[iocage:vars]
ansible_user=admin
ansible_become=true
ansible_python_interpreter=auto_silent
group_vars¶
freebsd_iocage_pkglist_dict: "{{ pkg_dict }}"
freebsd_iocage_pkglist_pkgs: [apache, minimal]
pkg_dict:
ansible:
- sysutils/ansible
- sysutils/py-ansible-lint
- sysutils/py-ansible-runner
apache:
- www/apache{{ apache_version }}
- www/mod_php{{ apache_php_version }}
apcups:
- sysutils/apcupsd
minimal:
- archivers/gtar
- devel/git@default
- ftp/wget
- net/rsync
- ports-mgmt/pkg
- ports-mgmt/portmaster
- ports-mgmt/portupgrade
- security/sudo
- shells/bash
mysql:
- databases/mysql{{ bsd_mysql_version }}-client
- databases/mysql{{ bsd_mysql_version }}-server
mysql_extra:
- databases/py-pymysql
- databases/py-mysql-connector-python
- databases/py-mysqlclient
poudriere:
- ports-mgmt/poudriere
- ports-mgmt/portmaster
- devel/ccache
procmail:
- mail/procmail
python:
- lang/python{{ bsd_python_version }}
- lang/python
- lang/python3
qemu:
- emulators/qemu
qemu_user_static:
- emulators/qemu-user-static
security:
- security/ca_root_nss
- security/openssl
- security/py-acme
- security/py-acme-tiny
- security/py-certbot
- security/py-cryptography
- security/py-openssl
smart:
- sysutils/smartmontools
- sysutils/smart
snmpd:
- net-mgmt/net-snmp
- net-mgmt/py-pysnmp
ssmtp:
- mail/ssmtp
syslog-ng:
- sysutils/syslog-ng
wpa_supplicant:
- security/wpa_supplicant
# Default versions
apache_version_default: "2.4"
apache_php_version_default: "8.3"
bsd_gcc_version_default: "12"
bsd_linux_version_default: c7
bsd_mysql_version_default: "8.4"
bsd_perl_version_default: "5.40"
bsd_php_version_default: "8.3"
bsd_python_version_default: "3.11"
bsd_ssl_version_default: openssl
# Default versions from /usr/ports/Mk/bsd.default-versions.mk if
# enabled (fp_vars_default_versions=true). See tasks/vars.yml
apache_version: "{{ pf_default_versions.APACHE_DEFAULT | d(apache_version_default) | string | split('.') | join }}"
apache_php_version: "{{ pf_default_versions.PHP_DEFAULT | d(apache_php_version_default) | string | split('.') | join }}"
bsd_bind_version: "918"
bsd_dhcp_version: "44"
bsd_gcc_version: "{{ pf_default_versions.GCC_DEFAULT | d(bsd_gcc_version_default) | string }}"
bsd_linux_version: "{{ pf_default_versions.LINUX_DEFAULT | d(bsd_linux_version_default) | string }}"
bsd_mysql_version: "{{ pf_default_versions.MYSQL_DEFAULT | d(bsd_mysql_version_default) | string | split('.') | join }}"
bsd_perl_version: "{{ pf_default_versions.PERL5_DEFAULT | d(bsd_perl_version_default) | string }}"
bsd_php_version: "{{ pf_default_versions.PHP_DEFAULT | d(bsd_php_version_default) | string | split('.') | join }}"
bsd_python_version: "{{ pf_default_versions.PYTHON_DEFAULT | d(bsd_python_version_default) | string | split('.') | join }}"
bsd_ssl_version: "{{ pf_default_versions.SSL_DEFAULT | d(bsd_ssl_version_default) | string }}"
# Make default versions
bsd_make_gcc_version: "{{ bsd_gcc_version }}"
bsd_make_mysql_version: "{{ bsd_mysql_version[0] }}.{{ bsd_mysql_version[1:] }}"
bsd_make_perl_version: "{{ bsd_perl_version }}"
bsd_make_php_version: "{{ bsd_php_version[0] }}.{{ bsd_php_version[1:] }}"
bsd_make_python_version: "{{ bsd_python_version[0] }}.{{ bsd_python_version[1:] }}"
bsd_make_ssl_version: "{{ bsd_ssl_version }}"
Playbook pb-pkglist.yml¶
- name: Create pkglist file.
hosts: iocage
remote_user: admin
tasks:
- ansible.builtin.import_role:
name: vbotka.freebsd.iocage
tasks_from: pkglist
Playbook output - Create pkgs.json¶
(env) > ansible-playbook pb.yml -i iocage.ini
PLAY [Create pkglist file.] ****************************************************
TASK [vbotka.freebsd.iocage : Pkglist: Sanity. All package lists are in dictionary.] ***
ok: [iocage_04 -> localhost]
TASK [vbotka.freebsd.iocage : Pkglist: Create dictionary for pkglist files.] ***
ok: [iocage_04 -> localhost]
TASK [vbotka.freebsd.iocage : Pkglist: Create pkglist file.] *******************
changed: [iocage_04 -> localhost]
PLAY RECAP *********************************************************************
iocage_04 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Result¶
{
"pkgs": [
"archivers/gtar",
"devel/git@default",
"ftp/wget",
"net/rsync",
"ports-mgmt/pkg",
"ports-mgmt/portmaster",
"ports-mgmt/portupgrade",
"security/sudo",
"shells/bash",
"www/apache24",
"www/mod_php83"
]
}
Playbook output - Create template¶
(env) > ansible-playbook vbotka.freebsd.pb_iocage_template.yml -i iocage.ini
PLAY [Create Ansible client templates.] ****************************************
TASK [Setup: Get iocage list of templates.] ************************************
ok: [iocage_04]
TASK [Setup: Set dictionary iocage_templates] **********************************
ok: [iocage_04]
TASK [Pkglist: Create directories for pkglist files.] **************************
ok: [iocage_04] => (item=ansible_client_apache /tmp/ansible/ansible_client_apache/pkgs.json)
TASK [Pkglist: Copy pkglist files.] ********************************************
changed: [iocage_04] => (item=ansible_client_apache /tmp/ansible/ansible_client_apache/pkgs.json)
TASK [Create: Create templates.] ***********************************************
changed: [iocage_04] => (item=ansible_client_apache 14.3-RELEASE)
TASK [Start: Start jails.] *****************************************************
ok: [iocage_04]
TASK [User: Create user.] ******************************************************
changed: [iocage_04] => (item=ansible_client_apache admin)
TASK [Pk: The keys is valid.] **************************************************
ok: [iocage_04] =>
changed: false
msg: All assertions passed
TASK [Pk: Configure public keys.] **********************************************
changed: [iocage_04] => (item=ansible_client_apache admin)
TASK [Pk: Chown .ssh] **********************************************************
ok: [iocage_04] => (item=ansible_client_apache admin)
TASK [Sudo: Configure sudo.] ***************************************************
changed: [iocage_04] => (item=ansible_client_apache admin)
TASK [Dhclient: Configure hooks.] **********************************************
changed: [iocage_04] => (item=ansible_client_apache dhclient-exit-hooks)
TASK [Rcconf: Configure /etc/rc.conf] ******************************************
changed: [iocage_04] => (item=ansible_client_apache iocage_enable YES)
changed: [iocage_04] => (item=ansible_client_apache sshd_enable YES)
TASK [Stop: Stop jails.] *******************************************************
ok: [iocage_04]
TASK [Template: Set template.] *************************************************
ok: [iocage_04] => (item=ansible_client_apache)
PLAY RECAP *********************************************************************
iocage_04 : ok=15 changed=7 unreachable=0 failed=0 skipped=21 rescued=0 ignored=0