Tasks

main.yml

Synopsis: Main task.

Import tasks if enabled.

[tasks/main.yml]

 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

[tasks/debug.yml]

 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

[tasks/pkg.yml]

 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

[tasks/dirs.yml]

 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

[tasks/key.yml]

 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

[tasks/cert.yml]

 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

[tasks/conf.yml]

 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

[tasks/pkglists.yml]

 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

[tasks/pkglist.yml]

 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

[tasks/options.yml]

 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

[tasks/make.yml]

 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>