Синтаксис и логика c в Ansible playbook - PullRequest
1 голос
/ 02 апреля 2020

В моем файле Orchestration я определяю переменные "secret_name" и "vault_name" следующим образом:

- hosts: host1
  roles:
   - role: launch-playbook 
     playbook_name:  '{{playbook_dir}}/{{Pos_playbook}}'
     secret_name:
     vault_name:

Как вы можете видеть, secret_name и vault_name не определены (без значений). Однако, когда я распечатываю команду, она обнаруживает, что имя_секрета и имя_хранилища действительно существуют.

Я запускаю команду:

- set_fact:
 execution_command: "ansible-playbook -i {{inventory_file}} {{playbook_name}} {% if secret_name is defined %} 
-e {{secret_name}} {% else %} {% endif %} {% if vault_name is defined %} --vault-password-file {{vault_name}} {% else %} {% endif %}"

И вот вывод:

ok: [web1] => {
"msg": "The execution_command is !ansible-playbook -i /fndusers/fnd/users/pkiadm/itay/backing-services/tbs_orchestration/playbook/inventory_itay.yml /fndusers/fnd/users/pkiadm/users/tanya/t2/PostgreSQL/pg_orchestartion.yaml
-e    --vault-password-file  !"
}

"-e" и "--vault-password-file" не должны быть там !! Так как значения секрета и хранилища не определены !! но он учитывает их так же, как они существуют, и их значения равны "".

Я не могу найти, что не так с моим синтаксисом / logi c?

1 Ответ

1 голос
/ 02 апреля 2020

Q: "Они (переменные) существуют, и их значения" ". Я не могу найти, что не так с моим синтаксисом / logi c?"

A: Синтаксис правильный. Объекты типа NoneType существуют. Например,

  vars:
    vault_name:
  tasks:
    - debug:
        msg: "Variable vault_name: {{ vault_name }}"
      when: vault_name is defined

give

    "msg": "Variable vault_name: "

Правильный лог c может быть для проверки, является ли переменная непустой строкой. Например,

    - debug:
        var: vault_name
      when:
        - vault_name is string
        - vault_name|length > 0

Это будет означать, что Jinja

{% if (vault_name is string) and (vault_name|length > 0) %}
...