Встроенная зашифрованная переменная не поддерживает сериализацию в формате JSON

Я пытаюсь понять, как зашифровать отдельные переменные с хранилищем. Сначала я шифрую строку ansible-vault encrypt_string -n -p, затем я записываю вывод в мою пьесу. Когда я выполняю playbook, он говорит, что расшифрованная строка не поддерживает сериализацию в формате JSON.

Зашифрованная строка: "inline_name"Я также попробовал это с inline_name а также inlinenameкаждый раз с одинаковым результатом.

Моя пьеса

---
- name: Build System

  hosts: dev

  tasks:
  - name: Create 
    mysql_db:
      state: present
      name: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          39613261386438623937643062636166663638633062323939343734306334346537613233623064
          3761633832326365356231633338396132646532313861350a316666376566616633376238313636
          39343833306462323534623238333639663734626662623731666239366566643636386261643164
          3861363730336331660a316165633232323732633364346636363764623639356562336536636136
          6364
      login_host: "{{ mysql_host }}"
      login_user: "{{ mysql_user }}"
      login_password: "{{ mysql_pass }}"
  - name: Check if can access plain text vars
    debug:
      msg: "{{ my_plain_txt }}"

Сообщение об ошибке:

An exception occurred during task execution. To see the full traceback, use -vvv. 
The error was: TypeError: u'"inline_name"' is not JSON serializable
fatal: [127.0.0.1]: FAILED! => {"failed": true, "msg": "Unexpected failure during module execution.", "stdout": ""}

1 ответ

Решение

Добавьте переменную уровня задачи:

  - name: Create 
    mysql_db:
      state: present
      name: "{{ mysql_name }}"
      login_host: "{{ mysql_host }}"
      login_user: "{{ mysql_user }}"
      login_password: "{{ mysql_pass }}"
    vars:
      mysql_name: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          39613261386438623937643062636166663638633062323939343734306334346537613233623064
          3761633832326365356231633338396132646532313861350a316666376566616633376238313636
          39343833306462323534623238333639663734626662623731666239366566643636386261643164
          3861363730336331660a316165633232323732633364346636363764623639356562336536636136
          6364

Двойные кавычки могут объяснить эту ошибку, но не для меня. Посмотрите на всю ошибку / предупреждение, чтобы увидеть, что пытается разобрать json. В моем случае....

[ПРЕДУПРЕЖДЕНИЕ]: сбой при использовании метода (v2_runner_on_ok) в плагине обратного вызова (): u'secret_value'не сериализуемо в формате JSON

Более старый плагин обратного вызова AWX называется json.load и записывает предупреждение вместе с секретами в виде простого текста. Нужно было обновить.

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

ansible-vault encrypt_string yourgmailapppassword --name gmail_password

используйте вышеуказанный метод, чтобы зашифровать пароль приложения Gmail с помощью параметра строки ansible vault и определить зашифрованную переменную в playbook.

cat fetch-users-deatils.yml

    - name: Linux servers user audit report preparation
      hosts: "{{ HOSTS }}"
      roles:
        - user-collections
    
    - name: Refreshing user Dashboard & sending email from localhost
      hosts: localhost
      become: false
      vars:
       - gmail_password: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              62613232383962323430633831113465356231563163366235353034393230656331663436646233
              3266353862303738303737383530313664356135336661390a336562613436626665333833323030
              61393135643433313930643337363465343332353716333831222766376137396430426361663633
              6233313433633231320a663435636230636431643731333166366435346564316331323361633566
              38622138392437888466666535323432653034323936353961646233613437343831
      tasks:
        - name: Collecting the user details information and recreating the users dashboard
          script: dashboard_user.sh
          tags: user_dashboard
    
    
        - name: User Audit data output file stored on below location
          debug:
            msg:
             /tmp/user_collection/user_details.csv
    
        - name: 'Sending Ansible users report email'
          mail:
            host: smtp.gmail.com
            subtype: html
            port: 587
            password: "{{ gmail_password }}"
            to: abcdefghijkl@gmail.com
            from: abcdefghijkl@gmail.com
            username: abcdefghijkl@gmail.com
            subject: User details report
            attach: /tmp/user_collection/user_details.csv
            body: <pre> {{ lookup('file', '/tmp/user_collection/user_details.csv') }} </pre>
          delegate_to: localhost

Ниже приведена команда выполнения доступной playbook

ansible-playbook fetch-users-deatils.yml -e "HOSTS=all" --ask-vault-pass
Другие вопросы по тегам