问题标签 [ansible-facts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ansible-facts - 从ansible中的macaddress中删除冒号
我需要通过从 mac 地址中删除冒号来从 ansbile 事实(例如 ansible_default_ipv4.macaddress)创建一个文件
我已经尝试了我能想到的一切,但无法让它发挥作用
ansible - Ansible:如何使用多值数据列表作为库存并传递给目标主机
我的主机清单的来源来自一个输出成对值的内部工具,例如,这里有 6 个观察值,我目前有 160 个观察值:
所以第 1 列是我的目标主机列表(我的库存)。Column2 是唯一的 processname 值,专门分配给 servername 的值。通常会出现同一台服务器。一些服务器只有一个进程名,而其他服务器可能有 2 到 N 个。这意味着我的目标主机可能会重复一个唯一的进程名列表。我想使用此输出对列表中的两个动态库存,并且我需要将每个观察值的两个值关联并分配给变量。我不是绝对需要使用动态库存,我只需要一个解决方案。我还需要通过 command: 或 shell: modules 传递给目标主机和 {{ processname# }} 中的值。(这是独一无二的,没有与此需求相关的模块)
如果需要,我有办法过滤这些数据并以 JSON 格式或 YAML 输出,为每个主机制作一个单独的 YML 文件。虽然我更喜欢动态处理这些;预处理列表是可以接受的。
因为 ansible-playbook 需要一些已知的主机清单列表,所以在开始播放时,我无法理解如何从动态输出中创建此列表。
到目前为止我所做的:我尝试阅读并尝试将这些对设置为 /etc/ansible/hosts/host_vars/servername#.yml 文件中的内容。这非常难看,因为我必须将数据输出预处理为 YML 格式。但它并没有给我一个主机列表供我在我的剧本中参考。因此,虽然 hostvar 似乎是合乎逻辑的选择,但我无法理解它。
我需要的:
感谢您的任何见解。我现在已经使用 Ansible 3.5 周了!我在使用静态和动态库存方面做得很好,但这让我很困惑,因为库存列表并不明显,请给出匹配对的格式。
注意:很多人都建议使用 host_vars,但在我看来,这是保留给主机名、相关端口和代理值的。我可能是错的。
==================================================== ==================
更新:感谢您在正确方向上的帮助。我已经更新了我们的清单脚本,以 JSON 格式输出主机列表。第一个新选项是以 JSON 格式输出主机。示例:{"my_host":["servername1","servername2",]}
将其称为动态库存脚本,效果很好!
ansible all -m ping servername1 | 成功 => {“改变”:假,“平”:“乒乓”} servername2 | 成功 => {“改变”:假,“平”:“乒乓”}
下一步:清单脚本的第二个新选项是添加一个新开关来输入主机名。这部分仍然让我感到困惑。这是输出: showInv --host=servername1
{"servername1":["processname1","processname2","processname3",]}
我缺少的最后一部分是如何在我的剧本中使用特定的 "--host={{ my_host }} 调用库存脚本。
看来我需要找到现有主机名的变量并将其作为切换选项“--host=”传递回库存脚本
ansible - 遍历 ansible_devices 并选择任何不是 sda 的物理磁盘以包含在卷组中
我需要构建两个逻辑卷。sda1 将始终形成 /root 并为日志等进行分区,但 /application 可能包含一到四个附加磁盘。我知道他们总是从 sdb 开始,然后继续到 sde 或 sdf。我可以想到几个不同的快速而肮脏的解决方案,比如运行一个 bash 命令来构建一个要注册为变量的列表,但我想做的是从 Ansible 设置事实的 ansible_devices 部分下拉并匹配sd[bz] 的正则表达式。我知道我不太可能拥有 sdz,但我希望尽可能保持灵活性。有没有人有这方面的好技术?jinja2 过滤器是错误的方法吗?
ansible - Ansible 中另一个角色的事实访问
在我的 ansible 游戏中,我使用 pre_tasks 设置了一些事实:
现在我想从我正在开发的角色中访问它们。当我尝试直接访问它们时,我收到一个变量未定义的错误:
根据我读过的一些文章,我需要用来hostvars
查找另一个剧本中设置的事实,例如:
但是,这存在明显的问题(变量内部的变量)。我知道我可以简单地在需要访问它们的每个角色中定义我的事实,但这看起来很混乱,而且绝对不是 DRY。
我只需要一种方法来设置和访问可以从多个角色和角色中访问的“全局”事实/变量。做这个的最好方式是什么?
regex - 如何正则表达式替换 Ansible 中的嵌套值
这个问题是关于 Ansible 中的循环,而不是关于 AWS,但为了清楚起见,我将使用 AWS 部署问题作为示例。
对于我们的部署脚本,我尝试遍历 Amazon EC2 容器服务中的一些集群。我最终要做的是重新启动集群上的每个服务。给定它的名称,我可以重新启动服务。但是我需要简单的名称,而不是完全限定的 ARN。所以我查找每个集群的服务并得到如下信息:
项目:测试服务
现在我想用服务的短名称替换每个 ARN。例如: arn:aws:ecs:eu-central-1:55:service/test-service
变成test-service
.
替换后,我可以循环服务并通过将所需的计数设置为 0 来关闭它们(稍后我将再次打开它们):
taskdefinitions
我在剧本中定义的简单字典在哪里:
因此,在将上面显示的 AWS 列表放入变量后,result
我尝试通过执行以下操作来进行正则表达式替换:
这很好用,但它显然只替换了一个集群的服务名称,并且我丢失了 dict 中的任何其他字段ansible_facts
。后者可以接受,前者不行。那么问题来了:如何替换嵌套列表中的文本?另一个问题是跳过关闭不包含在 中的服务taskdefinitions
,但这不是手头的问题。
ansible - ansible剧本失败了
部分剧本如下:这是ansible剧本(main.yml)
custom_application.py:
这是从 main.yml 文件调用的自定义 ansible 应用程序。
Application.py:python 类,做一些与应用程序相关的事情。
在 main.yaml 和自定义 ansible 模块和应用程序类之上
Module_stdout 如下:
模块标准输出我截断了确切的模块标准输出如下:
我认为它是一个有效的 json 对象。
如上所示,一个特定的 ansible 步骤失败,没有 stderr。而且我也收到上述警告..让我知道我哪里出错了
注意:我也发送 json 数据作为自定义 ansible 模块的输出
ansible - Ansible 没有返回正确的 group_vars,为什么?
deploy.yaml
inventory
当我运行剧本时,我希望变量demo
返回aaa
,但它返回bbb
。
为什么?
ansible - ansible 将事实值分配给变量
我是 ansible 的新手,我正在编写一个小剧本,它必须从目标主机收集事实值并将其用作剧本中的变量。有人可以帮我怎么做。
注意:DATA_AGGREGATOR_ENV 是在所有服务器中定义的环境变量,值因服务器而异。
ansible - 使用属性名称作为其他变量访问 ansible 变量属性
我有以下代码:
我确认EC2_MY_AP_HOST
返回一个字符串 ip10.0.1.2
我收到的 json 结构python convinventory/ec2.py
如下:
访问这些数据的正确方法是什么?
ansible - 确认安装点集存在的最简单的非外壳方法,每个安装点的自定义最小大小
ansible_mounts 是一个字典数组,就像这样 -
我需要确认存在一组具有最小尺寸的特定挂载点。我对此数据结构有控制权,但现在它的结构类似 -
我希望使用像 grep 这样的 selectattr() 过滤器,但它不可用。
致命:[tstServer]:失败!=> {"failed": true, "msg": "模版字符串时出现模板错误:没有名为 'selectattr' 的过滤器。字符串:{{ ansible_mounts | selectattr('mount', 'equalto', item.mount ) }}" }
使用神社 2.6。不知道为什么 selectattr() 不存在。
(这是詹金斯的输出,如果有人关心的话。)
乐于使用when、fail、assert、with_items、with_nested、combine()和/或其他任何东西;只是还没有找到合适的组合来使它整洁。我宁愿它不采取十几个步骤 - 一个将是理想的。
建议?
附录:我可以通过一个步骤轻松地确认安装点fail: ... when: not item.mount|is_mount
...这很有趣,因为虽然/dev/shm
以这种方式显示为挂载点(以及从df
&之类的命令mount
),但它不包含在ansible_mounts
.
这意味着我不能只用ansible_mounts
单独with_nested
的 for来检查文件大小/dev/shm
。这让我变成了一只悲伤的熊猫。
进一步的附录:
事实证明,我必须检查一个通常可通过常用文件系统获得的挂载点 (/tmp) - 最佳选项 ansible_mounts!- 一个 (/dev/shm) 是 tempfs - 最简单的似乎是 df,它也可以处理 /tmp - 以及 oracle 管理的一堆,所以它们只能通过 fdisk 获得。
最后,我必须检查每个系统的十几个驱动器,但 /tmp 是 ansible_mounts 唯一可用的驱动器。话虽这么说,我的问题变得像我问的那样没有意义......
感谢您的输入。