Возможная зависимость с пользовательским условием - PullRequest
0 голосов
/ 17 мая 2018

Я хочу добавить одну роль в моих зависимостях playbook, но на основе условия.

- name: Get all install pyenv versions
  command: '{{ pyenv_root }}bin/pyenv versions'
  register: available_versions
  tags:
      - get_pyenv_versions
  environment:
      PYENV_ROOT: "{{ pyenv_root }}"

dependencies:
    - { role: pyenv, python_versions: ["{{ mypython_version }}"], when: "mypython_version not in available_versions.stdout" }

То, что я хочу сделать, это, я хочу проверить, все доступные pyenv версии, если mypython_version недоступно, то только я хочу вызвать pyenv роль, в противном случае я не хочу вызывать это.

Это дает мне синтаксическую ошибку

ERROR! Syntax Error while loading YAML.


The error appears to have been in '/root/ansible_playbooks/roles/mydeployment/meta/main.yaml': line 9, column 1, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


dependencies:
^ here

exception type: <class 'yaml.parser.ParserError'>
exception: while parsing a block collection
  in "<unicode string>", line 1, column 1
did not find expected '-' indicator
  in "<unicode string>", line 9, column 1

Как я могу определить переменную get_pyenv_versions и использовать в моем dependencies как условие?

1 Ответ

0 голосов
/ 17 мая 2018

Чтобы правильно определить зависимости в роли, вам необходимо:

Определить вашу зависимость /meta/main.yml под вашей ролью:

dependencies:
  - role: pyenv
    when: mypython_version not in versions

Вы должны вызывать свою роль из своейplay:

---
- name: Role Dependency
  hosts: localhost
  gather_facts: False

tasks:
  - name: Get all install pyenv versions
    command: '{{ pyenv_root }}bin/pyenv versions'
    register: available_versions
    environment:
      PYENV_ROOT: "{{ pyenv_root }}"

roles:
  - role: mydeployment
    pyenv_version : "{{ mypython_version }}"
    versions      : "{{ available_versions.stdout }}"

Еще один пример в моей песочнице:

---
- name: Role Dependency
  hosts: localhost
  gather_facts: False

  roles:
  - role: role2
    role1 : "Heyr"

Мета:

dependencies:
  - role: role1
    when: role1 == "Hey"

Результаты:

PLAY [Role Dependency] *******************************************************************************************************

TASK [role1 : Debug] *********************************************************************************************************
skipping: [localhost]

TASK [role2 : Debug] *********************************************************************************************************
ok: [localhost] => {
    "msg": "Hello2"
}

Но когдапеременная в порядке:

---
- name: Role Dependency
  hosts: localhost
  gather_facts: False

  roles:
  - role: role2
    role1 : "Heyr"

Результат:

TASK [role1 : Debug] *********************************************************************************************************
ok: [localhost] => {
    "msg": "Hello1"
}

TASK [role2 : Debug] *********************************************************************************************************
ok: [localhost] => {
    "msg": "Hello2"
}

Надеюсь, это поможет

...