我想创建用户并将其信息收集到本地文件中,但是使用循环寄存器现在可以按预期工作。
我认为这是一个缩进问题,但是没有运气。
我的剧本
---
- hosts: localhost
tasks:
- name: Clearing Local file
local_action: shell echo "Zone,docode,doname,testuser Output" > user.csv
- hosts: app
tasks:
- name: Creating user Testuser
become: yes
user:
name: "{{ item }}"
state: present
shell: "/bin/bash"
password: "$6$mysecretsalt$qyctTVhRMS1ZSnCuzQNAM8Y7V/yqSEnyRbal0IYXSqSEVKkXF8ZmXBZoRIaN/PvzE/msq8iOJO830OOCG89va/"
update_password: always
groups: santosh
shell: id "{{item}}"
ragister: userout
loop:
- newuser1
- newuser2
- newuser3
- debug:
var=userout
在执行时会出现以下错误
ERROR! conflicting action statements: shell, user
The error appears to have been in '/home/santosh/ans-home/playbooks/Create_User_and_Gather_output.yml': line 12, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Creating user Testuser
^ here
答案 0 :(得分:1)
您不能在一个任务中调用多个模块,需要根据错误消息的报告将每个调用分开在自己的任务中。
我了解您为什么尝试这样做:利用同一循环执行多项任务。不幸的是,这是不可能的。如果确实需要遍历大量任务,则可以将一组任务移到一个单独的文件中并将其包含在循环中。在您的情况下,实际上并不需要这样做,因为:
实际上,用户模块将返回其创建的用户uid或存在于其结果中的用户的uid。您只需要注册调用user
模块的结果即可。
第二步就尝试以下内容:
- name: Resgister application users
hosts: app
vars:
user_list:
- newuser1
- newuser2
- newuser3
tasks:
- name: Create the users if they don't exist
user:
name: "{{ item }}"
state: present
shell: "/bin/bash"
password: "$6$mysecretsalt$qyctTVhRMS1ZSnCuzQNAM8Y7V/yqSEnyRbal0IYXSqSEVKkXF8ZmXBZoRIaN/PvzE/msq8iOJO830OOCG89va/"
update_password: always
groups: santosh
register: create_users
loop: "{{ user_list }}"
- name: Show ids of users
debug:
msg: "The uid of user {{ item.name }} is: {{ item.uid }}"
loop: "{{ create_users.results }}"
此外,请注意:在您的第一个游戏中,请帮自己一个忙,并停止使用旧的local_action
语法来支持delegate_to: localhost
来完成一项任务。在您的情况下甚至不需要,因为您已经将播放仅定位到本地主机。