问题标签 [ansible-role]
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 - 从“tasks/alternate.yml”而不是“tasks/main.yml”开始角色
我有一本大型剧本,它使用多个角色来设置新服务器。我想重新使用剧本,但在退役阶段而不是调用role_name/tasks/main.yml
并有很多when:
语句,我想告诉 Ansible 调用角色但从role_name/tasks/decommission.yml
.
作为第一次测试,我main.yml
像这样设置我的文件:
但这变得很难维护。这是可能的还是我忽略了另一种设置剧本的方法?
ansible - 如何遍历列表的字典并将变量传递给 Ansible 角色?
我有一个 Ansible 角色,它使用以下变量:connection_name、connection_ip 等来创建连接。
在我的主机文件中,我可以有许多“连接”并将其定义为列表字典:
如何将每个“连接”对象传递给我的 Ansible 角色,以便它可以使用嵌套变量“connection_name”和“connection_ip”?我曾尝试像这样使用“with_items”和“with_dict”:
但是我得到一个“FAILED:connection_name is undefined”,因为它以 {“connection_name”:二,“connection_ip”:172.18.1.2} 的形式传入对象,而不是内部部分,“connection_name”:二,“connection_ip”:没有 {} 的 172.18.1.2。
ansible - 无法在 Ansible 中使用 Sudo 运行命令
我正在运行 Ansible 作业,其中我将用户切换到服务帐户以运行某个命令。我可以切换用户并使用become方法确认相同,然后使用raw: whoami。当在相同的场景中发布 become 方法时,我正在尝试运行以下命令,
它说找不到java命令。服务帐户确实有权在服务器上运行此命令,我可以直接从服务器成功运行相同的命令。
谁能告诉我这里可以做什么?
提前致谢。
ansible - Ansible 不从所有主机的依赖角色执行处理程序
设置
我有几个角色声明角色依赖关系,有时使用他们所依赖的角色的处理程序。我的设置的简化版本如下所示(这是输出,head inventory **/*.yml
它显示了所有路径名和文件的完整内容):
现在我运行ansible-playbook -i inventory playbook.yml
结果
问题
我的问题是我希望两台服务器都执行基本处理程序。但显然它在 server2 上被跳过了。如果我添加-v
到 ansible 命令,我会得到无用的评论,即skipping: [server2] => {"changed": false, "skip_reason": "Conditional result was False"}
.
让我感到困惑的是,基本角色似乎被包含了两次,并且每个服务器分别跳过了一个或另一个包含该角色的内容。
问题
- 有什么方法可以确保处理程序被正确触发?
编辑
- 处理程序没有被触发是一个错误,还是该行为记录在某处?
/编辑
小问题
- 有没有办法以一种不会产生许多包含项的方式声明依赖项,这些包含项只被一个服务器拾取而被所有其他服务器忽略,尽管其他服务器将在其他点通过他们自己的依赖项包含相同的角色?当我有更多的服务器和角色时,这会导致很多跳过的任务。(在阅读了关于角色包含的文档后,我怀疑不是)
- 是否有其他方法可以使用 ansible 处理角色依赖项和处理程序?我在阅读https://medium.com/@ibrahimgunduz34/parallel-playbook-execution-in-ansible-30799ccda4e0后想出了这个设置
边注
我想避免使用文档group_by
中描述的技术,或者更一般地说,在他们自己的剧本中只为正确的服务器子集执行每个角色,因为我有很多服务器,我想通过以下方式加快剧本的运行使用.strategy: free
ansible - 如何仅在剧本中的一个角色上调用标记任务?
我有一本剧本,而不是发布多个角色,其中一个负责管理 sophos 防病毒软件的安装和卸载。它可以使用标签处理安装或卸载,但显然不能同时进行展位。所以我的问题是我如何才能在剧本中使用标签安装来启动这个角色,而不会超载这个角色中的所有任务?我只想执行标记的任务,作为一般任务的预期用途。
我尝试了一些语法,但似乎都没有用,它总是用标记重载所有任务,而不是执行标记任务:
预期的:
该角色仅执行称为标记的任务
实际的:
每个任务都被我尝试执行的标签超载
ansible - 在具有不同值的父角色中调用 Ansible 任务
我创建了两个非常简单的 Ansible 角色,称为base
和web
。web
是依赖的base
,这个依赖定义在web/meta/main.yml
.
base
在 中定义了以下任务base/tasks/main.yml
:
中的变量base
定义在base/defaults/main.yml
:
中的变量web
定义在web/defaults/main.yml
:
我想做的是:
- 使用变量from和from调用
install required packages
from 。base
install_packages
base
apt_update_cache
apt_cache_valid_time
base
- 调用
install required packages
from ,web
使用install_packages
变量 fromweb
和from (因为我没有覆盖这两个中的任何一个)。apt_update_cache
apt_cache_valid_time
base
web
这可能吗,如果可以,我将如何去做?或者,是否有一种“更好”的方法来实现相同的结果,而无需在每个依赖角色中复制任务(我可能会创建其他几个依赖于 的base
任务,它们也都有自己的角色特定任务)?
ansible - 如何将动态角色传递给 Ansible 剧本
使用角色定义 Ansible 剧本的标准方法是:
我想为 Ansible 角色传递一个命令行变量。我的意思是说应该有一个单一的 Ansible 角色,它是一个变量,我应该能够从外部传递角色(普通或网络服务器)的选择。
请让我知道我们是否以及如何实现这一目标:
ansible - 在哪里放置 Ansible 的 requirements.yml 并使用它来解决依赖关系?
我是 ansible 的新手,正在探索依赖角色。文档链接
我没有遇到文档是-放置requirements.yml
文件的位置。
例如,如果我site.yml
看起来像这样:
而且,让我们说
- 角色 1 依赖于角色 2 和角色 3
- 角色 2 依赖于角色 4 和角色 5
通常,ansible-galaxy 具有以下结构:
依赖项,添加到meta/main.yml
. 假设,角色 1 在此文件中标记了依赖项,例如(对于角色 2 也是如此):
而且,我还有一个requirements.yml
文件,如下所示:
我的问题:我在哪里requirements.yml
为角色 1 放置这个文件?
我了解需要通过命令安装要求,
而且,我可以为角色 1 执行此操作,但是如何为角色 2 自动执行此操作?是否需要以这种方式手动解析和安装连续的依赖项,还是有更好的方法?
amazon-web-services - AWS/Ansible - 如何从动态清单中定义的主机跨角色/主机访问事实?
我目前正在设置许多 Ansible 角色来设置 Kubernetes 集群。到目前为止,我的角色是提供幂等 EC2(1x Master / 2x Worker)和后续角色,以使用 Docker/Kubernetes 依赖项设置这些 master/worker 节点。我AWS ec2.ini/.py dynamic-inventory
用来发现我的create_ec2
角色配置的实例的 IP。
尝试使用从主节点检索的加入命令将我的工作人员加入集群时遇到问题。我有 2 个单独的角色用于 master 和 worker 配置。在主人的任务中,我得到了加入命令:
然后注册一个变量,然后我用它来设置主机事实:
我遇到的问题是当我在运行我的工作角色时尝试在我的工作节点上访问这个事实时。我正在尝试通过以下方式访问事实:
但是它失败了,因为我为 hostvars 提供的主机显然是未定义的。
作为参考,我在我的动态清单中保存了这个值(IP 省略):
我收到的错误是:
我正在努力弄清楚如何访问我的动态清单中定义的 EC2 实例的主机事实。
我尝试将 EC2 IP 直接补充到主机变量 ( hostvars['1.2.3.4'].join_command
) 中,但是任务只是挂起并且什么都不做。
我也试过放入一个魔术变量(hostvars['inventory_hostname].join_command
)无济于事。
似乎人们已经成功地从静态清单文件中定义的主机访问主机事实,但是由于 EC2 服务器的动态特性,将在其上创建集群,我无法使用这种方法。
运行.yml:
setup_kube_master/tasks/set_fact.yml:
setup_kube_worker/tasks/get_fact.yml:
serialization - Ansible:无法为顺序执行设置变量
我正在尝试使用该serial
元素构建一个带有滚动更新用例(顺序执行)的剧本。由于我必须在剧本中的多个位置使用序列值,因此我想将其用作变量,该变量可用于在某处定义为组变量。
库存文件
剧本
错误
错误!'serial' 字段的值无效,其中包括未定义的变量。错误是:“app_stack_serial_value”未定义
如果我在序列字段(如serial: 1
. 但我想将此值用作变量。任何想法 ??
Ansible 版本:ansible 2.7.10
python 版本 = 3.7.2(默认,2019 年 1 月 13 日,12:50:01)[Clang 10.0.0 (clang-1000.11.45.5)]