Невозможно получить секреты хранилища в Ansible - PullRequest
0 голосов
/ 04 января 2019

У меня проблемы с чтением секретов из хранилища с использованием файлов динамической инвентаризации VMware.

Инвентарь:
https://github.com/ansible/ansible/blob/devel/contrib/inventory/vmware_inventory.ini (используя его как vmware.yml в моей структуре каталогов Ansible)
https://github.com/ansible/ansible/blob/devel/contrib/inventory/vmware_inventory.py

Обновлено несколько строк в скрипте динамической инвентаризации ( vmware_inventory.py - # L213) для чтения переменных -

'ini_path': os.path.join(os.path.dirname(__file__), '../group_vars/vmware/vmware.yml'),

Структура каталога Ansible:

ansible/
  inventory/
    vmware_inventory.py
  group_vars/
    all_vars.yml                 
    vmware/
     vmware.yml
     vault.yml                    
  roles/

Я могу пропинговать все хосты, используя - ansible all -i vmware_inventory.py -m ping

Пробная версия A:
Зашифровать значение пароля с помощью ansible-vault encrypt_string password123 --name 'password' --ask-vault-pass.Обновите vmware.yml с зашифрованным паролем.

cat vmware.yml

server: vcsa.lab
port: 443
username: devuser
password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          62616231653730653366633966626531383362323165643034336533356165626166313466396462
          3866363332663963366231636230646465363530666366320a346539343366663135353639646234
          65363163386136636662356534343430663133313865333731336230373437663230356361373363
          3434633132343731370a393139383464306432626638633837333030623539653462343230373562
          6433
validate_certs: False

Ошибка:

vmware_inventory.py) произошла ошибка выполнения: Невозможно выполнитьподключиться к серверу ESXi из-за (vim.fault.InvalidLogin) {dynamicType =, dynamicProperty = (vmodl.DynamicProperty) [], msg = 'Невозможно завершить вход в систему из-за неверного имени пользователя или пароля.', faultCause =, faultMessage = (vmodl.LocalizableMessage) []}

Пробная версия B: по этой ссылке
Создание файла хранилища ansible (ansible-vault create ../group_vars/ vmware / vault), добавьте его в виде простого текста и прочитайте это значение в файле vmware.yml

cat vmware.yml

server: vcsa.lab
port: 443
username: dev
password: "{{ vault_password}}"
validate_certs: False

, но по-прежнему возникает ошибка с той же ошибкой

Невозможно завершить вход в систему из-за неверного имени пользователя или пароля.

Но я могу выполнить ту же команду с простым текстом без шифрования пароля с помощью хранилища.

Env:

 ansible 2.7.0
      python version = 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

Любой человек может помочь найти его 'идет не так?очень ценю вашу помощь!

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Если я правильно прочитал, вы используете сводный файл в group_vars, и у вас также есть некоторые переменные, определенные в вашем файле инвентаря.Если это так, то в файле ansible переменные файла инвентаризации имеют приоритет над group_vars в приоритетном порядке, и есть вероятность, что ваша переменная хранилища будет переопределена значением в Inventory. Здесь - это ссылка с правильным порядком

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

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

ansible <name-of-your-target-host> -i vmware_inventory.py -m debug -a "msg={{ password }}"

Вы должны выполнить вышеупомянутое на целевом хосте так, чтобы group_vars / host_vars были приняты во внимание.

Надеюсь, что этопомогает!

0 голосов
/ 11 марта 2019

Вы пытались отлаживать зашифрованные значения.

Для отладки можно использовать приведенный ниже код.

    ansible-vault encrypt_string password123 --name 'password'
    New Vault Password: test
    Confirm New Vault Password: test
    --> Copy the generated string to the play as below
    ---
    - name: test
      hosts: localhost
      vars:
        password: !vault |
                  $ANSIBLE_VAULT;1.1;AES256
                  35366238333361633133643238666132353564393838306662316139663037666664316461366437
                  6434386663373838303766643034653832636363313237300a356533396138643531353434386564
                  66643239346365656631646335613764366136643137666533393031346238633363373662623964
                  3330396530633331640a626430666335303439653330646565616131376630373932653264386363
                  3239
      tasks:
        - name: debug password
          debug:
            msg: "{{ password }}"

--- для выполнения воспроизведения

ansible-playbook test2.yml --vault-id password@prompt
Vault password (password): test
...