как запустить задачу, если определена только переменная - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующая задача:

-name : task name
 cron:
     ...
     ...
     ...     
 when:  "{{ vars[cname].cron }}" is defined

Я хочу запускать задачу, только если переменная server1.cron для хоста server1 и server2.cron для хоста server2 и т.д .. определена, но ansible не нравится синтаксис, когда я разрешаю только vars [cname] .cron, доступный с ou "", он не заменяет vars [cname] .cron на server1.cron или server2.cron, он интерпретирует его как переменную "vars [cname] .cron", которая не существует. Сталкивались ли вы с этой проблемой? Заранее спасибо ^^!

Ответы [ 2 ]

0 голосов
/ 21 января 2019

У меня есть в файле инвентаризации:

    server1-prod     cname=server1_prod
    server2-prdo    cname=server2_prod

......
.....

в моей роли у меня есть в VARS файл, подобный этому для каждого сервера: server1_pprod server2_pp и т. Д ... <== это имя файловкоторые находятся в role / vars / </p>

cron:
  job1:
        name: "******"
        job: "********"
        minute: "0"
        hour: "0"
        day: "*"
        month: "*"
        weekday: "*"
        disabled: "no"
        backup: yes
        job: "*******************************"


cron_special_time:
  job1:
        name: "******"
        special_time: "reboot"
        disabled: "yes"
        backup: yes
        job: "*****"
  job2:
        name: "*****"
        special_time: "reboot"
        disabled: "yes"
        backup: yes
        job: "*****"

Я включаю файл с этой задачей, чтобы у меня был variabl serveX_prod для каждого файла serverX_prod, который идет в ядро ​​serveX-prod в инвентаре

- name: Loading system cron  file to vars
  include_vars:
    file: "{{ cname }}"
    name: "{{ cname  }}"

затем я получаю доступ к переменной в задаче:

- name: Add system  cron jobs
  cron:
              .....
             ......
  with_dict:
        - "{{ vars[cname].cron }}"
   when:  "{{ vars[cname].cron }}" is defined

вы видите проблему в том, что я не могу поставить "" в предложении, и я не могу получить динамическую переменную без "", я запутался

0 голосов
/ 21 января 2019

Попробуйте это на:

---

- hosts: all
  gather_facts: False

  vars:
    my_vars:
      cname1:
        cron: "val1"
      cname2:
        cron2: "val2"

  tasks:
    - name: task name 1
      debug:
        msg: "test"
      when:  my_vars['cname1']['cron'] is defined

    - name: task name 2
      debug:
        msg: "test"
      when:  my_vars['cname2']['cron'] is defined

Вывод будет

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

TASK [task name 1] *******************************************************************************************************************************************
ok: [host] => {
    "msg": "test"
}

TASK [task name 2] *******************************************************************************************************************************************
skipping: [host]

PLAY RECAP ***************************************************************************************************************************************************
host                    : ok=1    changed=0    unreachable=0    failed=0

Или другой подход:

Инвентарь

[all]
staging cname=server1_prod
testing cname=server2_prod

Playbook:

---

- hosts: all
  gather_facts: False

  vars:
    my_vars:
      server1_prod:
        cron: "val1"
      server2_prod:
        cron2: "val2"

  tasks:
    - name: task name 1
      debug:
        msg: "test"
      when:  my_vars[cname]['cron'] is defined

Вы должны пропустить цитаты в разделе when.https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...