提问人:Kain Taozia 提问时间:10/25/2023 最后编辑:tloKain Taozia 更新时间:10/28/2023 访问量:76
如何在启动 ansible-playbook 时覆盖循环 var
How to overwrite loop var on launching ansible-playbook
问:
我有这个剧本来创建具有循环的多个用户
- name: creation des users
become: yes
become_method: sudo
become_user: root
user:
name: "{{ item.username }}"
shell: /bin/bash
groups: admin
append: yes
state: present
password: "{{ 'some_password' | password_hash('sha512') }}"
update_password: on_create
with_items: "{{ users }}"
register: createaccount
和我 vars/main.yml
# vars file for linux_users_saas_create
users:
- username: user1
- username: user2
- username: user3
- username: user4
现在我希望能够覆盖此循环 var 以创建一次不在列表中的其他用户,因为是 temporay 用户
像这样: ansible-playbook -i inventory -e “username=user5”
你能帮我吗
答:
0赞
Kevin C
10/25/2023
#1
如果它只是暂时的,请不要覆盖它。
只需设置一个默认的空,然后覆盖它。temp_user
name: "{{ item.username + temp_user | default('') }}"
然后在 cli 上,您可以添加它们:ansible-playbook -i inventory -e "temp_user=user5"
--编辑--
顺便说一句,将您的列表定义为:
users:
- user1
- user2
请注意,每个创建的用户的每个密码都是平等的,我会说这并不安全。
评论
0赞
Kain Taozia
10/25/2023
对不起,我按照你的建议做了,但它不起作用,剧本仍然读取我的 var 文件而不是额外的 var 用户:name:“{{ item.username + temp_user |default('') }}“ shell: /bin/bash groups: admin append: yes
0赞
Kain Taozia
10/25/2023
事实上,使用详细选项,playbook 将用户名 var user1 与temp_user var user2 连接起来,因此创建的用户是 user1user2
0赞
Emros
10/26/2023
#2
你可以试试这样:
- name: "Create User"
become: true
become_method: sudo
become_user: "root"
user:
name: "{{ user_name | default(item.username) }}"
shell: "/bin/bash"
groups: "admin"
append: yes
state: present
password: "{{ 'some_password' | password_hash('sha512') }}"
update_password: on_create
with_items: "{{ users }}"
register: "createaccount"
并经过这个命令:
ansible-playbook tonplaybook.yml -i inventory.yml -e "user_name=user5"
默认情况下,item.username 用于使用 vars 文件创建用户:D
我 lint 你的代码 ET 瞧:D
Et pour aller plus 里脊肉
凯文是对的,每个用户都将拥有相同的密码,因此您可以这样做为每个用户生成随机密码:
- name: "Create password"
become: true
become_method: sudo
become_user: "root"
set_fact:
sa_pass: "{{ lookup('password', '/dev/null length=10 chars=ascii_letters,digits') }}"
register: random_password
- name: "Create users"
become: yes
become_method: sudo
become_user: "root"
user:
name: "{{ user_name | default(item.username) }}"
shell: "/bin/bash"
groups: "admin"
append: yes
state: present
password: "{{ random_password.sa_pass }}"
update_password: on_create
with_items: "{{ users }}"
register: createaccount
A plus dans le bus fratélo
0赞
Kain Taozia
10/26/2023
#3
这是我在另一个主题上找到的解决方案:
我保留了我的剧本,但 had-hic 命令看起来像这样:
ansible-playbook -i inventory -e '{users: [{username: user5}]}'
参考:如何通过ad-hoc命令将多个值传递给“with_items”?
评论
0赞
Emros
10/26/2023
没关系。。。你可以保留如何使用Ansible生成随机密码 见你:D
评论