Каков наилучший способ управления неподдерживаемыми дистрибутивами в роли Ansible? - PullRequest
0 голосов
/ 07 февраля 2020

Роль Ansible поддерживает Debian Stretch and Buster.

Невозможно выполнить работу на Jess ie или более старых версиях.

Какой самый лучший способ сказать пользователь, что роль не может использоваться в данной старой версии?

  • Ничего не делать в файле main.yml (управление версией дистрибутива с помощью объявлений when:)
  • Позвольте роли явный сбой при использовании модуля fail
  • Не проверять поддерживаемую версию дистрибутива и позволить задачам выполнить ошибку самостоятельно

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Разработчики должны поместить поддерживаемые / протестированные версии в файл Readme. Тогда пользователи должны всегда читать Readme. Тогда здравый смысл должен быть использован. Но мы все знаем, что это не так.

Вы можете настроить хосты, которые являются слишком старыми, пропустить роль, чтобы хосты не выполняли никаких команд для этой роли. Но способ go состоит в том, чтобы создать другую роль или обновить эту роль, чтобы эта книга воспроизведения поддерживала эту версию ОС.

Этот метод наименее желателен: Do not check for a supported distro version and let tasks fail themselves. Потому что, когда вы go идете по этому пути, на хосте выполняются некоторые неподдерживаемые задачи, и вы больше не можете гарантировать состояние системы. Короче говоря; вы создадите беспорядок.

Чтобы просто предотвратить кошмар, пусть игра провалится:

- name: fail when using older version
  fail:
    msg: "You fail because reason, woohoo"
  when: ansible_distribution is Ubuntu and ansible_distribution_version is 10.04
1 голос
/ 08 февраля 2020

Q: «Каков наилучший способ управления неподдерживаемыми дистрибутивами в роли Ansible?»

A: Хорошая идея закончить хост или играть, когда платформа и версия не поддерживается. В большинстве случаев это означает, что такая платформа и версия еще не были протестированы. Пользователь может добавить новую платформу и версию в метаданные, протестировать ее и при необходимости внести свой вклад в разработку.

В роли можно прочитать переменную galaxy_info из файла роли meta/main.yml и протестируйте поддерживаемые платформы и версии.

$ cat roles/role_1/meta/main.yml
galaxy_info:
  author: your name
  description: your role description
  company: your company (optional)
  license: license (GPL-2.0-or-later, MIT, etc)
  min_ansible_version: 2.9
  platforms:
    - name: Ubuntu
      versions:
        - bionic
        - cosmic
        - disco
        - eoan
  galaxy_tags: []
dependencies: []

Например, задачи в роли ниже

$ cat roles/role_1/tasks/main.yml
---

- name: Print OS and distro Ansible variables collected by setup
  debug:
    msg:
      - "ansible_os_family: {{ ansible_os_family }}"
      - "ansible_distribution: {{ ansible_distribution }}"
      - "ansible_distribution_major_version: {{ ansible_distribution_major_version }}"
      - "ansible_distribution_version: {{ ansible_distribution_version }}"
      - "ansible_distribution_release: {{ ansible_distribution_release }}"

- name: Include roles' meta data
  include_vars:
    file: "{{ role_path }}/meta/main.yml"

- name: Test the distribution is supported. End the host if not.
  set_fact:
    supported_distributions: "{{ galaxy_info.platforms|json_query('[].name') }}"
- debug:
    var: supported_distributions
- block:
    - debug:
        msg: "{{ ansible_distribution }} not supported. End of host."
    - meta: end_host
  when: ansible_distribution not in supported_distributions

- name: Test the release is supported. End the host if not.
  set_fact:
    supported_releases: "{{ (galaxy_info.platforms|
                            selectattr('name', 'match', ansible_distribution)|
                            list|first).versions }}"
- debug:
    var: supported_releases
- block:
    - debug:
        msg: "{{ ansible_distribution_release}} not supported. End of host."
    - meta: end_host
  when: ansible_distribution_release not in supported_releases

- name: The distribution and release is supported. Continue play.
  debug:
    msg: "{{ ansible_distribution }} {{ ansible_distribution_release }} is supported. Continue play."

с пьесой

- hosts: localhost
  gather_facts: true
  roles:
    - role_1

дают

    "msg": [
        "ansible_os_family: Debian", 
        "ansible_distribution: Ubuntu", 
        "ansible_distribution_major_version: 19", 
        "ansible_distribution_version: 19.04", 
        "ansible_distribution_release: disco"
    ]

    "supported_distributions": [
        "Ubuntu"
    ]

    "supported_releases": [
        "bionic", 
        "cosmic", 
        "disco", 
        "eoan"
    ]

    "msg": "Ubuntu disco is supported. Continue play."
...