Spec-Zone.ru › Ansible

Управление хостами BSD с Ansible

Управление машинами BSD отличается от управления другими машинами на основе Unix. Если вы управляете узлами, работающими на BSD, ознакомьтесь с этими темами.

  • Подключение к узлам BSD
  • Настройка начальной конфигурации BSD
  • Установка интерпретатора Python

    • Пакеты и порты FreeBSD
    • INTERPRETER_PYTHON_FALLBACK
    • Отладка обнаружения Python
    • Дополнительные переменные
  • Какие модули доступны?
  • Использование BSD в качестве контрольного узла
  • Факты BSD
  • Усилия и вклад сообщества BSD

Подключение к узлам BSD

Ansible по умолчанию подключается к управляемым узлам с помощью OpenSSH. Это работает на BSD, если вы используете SSH-ключи для аутентификации. Однако, если вы используете SSH-пароли для аутентификации, Ansible полагается на sshpass. Большинство версий sshpass плохо справляются с запросами входа на BSD, поэтому при использовании SSH-паролей для машин BSD используйте paramiko для подключения вместо OpenSSH. Вы можете сделать это в ansible.cfg глобально или задать его как переменную инвентаризации/группы/узла. Например:

[freebsd]
mybsdhost1 ansible_connection=paramiko

Настройка начальной конфигурации BSD

Ansible по умолчанию работает без агентов, однако требует Python на управляемых узлах. Только модуль raw будет работать без Python. Хотя этот модуль можно использовать для настройки начальной конфигурации Ansible и установки Python на BSD-варианты (см. ниже), он очень ограничен, и использование Python необходимо для полноценного использования возможностей Ansible.

В следующем примере устанавливается Python, который включает библиотеку json, необходимую для полной функциональности Ansible. На вашей контрольной машине вы можете выполнить следующие действия для большинства версий FreeBSD:

ansible -m raw -a "pkg install -y python" mybsdhost1

Или для OpenBSD:

ansible -m raw -a "pkg_add python%3.8"

После этого вы можете использовать другие модули Ansible помимо модуля raw.

Примечание

В этом примере показано использование pkg на FreeBSD и pkg_add на OpenBSD, но вы должны сможете заменить соответствующий инструмент для пакетов для вашего варианта BSD; имя пакета также может отличаться. Обратитесь к списку пакетов или документации используемого вами варианта BSD для точного имени пакета Python, который вы хотите установить.

Установка интерпретатора Python

Для поддержки различных операционных систем и дистрибутивов на основе Unix Ansible не всегда может полагаться на существующую среду или переменные env для поиска правильного бинарника Python. По умолчанию модули указывают на /usr/bin/python , так как это самое распространённое расположение. На BSD-вариантах этот путь может отличаться, поэтому рекомендуется сообщить Ansible о расположении бинарника. См. INTERPRETER_PYTHON. Например, установите переменную инвентаризации ansible_python_interpreter:

[freebsd:vars]
ansible_python_interpreter=/usr/local/bin/python
[openbsd:vars]
ansible_python_interpreter=/usr/local/bin/python3.8

Пакеты и порты FreeBSD

В FreeBSD нет гарантии, что исполняемый файл /usr/local/bin/python или ссылка на исполняемый файл установлены по умолчанию. Лучшей практикой для удалённого хоста с точки зрения Ansible является установка по крайней мере версии Python, поддерживаемой Ansible, например, lang/python38, и обоих метапортов lang/python3 и lang/python. Цитирование из /usr/ports/lang/python3/pkg-descr:

This is a meta port to the Python 3.x interpreter and provides symbolic links
to bin/python3, bin/pydoc3, bin/idle3 and so on to allow compatibility with
minor version agnostic Python scripts.

Цитата из /usr/ports/lang/python/pkg-descr:

This is a meta port to the Python interpreter and provides symbolic links
to bin/python, bin/pydoc, bin/idle and so on to allow compatibility with
version agnostic python scripts.

В результате устанавливаются следующие пакеты:

shell> pkg info | grep python
python-3.8_3,2                 "meta-port" for the default version of Python interpreter
python3-3_3                    Meta-port for the Python interpreter 3.x
python38-3.8.12_1              Interpreted object-oriented programming language

и следующие исполняемые файлы и ссылки

shell> ll /usr/local/bin/ | grep python
lrwxr-xr-x  1 root  wheel       7 Jan 24 08:30 python@ -> python3
lrwxr-xr-x  1 root  wheel      14 Jan 24 08:30 python-config@ -> python3-config
lrwxr-xr-x  1 root  wheel       9 Jan 24 08:29 python3@ -> python3.8
lrwxr-xr-x  1 root  wheel      16 Jan 24 08:29 python3-config@ -> python3.8-config
-r-xr-xr-x  1 root  wheel    5248 Jan 13 01:12 python3.8*
-r-xr-xr-x  1 root  wheel    3153 Jan 13 01:12 python3.8-config*

INTERPRETER_PYTHON_FALLBACK

С версии 2.8 Ansible предоставляет полезную переменную ansible_interpreter_python_fallback для указания списка путей для поиска Python. См. INTERPRETER_PYTHON_FALLBACK. Этот список будет перебираться, и первый найденный элемент будет использован. Например, приведенная ниже конфигурация сделала бы установку мета-портов в предыдущем разделе излишней, то есть, если вы не установите мета-порты Python, первые два элемента в списке будут пропущены, и /usr/local/bin/python3.8 будет обнаружен.

