我正在创建一个 ansible 剧本,它会遍历一组 AWS EC2 主机并安装一些基本软件包。在 playbook 可以执行任何任务之前,playbook 需要使用正确的信息登录到每个主机(2 种类型的发行版 AWS Linux 或 Ubuntu)user: {{ userXXX }}
这是我不太确定如何传递正确的用户登录名的部分,它可以是ec2-user
or ubuntu
.
- name: setup package agent
hosts: ec2_distros_hosts
user: "{{ ansible_user_id }}"
roles:
- role: package_agent_install
我当时假设ansible_user_id
可以基于 ansible 的保留变量工作,但这里的情况并非如此。我不想为不同的发行版创建 2 个单独的剧本,是否有一个优雅的解决方案来动态查找用户登录并用作user:
?
这是未知用户的失败 cmdansible-playbook -i inventory/ec2.py agent.yml
您有多种方法可以完成任务:
1.在每台主机上创建同名的ansible用户
如果你有的话,你可以使用user: ansible_user
在你的剧本中。
2. 使用合适的登录名标记每个主机
您可以创建一个标签(例如login_name
) 为每个 ec2 主机并在其中指定用户。对于 Ubuntu 主机 – ubuntu,对于 AWS Linux 主机 – ec2-user。
这样做之后,您可以使用user: "{{ec2_tag_login_name}}"
在你的剧本中——这将从主机的login_name标签中获取用户名。
3. 根据您的需要修补 ec2.py 脚本
似乎没有合适的方法可以从 AMI 获取准确的平台名称,但您可以使用如下所示的方法:
image_name = getattr(conn.get_image(image_id=getattr(instance,'image_id')),'name')
login_name = 'user'
if 'ubuntu' in image_name:
login_name = 'ubuntu'
elif 'amzn' in image_name:
login_name = 'ec2-user'
setattr(instance, 'image_name', image_name)
setattr(instance, 'login_name', login_name)
将此代码粘贴到之前self.add_instance(instance, region)
in ec2.py
具有相同的缩进。它获取图像名称并进行一些猜测工作来定义登录名。然后你可以使用user: "{{ec2_login_name}}"
在你的剧本中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)