Spec-Zone.ru › Ansible

Руководство по фильтрам

Примечание

Плагины фильтров теперь включены в общую документацию по плагинам.

Фильтры

  • Руководство по фильтрам

    • фильтр vault_login_token

фильтр vault_login_token

Добавлено в версии 2.2.0.

Фильтр vault_login_token извлекает значение токена из структуры, возвращаемой операцией создания токена Vault, например, операциями, выполняемыми модулем community.hashi_vault.vault_login module или плагином lookup, либо модулем community.hashi_vault.vault_token_create module или плагином lookup.

Фильтр принимает необязательный параметр optional_field со значением по умолчанию login. Если это поле присутствует во входном словаре, его значение считается ответом на вход в систему, а не сам входной словарь.

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

Пример ответа на вход в систему:

{
    "auth": {
        "accessor": "mQewzgKRx5Yui1h1eMemJlMu",
        "client_token": "s.drgLxu6ZtttSVn5Zkoy0huMR",
        "entity_id": "8a74ffd3-f71b-8ebe-7942-610428051ea9",
        "lease_duration": 3600,
        "metadata": {
            "username": "testuser"
        },
        "orphan": true,
        "policies": [
            "alt-policy",
            "default",
            "userpass-policy"
        ],
        "renewable": true,
        "token_policies": [
            "alt-policy",
            "default",
            "userpass-policy"
        ],
        "token_type": "service"
    },
    "data": null,
    "lease_duration": 0,
    "lease_id": "",
    "renewable": false,
    "request_id": "511e8fba-83f0-4b7e-95ea-770aa19c1957",
    "warnings": null,
    "wrap_info": null
}

Токен, который нужно извлечь, находится в auth.client_token.

Пример использования с модулем и плагином lookup vault_login.

- name: Set defaults
  vars:
    ansible_hashi_vault_url: https://vault:9801/
    ansible_hashi_vault_auth_method: userpass
    ansible_hashi_vault_username: user
    ansible_hashi_vault_password: "{{ lookup('env', 'MY_SECRET_PASSWORD') }}"
  module_defaults:
    community.hashi_vault.vault_login:
      url: '{{ ansible_hashi_vault_url }}'
      auth_method: '{{ ansible_hashi_vault_auth_method }}'
      username: '{{ ansible_hashi_vault_username }}'
      password: '{{ ansible_hashi_vault_password }}'
  block:
    - name: Perform a login with a lookup and display the token
      vars:
        login_response: "{{ lookup('community.hashi_vault.vault_login') }}"
      debug:
        msg: "The token is {{ login_response | community.hashi_vault.vault_login_token }}"

    - name: Perform a login with a module
      community.hashi_vault.vault_login:
      register: login_response

    - name: Display the token
      debug:
        msg: "The token is {{ login_response | community.hashi_vault.vault_login_token }}"

Результат:

TASK [Perform a login with a lookup and display the token]  ********************************
ok: [localhost] => {
    "msg": "s.drgLxu6ZtttSVn5Zkoy0huMR"
}

TASK [Perform a login with a module]  *****************************************************
ok: [localhost] => {"changed": true, "login": {"auth": { "accessor": "mQewzgKRx5Yui1h1eMemJlMu",
"client_token": "s.drgLxu6ZtttSVn5Zkoy0huMR", "entity_id": "8a74ffd3-f71b-8ebe-7942-610428051ea9",
"lease_duration": 3600, "metadata": {"username": "testuser"}, "orphan": true, "policies":
["alt-policy", "default", "userpass-policy"], "renewable": true, "token_policies": ["alt-policy",
"default", "userpass-policy"], "token_type": "service"}, "data": null, "lease_duration": 0,
"lease_id": "", "renewable": false, "request_id": "511e8fba-83f0-4b7e-95ea-770aa19c1957",
"warnings": null, "wrap_info": null}}
}

TASK [Display the token]  *****************************************************************
ok: [localhost] => {
    "msg": "s.drgLxu6ZtttSVn5Zkoy0huMR"
}

Этот фильтр эквивалентен непосредственному чтению значения из словаря, но он имеет преимущества: придаёт операции семантический смысл и автоматически учитывает различия в результатах работы модулей и плагинов lookup.

---
lookup_token: "{{ lookup_login_response['auth']['client_token'] }}"
module_token: "{{ module_login_response['login']['auth']['client_token'] }}"

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

---
my_data:
  something: somedata
  vault_login: "{{ lookup_login_response }}"

token_from_param: "{{ my_data | community.hashi_vault.vault_login_token(optional_field='vault_login') }}"
token_from_deref: "{{ my_data['vault_login'] | community.hashi_vault.vault_login_token }}"
# if the optional field doesn't exist, the dictionary itself is still checked
unused_optional: "{{ my_data['vault_login'] | community.hashi_vault.vault_login_token(optional_field='missing') }}"

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/hashi_vault/docsite/filter_guide.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API