Ansible读取CSV时when条件过滤指定AWS账号条目不生效问题
问题原因
你的when判断放在了block层级,该条件作用于整个代码块而非循环中的单个条目:只要CSV中存在任意一条AWS_ACCOUNT = aws-account-rnd的记录,整个block就会全部跳过;如果不存在则所有条目全部执行,和你预期的单条过滤逻辑不符。
另外你额外写的两个debug、注册account/accountlist的任务属于冗余逻辑,可以直接删去,直接在循环任务中对单个item做判断即可。
修正后配置
- name: "读取CSV文件得到条目列表" community.general.read_csv: path: sample.csv register: ingest - name: become: yes become_user: awx delegate_to: localhost environment: "{{ proxy_env }}" block: - name: "Assume role" community.aws.sts_assume_role: role_arn: "{{ item.ROLE_ARN }}" role_session_name: "pm" with_items: "{{ ingest.list }}" register: assumed_role # 对每个循环条目单独做判断,跳过AWS_ACCOUNT为aws-account-rnd的条目 when: item.AWS_ACCOUNT != 'aws-account-rnd'
效果说明
修正后循环会逐行读取CSV内容:
- 匹配到
AWS_ACCOUNT = aws-account-rnd的条目(对应示例中test1的记录)会被自动跳过 - 其余符合条件的条目(对应示例中test2的记录)会正常执行assume role操作
内容的提问来源于stack exchange,提问作者ironfrogclark
相关产品推荐
相关产品推荐

