Ansible разобрать json и прочитать результат в разные переменные - PullRequest
0 голосов
/ 09 мая 2018

Я создал задачу, которая запрашивает конечную точку мета-файла github api и возвращает следующее

{
  "verifiable_password_authentication": true,
  "github_services_sha": "f9e3a6b98d76d9964a6613d581164039b8d54d89",
  "hooks": [
    "192.30.252.0/22",
    "185.199.108.0/22",
    "140.82.112.0/20"
  ],
  "git": [
    "192.30.252.0/22",
    "185.199.108.0/22",
    "140.82.112.0/20",
    "13.229.188.59/32",
    "13.250.177.223/32",
    "18.194.104.89/32",
    "18.195.85.27/32",
    "35.159.8.160/32",
    "52.74.223.119/32"
  ],
  "pages": [
    "192.30.252.153/32",
    "192.30.252.154/32",
    "185.199.108.153/32",
    "185.199.109.153/32",
    "185.199.110.153/32",
    "185.199.111.153/32"
  ],
  "importer": [
    "54.87.5.173",
    "54.166.52.62",
    "23.20.92.3"
  ]
}

Что мне нужно сделать, так это получить 3 подключаемых IP-адреса и прочитать их каждый в свою переменную.

Я испробовал пару решений, которые нашел, но ничего, похоже, не работает для меня.

Я дошел до детализации json, поэтому мне возвращают только 3 IP-адреса, но как я могу получить их в переменные по отдельности?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018
---

- name: Query Github Meta API and get Hook Ips
  hosts: local
  connection: local
  vars:
    counter: 1
  tasks:

    - name: Query API
      uri:
        url: https://api.github.com/meta
        return_content: yes
      register: response

    - name: Populate Hook Variables
      set_fact:
        webhook_ip_{{counter}}: "{{ item }}"
        counter: "{{ counter | int + 1 }}"
      with_items:
        - "{{ response['json']['hooks'] }}"

    - name: print vars
      debug:
        msg: "Variable_1: {{ webhook_ip_1 }}, Variable_2: {{ webhook_ip_2 }}, Variable_3: {{ webhook_ip_3 }}"
0 голосов
/ 30 мая 2019

Работает с IP-адресами GitHub Webhook в цикле

- name: get request to github
  uri:
    url: "https://api.github.com/meta"
    method: GET
    return_content: yes
    status_code: 200
    headers:
      Content-Type: "application/json"
      #X-Auth-Token: "0010101010"
    body_format: json
  register: json_response

- name:  GitHub webhook IPs
  debug:
    msg: "{{ item }}"
  with_items: "{{ (json_response.content | from_json).hooks }}"


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

Я сделал снимок, используя синтаксис j2 в части имени переменной, и - TIL - похоже, что синтаксис jinja2 также разрешен в этой части!

см. Playbook для обработки списка hooks и присвоения переменных variable_1, variable_2, variable_3 и т. Д .:

- hosts: localhost
  gather_facts: false
  vars:
    counter: 1
    hooks:
    - 192.30.252.0/22
    - 185.199.108.0/22
    - 140.82.112.0/20

  tasks:
    - name: populate vars
      set_fact:
        variable_{{counter}}: "{{ item }}"
        counter: "{{ counter | int + 1 }}"
      with_items:
        - "{{ hooks }}"

    - name: print vars
      debug:
        msg: "variable_1: {{variable_1}}, variable_2: {{variable_2}}, variable_3: {{variable_3}}"

и вывод:

[root@optima-ansible ILIAS]# ansible-playbook 50257063.yml 

PLAY [localhost] ***********************************************************************************************************************************************************************************************************************

TASK [populate vars] *******************************************************************************************************************************************************************************************************************
ok: [localhost] => (item=192.30.252.0/22)
ok: [localhost] => (item=185.199.108.0/22)
ok: [localhost] => (item=140.82.112.0/20)

TASK [print vars] **********************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "variable_1: 192.30.252.0/22, variable_2: 185.199.108.0/22, variable_3: 140.82.112.0/20"
}

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

[root@optima-ansible ILIAS]# 

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

UPDATE:

что-то странное, что я заметил - тоже TIL - это то, что если вы перевернете строки:

variable_{{counter}}: "{{ item }}"
counter: "{{ counter | int + 1 }}"

до:

counter: "{{ counter | int + 1 }}"
variable_{{counter}}: "{{ item }}"

вы все равно получите те же имена переменных, от _1 до _3, в то время как я ожидал бы получить от _2 до _4.

Полагаю, что ANSI-циклы ведут себя не так, как ожидалось, от других языков программирования.

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