ansible常见模块
Command模块
在远程主机执行命令,默认模块,可忽略-m选项
在所有主机上执行查看data目录下的文件
ansible all -m command -a "ls /data"
等同于这个写法,逻辑上是先切换到data目录在执行ls查看当前目录
ansible all -m command -a "chdir=/data ls"
create表示当文件存在时,不执行后面的下一条命令,反之则执行
ansible all -m command -a "creates=/etc/fstab ls /data"
此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
shell模块
和command相似,用shell执行命令
用shell指令执行所有设备查看hostname
ansible all -m shell -a 'echo $HOSTNAME'
因为shell功能比command强大,我们可以在配置文件里改默认模块为shell
vim /etc/ansible/ansible.cfg
module_name = shell
Script模块
在远程主机上运行ansible服务器上的脚本
在所有主机上执行本机的test.sh脚本
ansible all -m script -a '/root/test.sh'
COPY模块
从主控端复制文件到远程主机
把本机的fstab文件复制到websrcs组里的主机的/data目录下
ansible websrvs -m copy -a 'src=/etc/fstab dest=/data/'
把本机的passwd复制到websrvs组里,修改文件权限为600,所有者为li,所属组为bin,并在覆盖前先备份一份
ansible websrvs -m copy -a 'src=/etc/passwd dest=/data/passwd3 mode=600 owner=li group=bin backup=yes'
指定内容,直接生成目标文件
ansible all srv -m copy -a “content=‘test content\n’ dest=/tmp/f1.txt”
Fetch模块
从远程主机提取文件至主控端,copy相反,目前不支持目录
把其他远程主机的passwd文件拷贝到本机的/data目录下
ansible all -m fetch -a 'src=/etc/passwd dest=/data/'
File模块
设置文件属性
修改websrvs组的主机中/data/fstab的所属者为li,权限改为700
ansible websrvs -m file -a 'path=/data/fstab owner=li mode=700'
websrvs组的主机中/data/fstab创建软链接,名字叫fstab.link
ansible websrvs -m file -a 'src=/data/fstab path=/data/fstab.link state=link'
websrvs组的主机生成空文件,文件名为f1.txt
ansible websrvs -m file -a 'path=/data/f1.txt state=touch'
删除f1.txt
ansible websrvs -m file -a 'path=/data/f1.txt state=absent'
unarchive模块
解包解压缩,有两种用法
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
把本地的压缩文件解压缩到websrvs组里的data目录下,所有者改成li,权限改成700
ansible websrvs -m unarchive -a 'src=/data/sysconfig.tar.gz dest=/data/ owner=li mode=700'
压缩包在websrvs组本地时的压缩方法,记得加copy=no
ansible websrvs -m unarchive -a 'src=/data/sysconfig.tar.gz dest=/data/ copy=no'
Archive模块
打包压缩
压缩远程主机的sysconfig文件,压缩到/data目录下命名为sysconfig.tar.bz2,格式为BZ2,所有者为li,权限是0777
ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=li mode=0777'
Hostname模块
管理主机名
把远程主机150的主机名改成centos7-2
ansible 192.168.160.150 -m hostname -a 'name=centos7-2'
Cron模块
计划任务
每五分钟向172.16.0.1同步一次时间,计划任务命名为Synctime
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime"
禁用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime disable=yes"
删除计划任务
ansible websrv -m cron -a ‘state=absent name=Synctime’
Yum模块
管理安装包
yum安装httpd
ansible all -m yum -a 'name=httpd'
yum移除httpd
ansible all -m yum -a 'name=httpd state=absent'
Service模块
管理服务
关闭httpd服务
ansible all -m service -a 'name=httpd state=stopped'
开启httpd服务,并设置开机启动
ansible all -m service -a 'name=httpd state=started enabled=yes'
重启httpd服务
ansible all -m service -a 'name=httpd state=restarted'
User模块
管理用户
创建用户mysql,账号为系统账号,家目录为/data/mysql,shell类型是/bin/false
ansible all -m user -a 'name=mysql system=yes home=/data/mysql shell=/bin/false'
创建用户mysql2,账号为系统账号,家目录为/data/mysql2,shell类型是/bin/false,但是不生成家目录文件
ansible all -m user -a 'name=mysql2 system=yes home=/data/mysql2 shell=/bin/false create_home=no'
删除用户mysql,删除用户的同时删除家目录
ansible all -m user -a 'name=mysql state=absent remove=yes'
Group模块
管理组
创建组,名为testgroup,组设置为系统组
ansible all -m group -a "name=testgroup system=yes“
删除testgroup组
ansible all -m group -a "name=testgroup state=absent"