ansible_interpreter_python_fallback=['/usr/local/bin/python', '/usr/local/bin/python3', '/usr/local/bin/python3.8']

Вы можете использовать эту переменную, продлённую для более ранних версий Python, и поместить её, например, в group_vars/all. Затем переопределите её для определённых групп в group_vars/{group1, group2, ...} и для определённых хостов в host_vars/{host1, host2, ...}, если необходимо. См. Приоритет переменных: Где следует поместить переменную?.

Отладка обнаружения Python

Например, с учётом инвентаризации

shell> cat hosts
[test]
test_11
test_12
test_13

[test:vars]
ansible_connection=ssh
ansible_user=admin
ansible_become=true
ansible_become_user=root
ansible_become_method=sudo
ansible_interpreter_python_fallback=['/usr/local/bin/python', '/usr/local/bin/python3', '/usr/local/bin/python3.8']
ansible_perl_interpreter=/usr/local/bin/perl

Ниже приведён плейбук

shell> cat playbook.yml
- hosts: test_11
  gather_facts: false
  tasks:
    - command: which python
      register: result
    - debug:
        var: result.stdout
    - debug:
        msg: |-
          {% for i in _vars %}
          {{ i }}:
            {{ lookup('vars', i)|to_nice_yaml|indent(2) }}
          {% endfor %}
      vars:
        _vars: "{{ query('varnames', '.*python.*') }}"

отображает детали

shell> ansible-playbook -i hosts playbook.yml

PLAY [test_11] *******************************************************************************

TASK [command] *******************************************************************************
[WARNING]: Platform freebsd on host test_11 is using the discovered Python interpreter at
/usr/local/bin/python, but future installation of another Python interpreter could change the
meaning of that path. See https://docs.ansible.com/ansible-
core/2.12/reference_appendices/interpreter_discovery.html for more information.
changed: [test_11]

TASK [debug] *********************************************************************************
ok: [test_11] =>
  result.stdout: /usr/local/bin/python

TASK [debug] *********************************************************************************
ok: [test_11] =>
  msg: |-
    ansible_interpreter_python_fallback:
      - /usr/local/bin/python
      - /usr/local/bin/python3
      - /usr/local/bin/python3.8

    discovered_interpreter_python:
      /usr/local/bin/python

    ansible_playbook_python:
      /usr/bin/python3

Вы можете видеть, что первый элемент из списка ansible_interpreter_python_fallback был обнаружен на удалённом хосте FreeBSD. Переменная ansible_playbook_python сохраняет путь к Python на контрольном узле Linux, на котором был запущен плейбук.

Что касается предупреждения, то цитата из INTERPRETER_PYTHON

The fallback behavior will issue a warning that the interpreter
should be set explicitly (since interpreters installed later may
change which one is used). This warning behavior can be disabled by
setting auto_silent or auto_legacy_silent. ...

Вы можете его проигнорировать или избавиться от него, задав переменную ansible_python_interpreter=auto_silent, так как это, на самом деле, то, что вы хотите, используя /usr/local/bin/python («интерпретаторы, установленные позднее, могут изменить, какой из них используется»). Например

shell> cat hosts
[test]
test_11
test_12
test_13

[test:vars]
ansible_connection=ssh
ansible_user=admin
ansible_become=true
ansible_become_user=root
ansible_become_method=sudo
ansible_interpreter_python_fallback=['/usr/local/bin/python', '/usr/local/bin/python3', '/usr/local/bin/python3.8']
ansible_python_interpreter=auto_silent
ansible_perl_interpreter=/usr/local/bin/perl

См. также

  • Обнаружение интерпретаторов
  • FreeBSD Вики: Порты/DEFAULT_VERSIONS

Дополнительные переменные

Если вы используете дополнительные плагины, помимо включённых в Ansible, вы можете установить аналогичные переменные для bash, perl или ruby, в зависимости от того, как написан плагин. Например:

[freebsd:vars]
ansible_python_interpreter=/usr/local/bin/python
ansible_perl_interpreter=/usr/local/bin/perl

Какие модули доступны?

Большинство основных модулей Ansible написаны для комбинации машин на основе Unix и других общих сервисов, поэтому большинство из них должны работать хорошо на BSD, за исключением очевидных случаев тех, которые предназначены для технологий, специфичных для Linux (таких как LVG).

Использование BSD в качестве контрольного узла

Использование BSD в качестве контрольной машины так же просто, как установка пакета Ansible для вашего варианта BSD или следование инструкциям pip или «из исходного кода».

Факты BSD

Ansible собирает факты с BSD аналогично машинам Linux, но так как данные, имена и структуры могут варьироваться для сети, дисков и других устройств, следует ожидать, что вывод будет немного отличаться, но при этом останется знакомым для администратора BSD.

Усилия и вклад сообщества BSD

Поддержка BSD важна для нас в Ansible. Хотя большинство наших участников используют и нацелены на Linux, у нас есть активное BSD-сообщество, и мы стремимся быть максимально дружественными к BSD. Пожалуйста, не стесняйтесь сообщать о любых проблемах или несовместимостях, которые вы обнаружите с BSD; Pull Request с включённым исправлением также приветствуются!

См. также

Введение в ад-хок команды

Примеры основных команд

Работа с плейбуками

Изучение языка управления конфигурацией Ansible

Нужно ли разрабатывать модуль?

Как писать модули

Связь

Есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство Ansible по общению

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/os_guide/intro_bsd.html

Spec-Zone.ru

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