ansible模块-用户和组模块
ansible查看帮助方法
# 查看所有模块帮助信息
ansible-doc -l   
# 指定查看某个模块参数用法
ansible-doc copy  
1.user用户模块
ansible all -m user -a "name=hehe uid=888 group=888 shell=/sbin/nologin create_home=no"
user模块参数
| 参数 | 说明 | 
|---|---|
| name | 指定要创建的用户名称 | 
| uid | 指定用户uid | 
| create_home | 是否创建用户家目录 | 
| create_home | state | 
| group | state | 
| groups | 用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。 | 
| append | 如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no | 
| shell | 指定用户登陆shell | 
| expires | 此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文 件中的的第8列,比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 "date -d 2018-12-31 +%s" 获取到的时间戳为1546185600,所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用 | 
| password | 指定用户的密码,此密码为哈希加密后的密码 | 
| generate_ssh_key | 此参数默认值为 no,如果设置为 yes,表示为对应的用户生成 ssh 密钥对,默认在用户家目录的 ./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果同名的密钥已经存在与对应的目录中,原同名密钥并不会被覆盖(不做任何操作) | 
| ssh_key_file | 当 generate_ssh_key 参数的值为 yes 时,使用此参数自定义生成 ssh 私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以".pub"结尾 | 
| ssh_key_comment | 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置公钥中的注释信息。但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作。当不指定此参数时,默认的注释信息为"ansible-generated on 远程主机的主机名" | 
| ssh_key_passphrase | 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置私钥的密码。但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作 | 
| ssh_key_type | 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置密钥对的类型。默认密钥类型为 rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作 | 
| remove | 当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 "userdel --remove" 命令 | 
| state | present:默认为present,创建用户 absent:删除用户  | 
使用示例
ad-hoc
在命令行中不能使用明文密码,执行后虽然会提示 CHANGED ,但是实际上是不生效的
$ ansible all -m user -a 'name=root password=123'
[WARNING]: The input password appears not to have been hashed. The 'password' argument must be encrypted for this module to work properly.
使用如下方法
# 先在命令行中指定一个变量
password='1'
# 然后再执行即可
ansible 10.0.0.25 -m user -a "name=root update_password=always password=\"{{ \"$password\" | password_hash('sha512') }}\""
playbook
修改多个用户
cat > change_users_pwd.yml << EOF
- hosts: test
  gather_facts: false
  tasks:
    - name: change users password
      user:
        name: "{{ item.name }}"
        password: "{{ item.chpass | password_hash('sha512') }}"
        update_password: always
      with_items:
        - { name: 'root', chpass: '123'}
        - { name: 'test', chpass: '456'}
EOF
ansible-playbook change_users_pwd.yml 
修改单个用户
cat > change_user_pwd.yml << EOF
- hosts: test
  gather_facts: false
  tasks:
    - name: change user password
      user:
        name: "{{ name1 }}"
        password: "{{ chpass | password_hash('sha512') }}"
        update_password: always
EOF
使用 -e 参数传递变量到playbook中
ansible-playbook change_user_pwd.yml -e "name1=root chpass=123"
2.group组模块
ansible all -m group -a "name=hehe gid=888"
group模块参数
| 参数 | 说明 | 
|---|---|
| name | 要创建的组名称 | 
| gid | 指定组gid | 
| state | present:默认为present,创建组 absent:删除组  | 

