ansible 常用模块
ping command shell script 模块
ansible websrvs -m ping //判断websrvs组主机是否存活
ansible websrvs -m command -a "hostname"
ansible all -m command -a "chdir=/data ls"
ansible all -m command -a "removes=/etc/fstab cat /etc/issue" // /etc/fstab存在就执行 命令 cat /etc/issue
// command模块不支持 $ ; < > ! 等
ansible all -m shell -a "echo centos|passwd --stdin zs"
ansible all -m shell -a "sed -ri '/^enabled=/c\enabled=1' /etc/yum.repos.d/epel.repo"
// shell模块不支持$
// 被控端可以执行ansible服务器的脚本
ansible all -m script -a "/data/user.sh"
copy fetch file hostname 模块
copy模块 //将ansible的文件或文件夹拷贝到远程主机
src 支持递归,相对路径或绝对路径都可以
dest 必须设置,必须是绝对路径,不存在的一个路径
owner
mode
group
ansible websrvs -m copy -a "src=/etc/fstab dest=/data"
再执行一次不会覆盖,也不会改变
只要原文件稍有变化,就会覆盖,也就是执行成功
ansible websrvs -m copy -a "src=/etc/passwd dest=/data/fstab mode=600 owner=bin"
ansible websrvs -m copy -a "src=/etc/issue dest=/data/fstab mode=600 owner=bin backup=yes" //目标文件存在,就备份
ansible websrvs -m copy -a "content='line1\nline2\nline3' dest=/data/test.txt" //自定义文件内容拷贝到远程主机
fetch模块 //从远程主机提取文件至主控端,不能抓取文件夹
src 远程主机的文件
dest 主控制的文件夹
ansible all -m fetch -a "src=/var/log/messages dest=/data"
file模块 //改变文件的属性,可以创建软、硬链接
path 管理的文件的路径,必须
src
state [link,hard,absent]
ansible all -m file -a "path=/data/fstab mode=700"
ansible websrvs -m file -a "src=/data/fstab path=/data/fstab.link state=link" //对fstab文件创建软链接fstab.link
ansible websrvs -m file -a "src=/data/fstab path=/data/fstab.link2 state=hard" //对fstab文件创建硬链接fstab.link
ansible all -m file -a "path=/data/f1.txt state=touch" //创建空文件f1.txt
ansible all -m file -a "path=/data/f1.txt state=absent" //删除文件f1.txt
ansible websrvs -m file -a "path=/data/ state=absent" //清空目录里的所有内容
ansible 192.168.209.9 -m file -a "state=directory dest=/data/testdir" //建立空文件夹 testdir
hostname模块 //改主机名,不会改/etc/hosts文件
ansible 192.168.209.39 -m hostname -a "name=node39"
unarchive archive cron 模块
unarchive模块 //解包解压缩
将 ansible 的打包文件在本地解压缩后传到远程主机上 copy=yes
将远程的压缩包解压到远程的主机上 copy=no
sec
dest
mode
tar zcvf /data/sysconfig.tar.gz /etc/sysconfig/
ansible all -m unarchive -a "src=/data/sysconfig.tar.gz dest=/data/ copy=yes"
ansible all -m copy -a "src=/data/sysconfig.tar.gz dest=/data"
ansible all -m file -a "path=/data/etc state=absent"
ansible all -m unarchive -a "src=/data/sysconfig.tar.gz dest=/data copy=no"
archive模块 //打包压缩
path
dest
format
ansible all -m archive -a "path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2"
cron模块
minute
hour
day
month
weekday
name
job
state [present,obsent]
ansible all -m cron -a "name='display hostname' job='/usr/bin/hostname' minute=*/5 "
ansible all -m cron -a "name='display hostname' job='/usr/bin/hostname' minute=*/5 disabled=true" //就是在这条计划任务加#
ansible all -m cron -a "name='display hostname' job='/usr/bin/hostname' minute=*/5 disabled=false" //启用这条计划任务
ansible all -m cron -a "name='display hostname' state=absent "
yum service user group 模块
yum模块
ansible all -m yum -a "name=httpd state=present"
ansible all -m yum -a "name=httpd state=absent"
ansible appsrvs -m yum -a "name=lsof disablerepo=base enablerepo=sohu" //安装临时启用sohu源,禁用base源
service模块
ansible all -m service -a "name=httpd state=started enabled=yes"
ansible all -m service -a "name=httpd state=stopped"
ansible all -m shell -a "sed -ri '/^Listen/c\Listen 8080' /etc/httpd/conf/httpd.conf"
ansible all -m service -a "name=httpd state=restarted"
ansible all -m shell -a "ss -ntl|grep 8080"
user模块
name
comment
uid
home
group
system
state [present,absent]
remove [yes,no]
create_home [yes,no]
shell
ansible all -m user -a "name=mysql system=yes shell=/bin/false home=/data/mysql state=present" //家目录也被创建了
ansible all -m shell -a "getent passwd mysql"
ansible all -m user -a "name=mysql state=absent remove=yes"
ansible all -m user -a "name=mysql system=yes home=/data/mysql shell=/sbin/nologin create_home=no state=present"
group模块
ansible all -m group -a "name=group1 state=present system=yes"
ansible all -m group -a "name=group1 state=absent"
setup template 模块
ansible-doc -s setup
filter
ansible 192.168.209.9 -m setup //列出这台机器上的各种变量
ansible 192.168.209.9 -m setup -a "filter=ansible_fqdn"
ansible 192.168.209.9 -m setup -a "filter=ansible_*total*"
template模块 //只应用于 playbook
利用 ansible的template模块,安装运行httpd服务
vim /ect/ansible/hosts
[websrvs]
192.168.209.29 httpd_port=8029
192.168.209.39 httpd_port=8039
/data/playbook/templates/httpd.conf.j2
ansible服务器安装httpd服务,将配置文件拷贝并改名为 /data/playbook/templates/httpd.conf.j2
vim /data/playbook/templates/httpd.conf.j2
Listen {{ httpd_port }}
/data/playbook/httpd.yml
---
- hosts: websrvs
remote_user: root
tasks:
- name: install
yum: name=httpd state=present
tags: install
- name: config
#copy: src=/data/httpd.conf dest=/etc/httpd/conf/
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
tags: config
- name: service
service: name=httpd state=started
tags: service
handlers:
- name: restart httpd
service: name=httpd state=restarted
ansible-playbook httpd.yml