gpt4 book ai didi

ansible - 在 ansible 中创建动态角色

转载 作者:行者123 更新时间:2023-12-04 19:00:15 25 4
gpt4 key购买 nike

在查阅了几个文档后,我得出结论,我不能使用 with_itemsroles .

所以,我创建了一个 filter_plugin生成角色字典列表。

这是我的 Play :

---
- name: Boostrap vpc and subnets with route table
hosts: localhost
connection: local
gather_facts: no
pre_tasks:
- include_vars: ec2_vars/common/regions.yml
- include_vars: environment.yml
roles:
- {
role: vpc,
ec2_region: 'ap-southeast-2'
}
- {
role: vpc,
ec2_region: "ap-southeast-1",
}
- {
role: vpc,
ec2_region: "us-west-2",
}

我想动态生成上述角色,为此我创建了一个 filter_plugin它生成一个字典列表,并且工作正常。

这是我的插件:
# this is for generating vpc roles

def roles(ec2_regions):
return [{'role': 'vpc', 'ec2_region': ec2_region} for ec2_region in ec2_regions]


class FilterModule(object):
def filters(self):
return {'vpcroles': roles}

我的计划是生成如下角色:
roles: "{{ EC2_REGIONS | vpcroles }}"

哪里 EC2_REGIONS['ap-southeast-2', 'us-east-1']
但是角色并不是这样工作的。

我收到以下错误:
ERROR! A malformed role declaration was encountered.
任何想法/想法?

最佳答案

非常粗略的概念验证。我很好奇,它是否会起作用并且确实起作用。

主要问题是动态创建的剧本是从任务内部调用的,它的标准输出不会进入主 Ansible 日志(可以在主剧本的变量中注册并显示)。错误传播到父剧本。

主要剧本:

---
- hosts: localhost
connection: local
vars:
params:
- val1
- val2
tasks:
- template:
src: role_call.yml.j2
dest: ./dynamic/role_call.yml
- command: ansible-playbook ./dynamic/role_call.yml

动态剧本模板在 templates/role_call.yml.j2文件:
- hosts: localhost
connection: local
roles:
{% for param in params %}
- { role: role1, par: {{param}} }
{% endfor %}
roles/role1/tasks/main.yml :
- debug: var=par

我猜内部 ansible-playbook命令可以用单独的 ansible.cfg 调用作为将日志保存到不同文件的参数。

我想总的来说不值得为你的情况而烦恼,但对于一个无法解决的问题 like this看起来很有希望。

关于ansible - 在 ansible 中创建动态角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39072007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com