Spec-Zone.ru › Ansible

Обработчики

Утилита iocage внутренне открывает консоль jail, чтобы получить DHCP-адрес jail. Для этого требуются права root. Если выполнить команду iocage list -l от имени непривилегированного пользователя, вы увидите сообщение DHCP (running -- address requires root). Если у вас нет прав root, используйте /etc/dhclient-exit-hooks. Например, в jail srv_1 создайте файл /zroot/iocage/jails/srv_1/root/etc/dhclient-exit-hooks

case "$reason" in
    "BOUND"|"REBIND"|"REBOOT"|"RENEW")
    echo $new_ip_address > /var/db/dhclient-hook.address.$interface
    ;;
esac

где /zroot/iocage — активированный пул.

shell> zfs list | grep /zroot/iocage
zroot/iocage                                4.69G   446G  5.08M  /zroot/iocage
zroot/iocage/download                        927M   446G   384K  /zroot/iocage/download
zroot/iocage/download/14.1-RELEASE           465M   446G   465M  /zroot/iocage/download/14.1-RELEASE
zroot/iocage/download/14.2-RELEASE           462M   446G   462M  /zroot/iocage/download/14.2-RELEASE
zroot/iocage/images                          384K   446G   384K  /zroot/iocage/images
zroot/iocage/jails                           189M   446G   480K  /zroot/iocage/jails
zroot/iocage/jails/srv_1                    62.9M   446G   464K  /zroot/iocage/jails/srv_1
zroot/iocage/jails/srv_1/root               62.4M   446G  3.53G  /zroot/iocage/jails/srv_1/root
zroot/iocage/jails/srv_2                    62.8M   446G   464K  /zroot/iocage/jails/srv_2
zroot/iocage/jails/srv_2/root               62.3M   446G  3.53G  /zroot/iocage/jails/srv_2/root
zroot/iocage/jails/srv_3                    62.8M   446G   464K  /zroot/iocage/jails/srv_3
zroot/iocage/jails/srv_3/root               62.3M   446G  3.53G  /zroot/iocage/jails/srv_3/root
zroot/iocage/log                             688K   446G   688K  /zroot/iocage/log
zroot/iocage/releases                       2.93G   446G   384K  /zroot/iocage/releases
zroot/iocage/releases/14.2-RELEASE          2.93G   446G   384K  /zroot/iocage/releases/14.2-RELEASE
zroot/iocage/releases/14.2-RELEASE/root     2.93G   446G  2.88G  /zroot/iocage/releases/14.2-RELEASE/root
zroot/iocage/templates                       682M   446G   416K  /zroot/iocage/templates
zroot/iocage/templates/ansible_client        681M   446G   432K  /zroot/iocage/templates/ansible_client
zroot/iocage/templates/ansible_client/root   681M   446G  3.53G  /zroot/iocage/templates/ansible_client/root

См.: man dhclient-script

Создайте конфигурацию инвентаря. Используйте параметр hooks_results вместо sudo:

shell> cat hosts/02_iocage.yml
plugin: community.general.iocage
host: 10.1.0.73
user: admin
hooks_results:
  - /var/db/dhclient-hook.address.epair0b

Примечание

Параметр hooks_results предполагает, что пул смонтирован в /poolname. Например, если активировать пул iocage, этот плагин ожидает найти элементы hooks_results по пути /iocage/iocage/jails/<name>/root. Если пул смонтирован в другой путь, проще всего создать символическую ссылку.

На контроллере от имени администратора отобразите инвентарь:

shell> ansible-inventory -i hosts/02_iocage.yml --list --yaml
all:
  children:
    ungrouped:
      hosts:
        srv_1:
          iocage_basejail: 'no'
          iocage_boot: 'off'
          iocage_hooks:
          - 10.1.0.183
          iocage_ip4: '-'
          iocage_ip4_dict:
            ip4: []
            msg: DHCP (running -- address requires root)
          iocage_ip6: '-'
          iocage_jid: '204'
          iocage_release: 14.2-RELEASE-p3
          iocage_state: up
          iocage_template: ansible_client
          iocage_type: jail
        srv_2:
          iocage_basejail: 'no'
          iocage_boot: 'off'
          iocage_hooks:
          - 10.1.0.204
          iocage_ip4: '-'
          iocage_ip4_dict:
            ip4: []
            msg: DHCP (running -- address requires root)
          iocage_ip6: '-'
          iocage_jid: '205'
          iocage_release: 14.2-RELEASE-p3
          iocage_state: up
          iocage_template: ansible_client
          iocage_type: jail
        srv_3:
          iocage_basejail: 'no'
          iocage_boot: 'off'
          iocage_hooks:
          - 10.1.0.169
          iocage_ip4: '-'
          iocage_ip4_dict:
            ip4: []
            msg: DHCP (running -- address requires root)
          iocage_ip6: '-'
          iocage_jid: '206'
          iocage_release: 14.2-RELEASE-p3
          iocage_state: up
          iocage_template: ansible_client
          iocage_type: jail

Составьте переменную ansible_host. Например, hosts/02_iocage.yml может выглядеть так:

plugin: community.general.iocage
host: 10.1.0.73
user: admin
hooks_results:
  - /var/db/dhclient-hook.address.epair0b
compose:
  ansible_host: (iocage_hooks.0 == '-') | ternary(iocage_ip4, iocage_hooks.0)

Проверьте jail. Создайте плейбук pb-test-uname.yml:

- hosts: all
  remote_user: admin

  vars:

    ansible_python_interpreter: auto_silent

  tasks:

    - command: uname -a
      register: out

    - debug:
        var: out.stdout

См.: Управление узлами BSD с помощью Ansible

Запустите плейбук:

shell> ansible-playbook -i hosts/02_iocage.yml pb-test-uname.yml

PLAY [all] **********************************************************************************************************

TASK [command] ******************************************************************************************************
changed: [srv_3]
changed: [srv_1]
changed: [srv_2]

TASK [debug] ********************************************************************************************************
ok: [srv_1] =>
    out.stdout: FreeBSD srv-1 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64
ok: [srv_3] =>
    out.stdout: FreeBSD srv-3 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64
ok: [srv_2] =>
    out.stdout: FreeBSD srv-2 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64

PLAY RECAP **********************************************************************************************************
srv_1                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
srv_2                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
srv_3                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Примечание: этот плейбук и конфигурация инвентаря также работают с jail с общим IP-адресом.

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/general/docsite/guide_iocage_inventory_hooks.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API