【发布时间】:2020-10-14 23:50:17
【问题描述】:
我正在尝试使用 Ansible 在多个现有 AWS EC2 实例上安装应用程序,这些实例在不同的 Linux 操作系统上使用许多不同的 SSH 密钥和用户名。由于现有实例的状态不断变化,我正尝试按照推荐的方式通过 aws_ec2 库存插件使用 Ansible 的动态库存。
我可以按key_name 对主机进行分组,但现在需要根据组使用相关的 SSH 密钥和用户名对此清单运行 Ansible playbook,其结构如下面来自 ansible-inventory -i inventory.aws_ec2.yml --graph 的示例输出:
@all:
|--@_SSHkey1:
| |--hostnameA
| |--hostnameB
|--@_SSHkey2:
| |--hostnameC
|--@_SSHkey3:
| |--hostnameD
| |--hostnameE
| |--hostnameF
|--@aws_ec2:
| |--hostnameA
| |--hostnameB
| |--hostnameC
| |--hostnameD
| |--hostnameE
| |--hostnameF
|--@ungrouped:
我已尝试使用上面列出的组创建单独的主机文件(如下所示),提供相关 SSH 密钥的路径,但我不确定您将如何将其与动态清单一起使用。
[SSHkey1]
ansible_user=ec2-user
ansible_ssh_private_key_file=/path/to/SSHkey1
[SSHkey2]
ansible_user=ubuntu
ansible_ssh_private_key_file=/path/to/SSHkey2
[SSHkey3]
ansible_user=ec2-user
ansible_ssh_private_key_file=/path/to/SSHkey3
这在 Ansible 官方文档 here 和 here 中没有解释,但应该是一个常见的用例。我发现的许多文档都提到了使用 Python 脚本 (ec2.py) 使用动态库存的旧方法,该方法已被弃用,因此不再相关(例如 this AWS post)。 我发现了一个类似的未回答的问题here (Part 3)。
任何指向示例、文档或解释的链接都将不胜感激,因为这似乎是一种创建动态清单的相对较新的方式,我发现很难找到清晰、详细的文档。
编辑
在 cmets 中使用 @larsks 建议的 group variables 有效。最初是因为从清单插件返回的 SSH 密钥名称前面带有下划线,因此组名称需要采用 _SSHkey 的形式。
【问题讨论】:
-
我怀疑你可以简单地使用group variables来解决这个问题。
-
我认为你的想法是对的。只需确保您的动态清单将主机放入适当的组中即可。
-
@larsks 组变量解决了我在原始帖子中添加的一个小问题。如果您将评论添加为答案,那么我会接受。
标签: amazon-web-services amazon-ec2 ssh ansible ansible-inventory