Модуль Ansible RAW - файл Curl и JSON (Kubernetes) - PullRequest
0 голосов
/ 25 мая 2018

Мне нужно проанализировать атрибут JSON с именем keys_base64 с помощью curl.У меня есть возможность сделать это только с необработанным модулем Ansible.Это из-за проблемы, связанной с сетью.Я перепробовал много разных подходов, но потерян.Как мне заставить это работать?

Обновление: найден ответ

Исходное сообщение

** Пример ключей JSONобъект **

{"keys":["tony_01","tony_02","tony_03"],"keys_base64": 
["dG9ueV8wMQ==","dG9ueV8wMg==","dG9ueV8wMw=="],"root_token":"6c03bbce-eb8a-0af0-4e37-77e3a647d41d"}

** unseal.json **

{ "key": {{ item }} }

** Playbook **

- name: "Unseal Vault OCS"
  remote_user: Tony
  raw: curl -k -d@"{{ lookup('template','templates/unseal.json') }} https://{{ vault_ocs_pod_ip }}:8200/v1/sys/unseal"
  delegate_to: 10.x.x.10
  with_items: "{{ (vault_ocs_unseal_keys.stdout | from_json)['keys_base64'] }}"
  register: vault_ocs_unseal_result

Переменная playbook "vault_ocs_unseal_keys" содержитОбъект JSON.

** Выходные данные Playbook **

<10.x.x.10> ESTABLISH SSH CONNECTION FOR USER: quattro
<10.x.x.10> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=tony -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/%h-%r -tt 10.x.x.10 'curl -k -d - "{
  "key": gB2ZTK2V9Ch/9rOTenpz06u+p7t9qp5uKXEjqeCREEAZ
}
 https://10.x.x.98:8200/v1/sys/unseal"'
<10.x.x.10> (3, 'curl: (3) Illegal characters found in URL\r\n', 'Shared 
connection to 10.x.x.10 closed.\r\n')
failed: [localhost -> 10.x.x.10] 
(item=gB2ZTK2V9Ch/9rOTenpz06u+p7t9qp5uKXEjqeCREEAZ) => {
"changed": true,
"item": "gB2ZTK2V9Ch/9rOTenpz06u+p7t9qp5uKXEjqeCREEAZ",
"rc": 3

}

STDOUT:

curl: (3) Illegal characters found in URL

STDERR:

Shared connection to 10.x.x.10 closed.

MSG:

non-zero return code

Ответы [ 2 ]

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

Это работает для меня.Использовал команду curl без @, как уже упоминалось, она используется для чтения файлов.И я использовал run_once.Плагин поиска делает зацикливание.И ему нужны ключи, найденные в атрибуте keys_base64, чтобы применять для каждого ключа вызов API.Отлично!

**** Рабочий код ****

- name: "Unseal Vault OCS"
  remote_user: tony
  raw: "curl -k -d '{{ lookup('template','unseal.json') | to_json }}' https://10.x.x.1:8200/v1/sys/unseal"
  with_items: "{{ (vault_ocs_unseal_keys.stdout | from_json)['keys_base64'] | list }}"
  delegate_to: 10.x.x.2
  run_once: true
  register: vault_ocs_unseal_keys_result
0 голосов
/ 25 мая 2018

В этой задаче я обнаружил две проблемы:

  1. В curl @ предназначен для чтения файлов.Поскольку вы используете функцию поиска в Ansible, вы вставляете содержимое этой команды, нет необходимости читать файл.

  2. Двойные кавычки должны ограничивать данные JSON,без включения URL

Вот код, который работал для меня.Возможно, это не то же самое для вас, поскольку я жестко запрограммировал данные JSON:

- name: "Unseal Vault OCS"
  raw: curl -k -d "{{ lookup('template','unseal.json') }}" https://10.x.x.10/v1/sys/unseal
  with_items:
    - {"keys":["tony_01","tony_02","tony_03"],"keys_base64": ["dG9ueV8wMQ==","dG9ueV8wMg==","dG9ueV8wMw=="],"root_token":"6c03bbce-eb8a-0af0-4e37-77e3a647d41d"}
  register: vault_ocs_unseal_result
...