Как использовать закодированное значение в playbook и декодировать его при необходимости в ansible playbook? - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь использовать ansible -pull метод для запуска playbooks с дополнительными переменными во время выполнения playbooks.

Вот как мне нужно было запустить мою playbook с переменными.

ansible-playbook decode.yml --extra-vars "host_name=xxxxxxx  bind_password=xxxxxxxxx swap_disk=xxxxx"

В bind_password будет закодировано значение пароля администратора. и я попытался написать ниже playbook для него.

Я могу отладить каждое значение и получить его правильно, но после расшифровки пароля не получается точное значение или я не уверен, правильно ли я делаю это или нет?

---

- name: Install and configure AD authentication
  hosts: test
  become: yes
  become_user: root

vars:
   hostname: "{{ host_name }}"
   diskname: "{{ swap_disk }}"
   password: "{{ bind_password }}"

tasks:

  - name: Ansible prompt example.
    debug:
     msg: "{{ bind_password }}"

  - name: Ansible prompt example.
    debug:
     msg: "{{ host_name }}"

  - name: Ansible prompt example.
    debug:
     msg: "{{ swap_disk }}"

  - name: Setup the hostname 
    command: hostnamectl set-hostname --static "{{ host_name }}" 

  - name: decode passwd
    command: export passwd=$(echo "{{ bind_password }}" | base64 --decode)

  - name: print decoded password
    shell: echo "$passwd"
    register: mypasswd

  - name: debug decode value
    debug: 
      msg: "{{ mypasswd }}"

но в то время как мы можем декодировать значение base64 с помощью команды:

echo "encodedvalue" | base64 --decode

Как я могу запустить этот playbook с ansible -pull.

позже я хочу преобразуйте эту пьесу в роли (role1) и затем запустите ее, как показано ниже:

Как мы можем запустить ролевую пьесу, используя ansible -pull?

1 Ответ

1 голос
/ 10 января 2020

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

Но ansible создает соединение s sh для каждой задачи, поэтому каждая задача оболочки / команды начинается с новой сессии. Поэтому экспорт env var в одну командную задачу и использование этого env var в следующей задаче оболочки никогда не сработают.

Более того, почему вы хотите обрабатывать все это с таким количеством задач команд / оболочек, когда у вас есть все необходимые инструменты прямо в ansible? Вот возможное переписывание ваших последних 3 задач, которые вписываются в одну.

  - name: debug decoded value of bind_password
    debug: 
      msg: "{{ bind_password | b64decode }}"
...