基于 ec2 发行版动态设置 ansible-playbook 用户变量

2024-03-31

我正在创建一个 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(使用前将#替换为@)

基于 ec2 发行版动态设置 ansible-playbook 用户变量 的相关文章

  • XMLHttpRequest 无法加载 ZScaler 的问题

    我在 EC2 实例中托管了一个网站 并使用以下命令访问该页面http ec2 网址 该页面向同一实例上托管的另一个 Web 应用程序发出 ajax 请求 如果我访问通过 ZScaler 代理的页面 我会得到XMLHttpRequest ca
  • 我的负载均衡器目标组显示为“不可用” - 如何进一步调试?

    我创建了一个网络负载均衡器和一个目标组 然后我尝试为负载均衡器创建一个侦听器 但目标组在下拉菜单中显示为 不可用 我下一步可以做什么来调试这个 非常感谢您的帮助 图片 https ibin co w800 3vKxtcYYs3mg jpg
  • Rails 6 + Capistrano - 没有这样的 puma.sock 文件

    拜托 我有一个大问题10多个小时了 每当我使用 Capistrano 和 Puma 在 Rails 中运行应用程序部署并重新启动 nginx 时 当我尝试访问我的 Web 时 我会看到此错误 在此输入图像描述 https i stack i
  • Ansible 循环直到条件匹配。

    我想进行一系列 API 调用 每次调用后检查结果中的特定参数 如果它大于特定值 则将其保存在寄存器中并继续进一步执行剧本 基本上 我正在对 RHEV 进行 API 调用来检查存储域 然后我想检查存储域是否有足够的空间 如果有 则将该存储域i
  • 在 Ansible 中检查已安装的 yum 包/rpm 版本并使用它的最佳方法

    我已经在 CentOS 7 上尝试使用 Ansible 2 0 0 2 我试图从已安装的 rpm yum 软件包中获取版本 但在运行脚本时遇到警告消息 安塞布尔脚本 name Get version of RPM shell yum lis
  • 如何在AWS中将AMI从爱尔兰区域复制到中国区域

    我在 AWS 爱尔兰区域有一个设置 现在我希望在中国使用该 AMI 有谁知道完成任务的最佳实践是什么 任何帮助将不胜感激 提前致谢 中国地区目前不支持 AMI 复制 根据AWS 将 AMI 从美国传输或复制到中国 北京 https foru
  • 使用 with_items 连接字符串并分配给 Ansible 中的变量

    启动 ec2 实例时 我需要将两个 2 IP 保存到 vars 文件中的变量中 以便稍后在部署期间使用 这就是我保存单个服务器 IP 的方式 name Save server public IP to vars file lineinfil
  • Amazon EC2 - Apache 服务器重启问题

    当我运行这个命令时 sudo etc init d httpd restart 它给出以下错误 停止 httpd 失败 启动 httpd 98 地址已在使用中 make sock 无法绑定到地址 80 98 地址已在使用 make sock
  • 如何配置 Ansible 跳过两个堡垒主机?

    我想编写一个 Ansible 剧本 使用 Ansible 2 7 5 它将在到达目标服务器之前跳过两个主机来执行诸如安装 docker 和 python 等操作 我能够让 Ansible 通过一台主机跳转到server1通过将其添加到我的h
  • 无法将 Laravel 应用程序部署到 EC2

    我的 Laravel 项目全部在我的本地主机上运行 我将其部署到 EC2 但没有任何反应 我在开发控制台中看到的只是内部错误 500 我缺少什么 在部署到 AWS 之前我需要更改哪些内容 这是网址 http ec2 52 88 99 75
  • 如何读取/理解目标主机上的ansible日志(由syslog编写)

    当你在某个主机上执行 ansible 时 它 会写入该主机上的 syslog 如下所示 Dec 1 15 00 22 run tools python ansible
  • 如何在S3中存储数据并允许用户使用rails API / iOS客户端以安全的方式访问?

    我是编写 Rails 和 API 的新手 我需要一些有关 S3 存储解决方案的帮助 这是我的问题 我正在为 iOS 应用程序编写一个 API 用户在 iOS 上使用 Facebook API 登录 服务器根据 Facebook 向 iOS
  • AWS 卷备份为空

    我是 AWS 新手 我有一个在 AWS 中运行的实例 现在我想将该实例卷放入新实例中 该卷包含大约 8GB 的 内容 我按照以下帖子中的第一个答案进行操作 更改 ec2 实例的密钥对 https stackoverflow com ques
  • 从 EC2 W2008 实例创建 AMI - 为什么从来没有获得密码?

    我正在尝试做什么 我正在尝试克隆 EC2视窗2008通过管理控制台实例 该实例基于 Windows Server2008 i386 Base v104 ami 92ba43fb 但上面安装了许多应用程序 我想为新实例保留这些应用程序 发生了
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • Ansible local_action 指令

    我对 Ansible 很陌生 有一个简单的问题来了解我的理解local action指示 这是否意味着该命令完全在本地执行 假设你有这样的东西 local action command which nginx register check
  • 包含 contains 的 json 格式查询

    我在 ansible 中有以下 json 输出 active transaction null cores 4 hostname alpha auth wb01 active transaction null cores 4 hostnam
  • 使用 Amazon SQS 的 .net 应用程序示例

    我正在寻找一个示例 Net 应用程序 该应用程序会持续检查 Amazon SQS 是否有新消息 并在发现新消息时执行一项操作并将其从队列中删除 我的目标是让一个在 EC2 上运行的应用程序监视我的 SQS 队列中的新消息 当找到一条消息时
  • 如何在AWS中从快照创建Windows实例

    我的公司想要在 Amazon Web Service 中拍摄窗口的每日快照 我们可以毫无问题地拍摄快照 但是当我尝试从快照创建实例时 它总是创建一个 Linux ami 所以当服务器启动时 它总是无法通过健康检查 是否可以从快照创建 Win
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de

随机推荐