如何修复Ansible中“can only concatenate str (not "int") to str”错误?
修复Ansible Playbook中的字符串拼接错误
错误原因
报错核心是folder_count变量为字符串类型,执行folder_count + 1时,试图将字符串与整数拼接,触发类型不匹配错误。
修复方案
方案1:直接在表达式中转换变量类型
修改loop语句,用| int过滤器将folder_count转为整数后再计算:
--- - name: Create Folders hosts: rhel become: true tasks: - name: Number of folders ansible.builtin.debug: msg: "The number of folders to create is {{ folder_count }}" - name: Create directories ansible.builtin.file: path: "/home/ec2-user/folder{{ item }}" state: directory owner: ec2-user mode: '0755' group: ec2-user loop: "{{ range(1, folder_count | int + 1) | map('string') | list }}"
方案2:提前转换变量类型(逻辑更清晰)
用set_fact任务先将folder_count转为整数,后续统一使用转换后的变量:
--- - name: Create Folders hosts: rhel become: true tasks: - name: Convert folder_count to integer ansible.builtin.set_fact: folder_count_int: "{{ folder_count | int }}" - name: Number of folders ansible.builtin.debug: msg: "The number of folders to create is {{ folder_count_int }}" - name: Create directories ansible.builtin.file: path: "/home/ec2-user/folder{{ item }}" state: directory owner: ec2-user mode: '0755' group: ec2-user loop: "{{ range(1, folder_count_int + 1) | map('string') | list }}"
简化优化
path中的{{ item }}会自动处理整数到字符串的转换,因此可以去掉map('string')过滤器,进一步简化loop语句:
loop: "{{ range(1, folder_count | int + 1) | list }}"
内容的提问来源于stack exchange,提问作者noonenine
相关产品推荐
相关产品推荐

