Ansible配置F5 BigIP虚拟服务器时如何将列表变量传入profiles参数
问题根源
你当前写法的核心问题是,通过|标识符将profiles参数的值声明为了多行字符串类型,但f5networks.f5_modules.bigip_virtual_server模块的profiles参数要求接收列表类型的输入,模块无法解析你传入的字符串格式内容,因此出现执行卡住的问题。
正确解决方案
直接通过Jinja表达式动态构造符合要求的列表,不需要生成字符串格式的YAML内容,也不需要loop循环,单次调用即可传入所有profile,推荐使用如下写法:
- name: Configure virtual server f5networks.f5_modules.bigip_virtual_server: state: present partition: Common name: insite-ssl destination: 10.10.10.10 port: 443 pool: example-pool snat: Automap description: Testing VIP profiles: > {{ [{'name': item, 'context': 'client-side'} for item in domains] + ['http-SSL-XForwarded', {'name': 'example.com_wildcard', 'context': 'client-side'}] }} provider: "{{ f5_conn }}" tags: - vip
方案说明
上述写法直接通过Jinja的列表生成式,先把domains变量里的每个域名转换为符合参数要求的字典结构,再和固定要添加的profile列表做拼接,最终生成的是标准的Python列表结构,和手动写死列表的效果完全一致,不会出现参数格式不兼容的问题。
如果需要提前验证生成的列表结构是否符合预期,可以添加如下debug任务确认:
- name: Debug generated profiles list ansible.builtin.debug: var: profiles_list vars: profiles_list: "{{ [{'name': item, 'context': 'client-side'} for item in domains] + ['http-SSL-XForwarded', {'name': 'example.com_wildcard', 'context': 'client-side'}] }}"
内容的提问来源于stack exchange,提问作者Jeff Bilbro
相关产品推荐
相关产品推荐

