Чтение переменной из файла JSON на удаленном хосте и использование ее в качестве условия для задачи в ANSIBLE PlayBook - PullRequest
0 голосов
/ 23 января 2019

У меня есть куча JSON-файлов на hostA.Я запускаю playbook на моем сервере разработки.Моя цель - прочитать переменные из файлов JSON на hostA и использовать переменную в качестве условия в моей книге воспроизведения для выполнения других задач.Я могу прочитать файл JSON на моем сервере разработки с помощью include_vars и использовать переменную в качестве условия для выполнения задачи.Однако у меня возникли проблемы с чтением файла JSON на хосте A.Похоже, что include_vars работает только для localhost.Есть ли другой модуль, который я могу использовать для достижения своей цели?Моя пьеса выглядит так:

---
- hosts: hostA
  tasks:      
    - include_vars: 
         file: /mypath/myfile.json
         name: my_var

    - name: Create file if var_a in json file is less than 5
      file:
         path: /mypath/myfile
         state: touch
      when: '"{{ my_var.var_a|int }}" < 5' 

Ответы [ 2 ]

0 голосов
/ 09 августа 2019

Подход с использованием fetch и include_vars не будет работать одновременно для более чем одной машины, так как вы не сможете разделять факты на машину.

Вместо этого вы можете рассмотреть возможность использования фактов для достижения своей цели. Ниже я создал скрипт в /etc/ansible/facts.d на удаленном компьютере (например, hostA) и сделал его исполняемым для всех:

$ cd /etc/ansible/facts.d
$ chmod 0755 example.fact
$ cat example.fact

#!/usr/bin/env python
import json
kv = {'mykey': 'myvalue'}
print json.dumps(kv)

когда я запускаю его, он выдает json

$ ./example.fact
{"mykey": "myvalue"}

Добавьте это к своей роли или книге игр - все сценарии будут запущены в /etc/ansible/facts.d

.
- name: read local facts
  setup:
    filter: ansible_local

И убедитесь, что вы получили то, что хотели

- name: debug
  debug:
    var: ansible_local.example

Ansible output:

ok: [hostA] => {
    "ansible_local.example": {
        "mykey": "myvalue"
    }
}

Если вы хотите прочитать пользовательские значения с вашего удаленного компьютера в исполнении playbook, все, что вам сейчас нужно, это изменить скрипт example.fact, чтобы он использовал информацию и выдавал ее в виде json, например:

with open('/tmp/info.json') as json_file:
    myinfo = json.load(json_file)

print json.dumps(myinfo)
0 голосов
/ 23 января 2019

получить файл и использовать его в include_vars .

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