无法优化含when子句的Ansible代码,需将两段YAML合并为单块
合并后的Ansible任务代码
可以通过定义系统与包信息的映射关系,将两个任务合并为一个,同时保留原有的系统适配逻辑:
- name: Download Amazon CloudWatch Agent get_url: url: "{{ cloudwatch_agent_packages[ansible_facts['ansible_distribution']].url }}" dest: "{{ cloudwatch_agent_packages[ansible_facts['ansible_distribution']].dest }}" vars: cloudwatch_agent_packages: Debian: url: "https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb" dest: "/tmp/temp_files/amazon-cloudwatch-agent.deb" RedHat: url: "https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm" dest: "/tmp/temp_files/amazon-cloudwatch-agent.rpm" when: ansible_facts['ansible_distribution'] in ['Debian', 'RedHat']
说明
- 通过
vars定义cloudwatch_agent_packages字典,将不同系统对应的下载链接和目标路径做统一映射 - 利用
ansible_distribution的值作为字典键,动态匹配对应系统的包信息 - 最后通过
when条件限定只在Debian或RedHat系统上执行该任务,和原逻辑保持一致
内容的提问来源于stack exchange,提问作者sunny
相关产品推荐
相关产品推荐

