| 认识
是一款开源自动化运维工具。它有如下特点:
目前已经被公司收购,它在上是一个非常受欢迎的开源软件
| 安装
1)机器准备
主机名
机器IP
作用
192.168.222.101
控制端,安装
192.168.222.102
被控端,不需要安装
2)安装(上)
yum install -y epel-release
yum install -y ansible
3)设置主机名和/etc/hosts,关闭(所有都设置)
hostnamectl set-hostname aminglinux01 #222.101上
hostnamectl set-hostname aminglinux02 #222.102上
setenforce 0 #所有机器都执行
4)设置密钥认证
ls ~/.ssh/id_rsa || ssh-keygen -t rsa ##如果机器上之前没有生成过密钥,需要重新生成
ssh-copy-id root@aminglinux01 #设置密钥认证,到aminglinux01
ssh-copy-id root@aminglinux02 #设置密钥认证,到aminglinux02
5)编辑hosts配置
vi /etc/ansible/hosts #最后面增加
[testhost]
192.168.222.101
192.168.222.102
说明:为主机组名字,自定义的。下面两个ip为组内的机器ip,也可以写成主机名的形式。
| 远程执行命令
1)针对整个主机组
ansible testhost -m command -a 'hostname'
说明:这里的 为主机组名,-m后边是模块名字,-a后面是命令。
2)针对一个ip
ansible 192.168.222.102 -m command -a 'hostname'
| 拷贝文件或者目录
1)拷贝目录
ansible 192.168.222.102 -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755"
注意:源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。
2)拷贝文件
ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/123"
说明:这里的/tmp/123和源机器上的/etc/是一致的,但如果目标机器上已经有/tmp/123目录,则会再/tmp/123目录下面建立文件
注意:如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果desc是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。
|远程执行脚本
1)首先创建一个shell脚本
cat > /tmp/test.sh <<EOF
#!/bin/bash
echo `date` > /tmp/ansible_test.txt
EOF
2)然后把该脚本分发到各个机器上
ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
3)最后是批量执行该shell脚本
ansible testhost -m shell -a "/tmp/test.sh"
说明:-m shell,调用shell模块,
这个shell模块,还支持远程执行命令并且带管道
ansible testhost -m shell -a "cat /etc/passwd|wc -l "
|管理任务计划
1)添加任务计划
ansible testhost -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt' weekday=6"
注意:用创建好任务计划后ansible自动化运维ansible自动化运维,就不要再手动更改了,否则就无法更新或者删除了
2)删除任务计划
若要删除该cron 只需要加一个字段 state=
ansible testhost -m cron -a "name='test cron' state=absent"
其他的时间表示:
|安装rpm包/管理服务
1)安装redis
ansible testhost -m yum -a "name=redis"
在name后面还可以加上state=,表示直接启动,=yes表示开机自启动
ansible testhost -m service -a "name=redis state=started enabled=yes"
2)卸载
ansible testhost -m yum -a "name=redis state=removed"
|常用模块总结
1)使用文档
列出所有模块
ansible-doc -l
查看指定模块文档
ansible-doc cron
2)ping模块
主要用来检测连通性
ansible testhost -m ping
3)用户和组模块
创建用户
ansible testhost -m user -a 'name=aming001'
设置密码前,先给明文密码加密
openssl passwd -1 aming-123 #明文密码为aming-123
$1$RLj1L/6B$wBzcDG2wWL9.uVDLhsxrr0 #这个字符串为获取到的加密密码
用给用户设置密码
ansible testhost -m user -a 'name=aming001 password=$1$RLj1L/6B$wBzcDG2wWL9.uVDLhsxrr0'
创建用户时,指定uid和扩展组
ansible testhost -m user -a 'name=aming002 uid=1003 groups=wheel'
删除用户
ansible testhost -m user -a 'name=aming001 state=absent remove=yes' #remove=yes表示删除用户家目录
创建组
ansible testhost -m group -a 'name=grp1 gid=1010'
删除组
ansible testhost -m group -a 'name=grp1 state=absent'
4)模块
可以将控制端上脚本,在远程被控端执行,也就是说被控端可以没有那个脚本存在
首先创建一个脚本
cat > /usr/local/sbin/test.sh <<EOF
hostname
w
date
EOF
给执行权限
chmod a+x /usr/local/sbin/test.sh
然后执行
ansible testhost -m script -a '/usr/local/sbin/test.sh'
模块常用参数:
5)setup模块
获取主机信息
ansible testhost -m setup
还可以加上过滤参数
ansible testhost -m setup -a 'filter=nodename'
6)file模块
用来创建文件或目录,修改已经存在的目录的权限,创建软硬连接
创建目录,设置属主和属组和权限
ansible 'testhost' -m file -a 'path=/backup state=directory owner=root group=root mode=0000'
级联创建目录
ansible 192.168.222.101 -m file -a 'path=/1/2/3 state=directory mode=000 recurse=yes'
如果将state设置为touch,则最后面的3就是文件了
ansible 192.168.222.101 -m file -a 'path=/1/2/3 state=absent' ##state=absent为删除,它只会删除3目录,而前面的/1/2并不会删除
ansible 192.168.222.101 -m file -a 'path=/1/2/3 state=touch mode=000' #touch表示3为文件,而不是目录了
当state设置为touch时,那么务必要保证文件上一级目录存在
ansible testhost -m file -a 'path=/backup/1/2.txt state=touch mode=0700' #会报错,因为/backup/1目录并不存在
创建软链接
ansible testhost -m file -a 'src=/etc/fstab dest=/tmp/1.txt state=link mode=600'
说明:这里的mode为src文件的权限,并不是软链接dest的权限,软链接文件权限为777