Tasks
main.yml
Synopsis: Main task.
Import tasks if enabled.
1---
2# tasks freebsd_poudriere
3
4- name: Import debug.yml
5 ansible.builtin.import_tasks: debug.yml
6 when: poudriere_debug | bool
7 tags: poudriere_debug
8
9- name: Import sanity.yml
10 ansible.builtin.import_tasks: sanity.yml
11 when: poudriere_sanity | bool
12 tags: poudriere_sanity
13
14- name: Import pkg.yml
15 ansible.builtin.import_tasks: pkg.yml
16 when: poudriere_install | bool
17 tags: poudriere_pkg
18
19- name: Import dirs.yml
20 ansible.builtin.import_tasks: dirs.yml
21 when: poudriere_dirs | bool
22 tags: poudriere_dirs
23
24- name: Import key.yml
25 ansible.builtin.import_tasks: key.yml
26 when: poudriere_key | bool
27 tags: poudriere_key
28
29- name: Import cert.yml
30 ansible.builtin.import_tasks: cert.yml
31 when: poudriere_cert | bool
32 tags: poudriere_cert
33
34- name: Import conf.yml
35 ansible.builtin.import_tasks: conf.yml
36 when: poudriere_conf | bool
37 tags: poudriere_conf
38
39- name: Import pkglists.yml
40 ansible.builtin.import_tasks: pkglists.yml
41 when: poudriere_pkglists | bool
42 tags: poudriere_pkglists
43
44- name: Import options.yml
45 ansible.builtin.import_tasks: options.yml
46 when: poudriere_options | bool
47 tags: poudriere_options
48
49- name: Import make.yml
50 ansible.builtin.import_tasks: make.yml
51 when: poudriere_make | bool
52 tags: poudriere_make
53
54# EOF
debug.yml
Synopsis: Display values of the variables.
By default disabled poudriere_debug: false
1---
2# Display the variables values.
3
4- name: Poudriere Debug.
5 vars:
6 msg: |-
7 poudriere_role_version: {{ poudriere_role_version }}
8 ansible_role_name: {{ ansible_role_name }}
9
10 ansible_facts.architecture: {{ ansible_facts.architecture }}
11 ansible_facts.os_family: {{ ansible_facts.os_family }}
12 ansible_facts.distribution: {{ ansible_facts.distribution }}
13 ansible_facts.distribution_major_version: {{ ansible_facts.distribution_major_version }}
14 ansible_facts.distribution_version: {{ ansible_facts.distribution_version }}
15 ansible_facts.distribution_release: {{ ansible_facts.distribution_release }}
16 ansible_facts.python_version: {{ ansible_facts.python_version }}
17
18 freebsd_install_method: {{ freebsd_install_method }}
19 freebsd_use_packages: {{ freebsd_use_packages | d(true) }}
20 freebsd_install_retries: {{ freebsd_install_retries }}
21 freebsd_install_delay: {{ freebsd_install_delay }}
22 freebsd_iocage_env:
23 {{ freebsd_iocage_env | to_nice_yaml(indent=2) | indent(2) }}
24 poudriere_sanity: {{ poudriere_sanity }}
25 poudriere_install: {{ poudriere_install }}
26 poudriere_dirs: {{ poudriere_dirs }}
27 poudriere_key: {{ poudriere_key }}
28 poudriere_cert: {{ poudriere_cert }}
29 poudriere_conf: {{ poudriere_conf }}
30 poudriere_pkglists: {{ poudriere_pkglists }}
31 poudriere_options: {{ poudriere_options }}
32 poudriere_make: {{ poudriere_make }}
33
34 poudriere_backup_conf: {{ poudriere_backup_conf }}
35 poudriere_sanity_quiet: {{ poudriere_sanity_quiet }}
36
37 poudriere_packages_use_globs: {{ poudriere_packages_use_globs }}
38 poudriere_packages:
39 {{ poudriere_packages | to_nice_yaml(indent=2) | indent(2) }}
40 poudriere_packages_cert:
41 {{ poudriere_packages_cert | to_nice_yaml(indent=2) | indent(2) }}
42 poudriere_owner: {{ poudriere_owner }}
43 poudriere_group: {{ poudriere_group }}
44 poudriere_mode: {{ poudriere_mode }}
45 poudriere_mode_dir: {{ poudriere_mode_dir }}
46 poudriere_ssl_dir: {{ poudriere_ssl_dir }}
47 poudriere_ssl_dir_mode: {{ poudriere_ssl_dir_mode }}
48 poudriere_ssl_private_dir: {{ poudriere_ssl_private_dir }}
49 poudriere_ssl_private_dir_mode: {{ poudriere_ssl_private_dir_mode }}
50 poudriere_ssl_private_key_mode: {{ poudriere_ssl_private_key_mode }}
51 poudriere_ssl_dirs:
52 {{ poudriere_ssl_dirs | to_nice_yaml(indent=2) | indent(2) }}
53 poudriere_key_size: {{ poudriere_key_size }}
54 poudriere_key_type: {{ poudriere_key_type }}
55 poudriere_key_cmd: {{ poudriere_key_cmd }}
56 poudriere_key_crt: {{ poudriere_key_crt }}
57 poudriere_conf_pkg_repo_signing_key: {{ poudriere_conf_pkg_repo_signing_key }}
58
59 poudriere_cert_cn: {{ poudriere_cert_cn }}
60 poudriere_cert_key: {{ poudriere_cert_key }}
61 poudriere_cert_csr: {{ poudriere_cert_csr }}
62 poudriere_cert_path: {{ poudriere_cert_path }}
63
64 poudriere_conf_file: {{ poudriere_conf_file }}
65 poudriere_conf_template: {{ poudriere_conf_template }}
66 poudriere_conf_dir: {{ poudriere_conf_dir }}
67 poudriere_conf_dirs:
68 {{ poudriere_conf_dirs | to_nice_yaml(indent=2) | indent(2) }}
69 poudriere_conf_zpool: {{ poudriere_conf_zpool }}
70 poudriere_conf_no_zfs: {{ poudriere_conf_no_zfs }}
71 poudriere_conf_zrootfs: {{ poudriere_conf_zrootfs }}
72 poudriere_conf_freebsd_host: {{ poudriere_conf_freebsd_host }}
73 poudriere_conf_resolv_conf: {{ poudriere_conf_resolv_conf }}
74 poudriere_conf_basefs: {{ poudriere_conf_basefs }}
75 poudriere_conf_svn_host: {{ poudriere_conf_svn_host }}
76 poudriere_conf_poudriere_data: {{ poudriere_conf_poudriere_data }}
77 poudriere_conf_use_portlint: {{ poudriere_conf_use_portlint }}
78 poudriere_conf_use_tmpfs: {{ poudriere_conf_use_tmpfs }}
79 poudriere_conf_distfiles_cache: {{ poudriere_conf_distfiles_cache }}
80 poudriere_conf_url_base: {{ poudriere_conf_url_base }}
81 poudriere_conf_check_changed_options: {{ poudriere_conf_check_changed_options }}
82 poudriere_conf_check_changed_deps: {{ poudriere_conf_check_changed_deps }}
83 poudriere_conf_data:
84 {{ poudriere_conf_data | to_nice_yaml(indent=2) | indent(2) }}
85 poudriere_pkglist_dir: {{ poudriere_pkglist_dir }}
86 poudriere_pkglist_all: {{ poudriere_pkglist_all }}
87 poudriere_pkg_arch: {{ poudriere_pkg_arch | to_yaml }}
88 poudriere_make_file: {{ poudriere_make_file }}
89 poudriere_make_conf:
90 {{ poudriere_make_conf | to_nice_yaml(indent=2) | indent(2) }}
91 ansible.builtin.debug:
92 msg: "{{ '{}'.format(msg) }}"
93
94# EOF
See also
<TBD>
pkg.yml
Synopsis: Install packages or ports.
By default enabled poudriere_install: true
1---
2# Install packages or ports.
3
4 # Poudriere packages.
5- name: "Pkg: Install poudriere packages."
6 when: freebsd_install_method | lower == "packages"
7 community.general.pkgng:
8 name: "{{ poudriere_packages }}"
9 use_globs: "{{ poudriere_packages_use_globs }}"
10 until: result is succeeded
11 register: result
12 retries: "{{ freebsd_install_retries }}"
13 delay: "{{ freebsd_install_delay }}"
14
15- name: "Pkg: Install poudriere ports."
16 when: freebsd_install_method | lower == "ports"
17 community.general.portinstall:
18 name: "{{ item }}"
19 use_packages: "{{ freebsd_use_packages | d(omit) }}"
20 loop: "{{ poudriere_packages }}"
21 until: result is succeeded
22 register: result
23 retries: "{{ freebsd_install_retries }}"
24 delay: "{{ freebsd_install_delay }}"
25
26 # Certificate packages.
27- name: "Pkg: Install packages to create certificate."
28 community.general.pkgng:
29 name: "{{ poudriere_packages_cert }}"
30 use_globs: "{{ poudriere_packages_use_globs }}"
31 register: result
32 retries: "{{ freebsd_install_retries }}"
33 until: result is succeeded
34 delay: "{{ freebsd_install_delay }}"
35 when: freebsd_install_method | lower == "packages"
36
37- name: "Pkg: Install ports to create certificate."
38 when: freebsd_install_method | lower == "ports"
39 community.general.portinstall:
40 name: "{{ item }}"
41 use_packages: "{{ freebsd_use_packages | d(omit) }}"
42 loop: "{{ poudriere_packages_cert }}"
43 until: result is succeeded
44 register: result
45 retries: "{{ freebsd_install_retries }}"
46 delay: "{{ freebsd_install_delay }}"
47
48# EOF
See also
<TBD>
dirs.yml
Synopsis: Create SSL directories.
By default enabled poudriere_dirs: true
1---
2# Create SSL directories.
3
4- name: "Dirs: Create SSL directories."
5 ansible.builtin.file:
6 state: directory
7 path: "{{ item }}"
8 owner: "{{ poudriere_owner }}"
9 group: "{{ poudriere_group }}"
10 mode: "{{ poudriere_mode_dir }}"
11 loop: "{{ poudriere_ssl_dirs }}"
12
13- name: "Dirs: Create SSL directory {{ poudriere_ssl_private_dir ~ ' mode=' ~ poudriere_ssl_private_dir_mode }}"
14 ansible.builtin.file:
15 state: directory
16 path: "{{ poudriere_ssl_private_dir }}"
17 owner: "{{ poudriere_owner }}"
18 group: "{{ poudriere_group }}"
19 mode: "{{ poudriere_ssl_private_dir_mode }}"
20
21# EOF
See also
<TBD>
key.yml
Synopsis: Create signing key.
By default enabled poudriere_key: true
1---
2- name: Generate signing key.
3 environment: "{{ freebsd_iocage_env }}"
4 block:
5
6 - name: "Key: Generate signing key {{ poudriere_conf_pkg_repo_signing_key }}"
7 community.crypto.openssl_privatekey:
8 attributes: "{{ poudriere_key_attributes | d(omit) }}"
9 backup: "{{ poudriere_key_backup | d(omit) }}"
10 cipher: "{{ poudriere_key_cipher | d(omit) }}"
11 curve: "{{ poudriere_key_curve | d(omit) }}"
12 force: "{{ poudriere_key_force | d(omit) }}"
13 group: "{{ poudriere_group }}"
14 mode: "{{ poudriere_ssl_private_key_mode }}"
15 owner: "{{ poudriere_owner }}"
16 passphrase: "{{ poudriere_key_passphrase | d(omit) }}"
17 path: "{{ poudriere_conf_pkg_repo_signing_key }}"
18 # regenerate: "{{ poudriere_key_regenerate|d(omit) }}"
19 # return_content: "{{ poudriere_key_return_content|d(omit) }}"
20 select_crypto_backend: "{{ poudriere_key_select_crypto_backend | d(omit) }}"
21 selevel: "{{ poudriere_key_selevel | d(omit) }}"
22 serole: "{{ poudriere_key_serole | d(omit) }}"
23 setype: "{{ poudriere_key_setype | d(omit) }}"
24 seuser: "{{ poudriere_key_seuser | d(omit) }}"
25 size: "{{ poudriere_key_size }}"
26 state: "{{ poudriere_key_state | d(omit) }}"
27 type: "{{ poudriere_key_type }}"
28 unsafe_writes: "{{ poudriere_key_unsafe_writes | d(omit) }}"
29
30 - name: "Key: Generate signing crt {{ poudriere_key_crt }}"
31 ansible.builtin.command:
32 cmd: "{{ poudriere_key_cmd }}"
33 creates: "{{ poudriere_key_crt }}"
34
35# EOF
See also
<TBD>
cert.yml
Synopsis: Generate SSL certificate for the web server.
By default disabled poudriere_cert: false
1---
2- name: Generate SSL certificate for the web server.
3 environment: "{{ freebsd_iocage_env }}"
4 block:
5
6 - name: "Cert: Generate private key {{ poudriere_cert_key }}"
7 community.crypto.openssl_privatekey:
8 path: "{{ poudriere_cert_key }}"
9 owner: "{{ poudriere_owner }}"
10 group: "{{ poudriere_group }}"
11 mode: "{{ poudriere_ssl_private_key_mode }}"
12
13 - name: "Cert: Generate csr {{ poudriere_cert_csr }}"
14 when: not ansible_check_mode
15 community.crypto.openssl_csr:
16 path: "{{ poudriere_cert_csr }}"
17 privatekey_path: "{{ poudriere_cert_key }}"
18 common_name: "{{ poudriere_cert_cn }}"
19
20 - name: "Cert: Generate crt {{ poudriere_cert_path }}"
21 when: not ansible_check_mode
22 community.crypto.x509_certificate:
23 path: "{{ poudriere_cert_path }}"
24 privatekey_path: "{{ poudriere_cert_key }}"
25 csr_path: "{{ poudriere_cert_csr }}"
26 provider: selfsigned
27
28# TODO
29# It seems, it’s not possible to force pkg accept self-signed https certificate.
30# See https://www.digitalocean.com/community/tutorials/how-to-set-up-a-poudriere-build-system-to-create-packages-for-your-freebsd-servers?comment=97460
31
32# EOF
See also
<TBD>
conf.yml
Synopsis: Configure Poudriere.
By default enabled poudriere_conf: true
1---
2# Configure Poudriere.
3
4- name: "Conf: Create directories."
5 tags: poudriere_conf_dirs
6 ansible.builtin.file:
7 state: directory
8 path: "{{ item.dir }}"
9 owner: "{{ item.owner }}"
10 group: "{{ item.group }}"
11 mode: "{{ item.mode }}"
12 loop: "{{ poudriere_conf_dirs }}"
13 loop_control:
14 label: "{{ item.dir }}"
15
16- name: "Conf: Configure {{ poudriere_conf_file }}"
17 tags: poudriere_conf_file
18 ansible.builtin.template:
19 src: "{{ poudriere_conf_template }}"
20 dest: "{{ poudriere_conf_file }}"
21 owner: "{{ poudriere_owner }}"
22 group: "{{ poudriere_group }}"
23 mode: "{{ poudriere_mode }}"
24 backup: "{{ poudriere_backup_conf | bool }}"
25
26# EOF
See also
<TBD>
pkglists.yml
Synopsis: Create package lists.
By default enabled poudriere_pkglists: true
1---
2# Create plackage lists.
3
4- name: "Pkglists: Create package lists."
5 ansible.builtin.include_tasks: pkglist.yml
6 loop: "{{ poudriere_pkg_arch }}"
7 loop_control:
8 loop_var: pkg_arch
9
10# EOF
See also
<TBD>
pkglist.yml
Synopsis: Maintain package lists for a particular architecture.
These lists will be used by poudriere. Quoting man poudriere: “Launch the bulk build. At minimum the jail and list of packages to build must be specified.”
For example,
shell> poudriere bulk -j 141Ramd64 -f /usr/local/etc/poudriere.d/pkglist/amd64/minimal
1---
2# Create package lists.
3
4- name: Create package lists.
5 vars:
6 _pkg_dict_var: "pkg_dict_{{ pkg_arch }}"
7 _pkglist_enable_var: "pkglist_enable_{{ pkg_arch }}"
8 _pkg_dict: "{{ lookup('vars', _pkg_dict_var, default=[]) | sort(attribute='pkglist') }}"
9 _pkglist_enable: "{{ lookup('vars', _pkglist_enable_var, default=[]) | sort }}"
10 _pkglist_enable_missing: "{{ _pkglist_enable | difference(_pkg_dict | map(attribute='pkglist')) }}"
11 block:
12
13 - name: "Pkglist: Debug variables poudriere_debug={{ poudriere_debug }}"
14 when: poudriere_debug | bool
15 ansible.builtin.debug:
16 msg: |
17 _pkg_dict:
18 {{ _pkg_dict | to_nice_yaml(indent=2) | indent(2) }}
19 _pkglist_enable:
20 {{ _pkglist_enable | to_nice_yaml(indent=2) | indent(2) }}
21 poudriere_pkglist_dir: {{ poudriere_pkglist_dir }}
22 poudriere_pkglist_all: {{ poudriere_pkglist_all }}
23
24 - name: "Pkglist: Assert all items in _pkglist_enable are available in _pkg_dict"
25 ansible.builtin.assert:
26 quiet: "{{ poudriere_sanity_quiet }}"
27 that: _pkglist_enable_missing | length == 0
28 fail_msg: |
29 [ERR] The packages list(s): {{ _pkglist_enable_missing }} missing in _pkg_dict
30
31 - name: "Pkglist: Create directories."
32 ansible.builtin.file:
33 state: directory
34 path: "{{ item }}"
35 owner: "{{ poudriere_owner }}"
36 group: "{{ poudriere_group }}"
37 mode: "{{ poudriere_mode_dir }}"
38 loop:
39 - "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}"
40 - "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}.enabled"
41
42 - name: "Pkglist: Create packages lists in {{ poudriere_pkglist_dir ~ '/' ~ pkg_arch }}"
43 ansible.builtin.template:
44 src: poudriere.pkglist.j2
45 dest: "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}/{{ item.pkglist }}"
46 owner: "{{ poudriere_owner }}"
47 group: "{{ poudriere_group }}"
48 mode: "{{ poudriere_mode }}"
49 loop: "{{ _pkg_dict }}"
50 loop_control:
51 label: "{{ item.pkglist }}"
52
53 - name: "Pkglist: Remove not enabled lists from {{ poudriere_pkglist_dir ~ '/' ~ pkg_arch ~ '.enabled' }}"
54 ansible.builtin.file:
55 state: absent
56 path: "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}.enabled/{{ item.pkglist }}"
57 owner: "{{ poudriere_owner }}"
58 group: "{{ poudriere_group }}"
59 loop: "{{ _pkg_dict | rejectattr('pkglist', 'in', _pkglist_enable) }}"
60 loop_control:
61 label: "{{ item.pkglist }}"
62
63 - name: "Pkglist: Link enabled lists to {{ poudriere_pkglist_dir ~ '/' ~ pkg_arch ~ '.enabled' }}"
64 ansible.builtin.file:
65 state: link
66 src: "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}/{{ item.pkglist }}"
67 dest: "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}.enabled/{{ item.pkglist }}"
68 owner: "{{ poudriere_owner }}"
69 group: "{{ poudriere_group }}"
70 force: true
71 loop: "{{ _pkg_dict | selectattr('pkglist', 'in', _pkglist_enable) }}"
72 loop_control:
73 label: "{{ item.pkglist }}"
74
75 - name: "Pkglist: Create lists of all packages."
76 when: poudriere_pkglist_all | bool
77 ansible.builtin.template:
78 src: poudriere.pkglist.j2
79 dest: "{{ item.path }}"
80 owner: "{{ poudriere_owner }}"
81 group: "{{ poudriere_group }}"
82 mode: "{{ poudriere_mode }}"
83 loop:
84 - path: "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}/All"
85 packages: "{{ _pkg_dict | map(attribute='packages') | flatten | unique | sort }}"
86 - path: "{{ poudriere_pkglist_dir }}/{{ pkg_arch }}.enabled/All"
87 packages: "{{ _pkg_dict | selectattr('pkglist', 'in', _pkglist_enable) |
88 map(attribute='packages') | flatten | unique | sort }}"
89 loop_control:
90 label: "{{ item.path }}"
91
92# EOF
See also
<TBD>
options.yml
Synopsis: Create options file for each jail
Not implemented yes. Disabled poudriere_options: false
1---
2# Create options file for each jail.
3
4- name: "Options: Debug."
5 ansible.builtin.debug:
6 msg: Not implemented yet.
7
8# <TBD>
9# Optionally copy existing PORT_DBDIR to /usr/local/etc/poudriere.d/options
10# Create options file for each jail, e.g.
11# /usr/local/etc/poudriere.d/12amd64-options
12# /usr/local/etc/poudriere.d/12arm7-options
13
14# EOF
See also
<TBD>
make.yml
Synopsis: Customize make.
By default enabled poudriere_make: true
1---
2# Customize make.
3
4- name: "Make: Configure {{ poudriere_make_file }}"
5 ansible.builtin.template:
6 src: make.conf.j2
7 dest: "{{ poudriere_make_file }}"
8 owner: "{{ poudriere_owner }}"
9 group: "{{ poudriere_group }}"
10 mode: "{{ poudriere_mode }}"
11 backup: "{{ poudriere_backup_conf | bool }}"
12
13# See 10.5.10. Providing a Custom make.conf File
14# https://docs.freebsd.org/en/books/porters-handbook/testing-poudriere.html
15
16# <TBD> make.conf file for each jail, e.g.
17# /usr/local/etc/poudriere.d/12amd64-make.conf
18# /usr/local/etc/poudriere.d/12arm7-make.conf
19
20# EOF
See also
<TBD>