【问题标题】:Lookup secrets from AWS secret manager | Ansible从 AWS 机密管理器中查找机密 | Ansible
【发布时间】:2019-09-13 14:30:40
【问题描述】:

使用我在 AWS Secrets Manager 中创建的 Other type of secrets 使用 Terraform 代码。 我需要在 Ansible 代码中使用这些 AWS 机密。我在下面的链接中找到了这个,但我无法继续。

https://docs.ansible.com/ansible/2.8/plugins/lookup/aws_secret.html

我有以下 Ansible 代码:-

database.yml

- name: Airflow | DB | Create MySQL DB
  mysql_db:
    login_user: "{{ mysql_user }}"
#    login_password: "{{ mysql_root_password }}"
    login_password: "{{ lookup('ca_dev', 'mysql_root_password') }}"
#    config_file: /etc/my.cnf
#    login_unix_socket: /var/lib/mysql/mysql.sock
#    encrypted: yes
    name: "airflow"
    state: "present"

如何将 AWS Secret Manager 合并到我的 ansible 代码中?

错误信息:-

TASK [../../roles/airflow : Airflow | DB | Create MySQL DB] **************************************************************************************************************************************************************************
task path: /home/ec2-user/cng-ansible/roles/airflow/tasks/database.yml:25
The full traceback is:
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 140, in run
    res = self._execute()
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 539, in _execute
    self._task.post_validate(templar=templar)
  File "/usr/lib/python2.7/site-packages/ansible/playbook/task.py", line 267, in post_validate
    super(Task, self).post_validate(templar)
  File "/usr/lib/python2.7/site-packages/ansible/playbook/base.py", line 364, in post_validate
    value = templar.template(getattr(self, name))
  File "/usr/lib/python2.7/site-packages/ansible/template/__init__.py", line 540, in template
    disable_lookups=disable_lookups,
  File "/usr/lib/python2.7/site-packages/ansible/template/__init__.py", line 495, in template
    disable_lookups=disable_lookups,
  File "/usr/lib/python2.7/site-packages/ansible/template/__init__.py", line 746, in do_template
    res = j2_concat(rf)
  File "<template>", line 8, in root
  File "/usr/lib/python2.7/site-packages/jinja2/runtime.py", line 193, in call
    return __obj(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/ansible/template/__init__.py", line 631, in _lookup
    instance = self._lookup_loader.get(name.lower(), loader=self._loader, templar=self)
  File "/usr/lib/python2.7/site-packages/ansible/plugins/loader.py", line 381, in get
    obj = getattr(self._module_cache[path], self.class_name)
AttributeError: 'module' object has no attribute 'LookupModule'

fatal: [127.0.0.1]: FAILED! => {
    "msg": "Unexpected failure during module execution.", 
    "stdout": ""
}

RUNNING HANDLER [../../roles/airflow : restart rabbitmq-server] 
task path: /home/ec2-user/cng-ansible/roles/airflow/handlers/main.yml:28
    to retry, use: --limit @/home/ec2-user/cng-ansible/plays/airflow/installAirflow.retry

PLAY RECAP
127.0.0.1                  : ok=39   changed=7    unreachable=0    failed=1

ansible-doc -t lookup -l 输出

【问题讨论】:

  • 我会删除底部的快速问题,这会使问题本身过于宽泛
  • @HermanTheGermanHesse 完成
  • 您能否编辑您的问题并详细说明“我无法继续”(您尝试了什么,结果/错误消息/日志等......)?使用 aws_secret 查找似乎正是您所需要的。同时,请注意这个模块似乎只在 ansible 2.8 中可用(你在使用这个版本吗?)
  • @Zeitounator 我仍然没有为此编写任何代码。因为 Ansible 2.8 的发布日期是 2019 年 5 月 16 日。我没有任何步骤可以将 ansible 2.7.10 升级到 2.8
  • 您不能使用尚未包含在您的 ansible 安装中的模块。如需提前测试,请查看how to install a branch/tag from git with pip。您可以使用stable-2.8 分支或现有标签之一(2.8.0a12.8.0b1)。 The release is scheduled of may 16th.

标签: ansible ansible-2.x aws-secrets-manager


【解决方案1】:

错误{"msg": "lookup plugin (ca_dev) not found"} 表明您的问题是滥用lookup 命令。

下面一行:

login_password: "{{ lookup('ca_dev', 'mysql_root_password') }}"

应该看起来像

login_password: "{{ lookup('aws_secret', 'mysql_root_password') }}"

ca_dev 不是有效的查找类型,而aws_secret 是。

您可以在官方文档的Lookup Plugins 部分查看 Ansible 2.8 支持的查找插件列表。

如果您使用自定义查找插件,或将插件从未来版本的 ansible 反向移植到旧版本,您必须确保它位于 ansible 可见的目录中。

您可以将自定义文件放在~/.ansible/plugins/lookup:/usr/share/ansible/plugins/lookup 中的默认位置 ansible 外观中,也可以使用默认部分下的以下 lookup_plugins ini 键将您的 ansible.cfg 配置为在其他位置查找。

DEFAULT_LOOKUP_PLUGIN_PATH
Description:    Colon separated paths in which Ansible will search for Lookup Plugins.
Type:   pathspec
Default:    ~/.ansible/plugins/lookup:/usr/share/ansible/plugins/lookup
Ini Section:    defaults
Ini Key:    lookup_plugins
Environment:    ANSIBLE_LOOKUP_PLUGINS

可以在官方文档的Ansible Configuration 部分找到相关文档

【讨论】:

  • 类似错误TASK [../../roles/airflow : Airflow | DB | Create MySQL DB] fatal: [127.0.0.1]: FAILED! =&gt; {"msg": "lookup plugin (aws_secret) not found"}
  • ansible --version 的输出是什么?或者,在运行 ansible-doc -t lookup -l 后,您是否会在可用插件列表中看到 aws_secret
  • 我在 ansible/modules/cloud/amazon/ 路径下添加了 aws_secret.py。 https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/cloud/amazon/aws_secret.py
  • 运行ansible-doc -t lookup -l时在识别插件列表中看到了吗
  • ansible-doc -t lookup -l 输出有问题。
猜你喜欢
  • 2020-11-25
  • 2018-11-27
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2022-01-26
  • 2020-05-22
  • 2022-01-23
  • 2021-03-08
相关资源
最近更新 更多