Ansible中如何将字符串转换为整数传递给user内置模块的uid参数?
Ansible中如何将字符串转换为整数传递给user内置模块的uid参数?
看起来你遇到的问题核心是变量引用方式不对,而不是字符串转整数的过滤本身有问题。咱们一步步来解决:
首先看你写的user模块任务:
- name: create a docker user ansible.builtin.user: name: docker_user uid: docker_uid home: '/home/{{docker_user}}' when: ansible_connection == 'docker'
这里的name: docker_user和uid: docker_uid都没有用双大括号{{}}包裹,Ansible会把它们当成字面量字符串,而不是你之前通过set_fact定义的变量。所以即使你尝试加| int,也是对字符串"docker_uid"转整数,这肯定会报错——因为它根本不是数字内容。
正确的写法应该是这样:
- name: create a docker user ansible.builtin.user: name: "{{ docker_user }}" uid: "{{ docker_uid | int }}" home: '/home/{{ docker_user }}' when: ansible_connection == 'docker'
这里做了两个关键修正:
- 用
{{}}包裹变量,让Ansible正确解析你之前定义的docker_user和docker_uid变量。 - 对
docker_uid使用| int过滤器,把字符串类型的"1000"转换成整数类型,匹配user模块uid参数的要求。
额外优化建议:
你还可以在set_fact阶段就直接把uid转换成整数,这样后面使用的时候就不用重复加过滤器了:
- set_fact: docker_uid: "{{ result.stdout | int }}" when: docker_uid is undefined
这样后续引用docker_uid的时候,它本身就是整数类型,直接用{{ docker_uid }}就行。
试一下上面的修改,应该就能解决你遇到的类型转换错误了。
备注:内容来源于stack exchange,提问作者Steven Schoch
相关产品推荐
相关产品推荐

