ansible批量部署模块

Posted xmtxh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible批量部署模块相关的知识,希望对你有一定的参考价值。

回顾:
Ansible:
无需客户端程序
只要有SSH
模块化

ansible帮助工具
ansible-doc 模块名
ansible-doc 模块名 -s 列出该模块的所有选项
ansible-doc -l 列出所有模块

 

6.group组模块

- gid
         设置组id
= name
         需要管理的组名
- state
         执行状态,absent 删除  
                  present 创建(默认)

例1:创建组名www,并设置gid为666
[root@m01 ~]# ansible oldboy -m group -a "name=www gid=666"

例2:修改ww组的gid为888
[root@m01 ~]# ansible oldboy -m group -a "name=www gid=888"
 
例3:删除www组
[root@m01 ~]# ansible oldboy -m group -a "name=www gid=888 state=absent"

 

7.user用户模块

= name
         用户名
- uid
         uid
- group
         gid或groupname
- state
         执行状态,absent 删除  
                  present 创建(默认)
- shell
         登录shell,/bin/bash(默认),/sbin/nologin
- create_home
         创建用户时,是否创建家目录         
- password
         用户密码,不能使用明文,需要使用openssl加密后的密码
例1:创建一个用户oldboy,指定uid 6000,gid 666,并设置密码为123
注意:password不能使用明文,需要加密,password的加密值需使用双引号
# -1使用MD5进行加密 -stdin 非交互式
[root@m01 ~]# echo "123" | openssl passwd -1 -stdin
$1$ByoqasKh$lGSK41WgqAYJ/Ha9K3Yd00
[root@m01 ~]# ansible oldboy -m user -a name=oldboy uid=6000 group=666 password="$1$ByoqasKh$lGSK41WgqAYJ/Ha9K3Yd00"

例2:创建一个程序用户www,指定uid666 gid666 不让登录 不创建家目录
[root@m01 ~]# ansible oldboy -m user -a "name=www uid=666 group=www create_home=no shell=/sbin/nologin

 

8.file模块

= path
        目标文件路径
        copy模块的dest
        其他模块的name
- src
        源文件路径
- owner
        属主
- group
        属组
- mode
        权限
- state
        absent 删除
        directory 创建目录
        file 修改文件属性(默认)
        touch  创建文件
        link hard 链接
- recurse 
        递归
        recurse=yes
例1:创建目录/data和/backup,属主666,属组666
[root@m01 ~]# ansible oldboy -m file -a "path=/data owner=666 group=666 recurse=yes state=directory"
[root@m01 ~]# ansible oldboy -m file -a "path=/backup owner=666 group=666 recurse=yes state=directory"

例2:创建文件/etc/rsync.passwd,权限600
[root@m01 ~]# ansible oldboy -m file -a "path=/etc/rsync.passwd mode=600 state=touch"

例3:对/etc/hosts做个软链接到/tmp/hosts
[root@m01 ~]#  ansible oldboy -m file -a "src=/etc/hosts path=/tmp/hosts state=link"

总结:file模块仅适合创建目录,修改所属和权限,创建链接;除开这些操作的其他文件管理都通过copy模块实现

 

9.mount挂载模块

= path
        挂载点
- src
        需要挂载的设备
- fstype
        挂在设备的文件系统
        iso9660 光驱
        ext4
        xfs
        nfs
        cifs samba的共享文件系统
        ntfs windows磁盘文件系统
- opts
        挂载属性
            noatime
            noexec
            nosuid
= state
        挂载动作
            present    # 开机挂载,仅将挂载配置写入/etc/fstab
            mounted    # 挂载设备,并将配置写入/etc/fstab
            unmounted  # 卸载设备,不会清除/etc/fstab写入的配置
            absent     # 卸载设备,会清理/etc/fstab写入的配置

例1:通过nfs实现网络文件共享

1)安装nfs
ansible nfs -m yum -a "name=nfs-utils state=installed"
2)启动服务
ansible nfs -m service -a "name=rpcbind state=started"
ansible nfs -m service -a "name=nfs state=started" 
3)修改配置文件
方法一:在m01上创建配置文件,然后通过copy模块推送给nfs(建议使用)
mkdir -p /server/conf
echo /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) > /server/conf/exports
ansible nfs -m copy -a src=/server/conf/exports dest=/etc/
方法二:在m01上直接使用copy模块,推送文件内容
ansible nfs -m copy -a content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports 
4)创建目录用户,并修改所属
ansible nfs -m group -a "name=www gid=666"
ansible nfs -m user -a "name=www uid=666 group=666 create_home=no shell=/sbin/nologin"
ansible nfs -m file -a "path=/data state=directory owner=666 group=666 recurse=yes"
5)重载配置文件
ansible nfs -m shell -a "exportfs -arv" 或 ansible nfs -m service -a "name=nfs state=restarted"
ansible nfs -m shell -a "showmount -e"
6)在web上挂载nfs的共享目录
ansible web -m yum -a "name=httpd state=installed"
ansible web -m service -a "name=httpd state=started"
ansible web -m mount -a "src=172.16.1.41:/data path=/var/www/html state=mounted fstype=nfs"
ansible nfs -m copy -a "content=‘xiao ming is your father‘ dest=/data/index.html"

 

10.script

1).写个脚本,创建用户,并配置密码
[root@m01 scripts]# cat 1.sh 
#!/bin/bash
useradd oldgirl
echo 123 | passwd --stdin oldgirl &> /dev/null && echo create passwd success
2).运行脚本
ansible all -m script -a "/server/scripts/1.sh"

 

11.cron

- name
        描述,必须要写,如果不写,默认为None,会导致无法指定删除某条计划任务
- job
        任务,命令
- state
        执行状态,absent 删除  
                 present 创建(默认)
- minute
        Minute when the job should run ( 0-59, *, */2, etc )
        [Default: *]
- hour
        Hour when the job should run ( 0-23, *, */2, etc )
        [Default: *]
- day
        Day of the month the job should run ( 1-31, *, */2, etc )
        (Aliases: dom)[Default: *]
- weekday
        Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc
        )(Aliases: dow)[Default: *]
- month
        Month of the year the job should run ( 1-12, *, */2, etc )
        [Default: *]
例子:每天的凌晨1点执行rsync_backup.sh
[root@m01 ~]# ansible all -m cron -a "name=‘Rsync backup‘ hour=1 minute=0 job=‘/bin/sh /server/scripts/rsync_backup.sh &> /dev/null‘"

 

以上是关于ansible批量部署模块的主要内容,如果未能解决你的问题,请参考以下文章

ANSIBLE自动部署实践

ansible总结

ansible原理,安装,各种模块详解

Ansible安装部署和模块之基础篇

ansible

LINUX——关于ansible批量控制,批量命令及部署的使用