Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。Ansible可以用来自动化日常任务,比如,服务器的初始化配置、安全基线配置、更新和打补丁系统,安装软件包等。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可:
1 Ansible 安装
yum install -y epel-release yum install ansible ansible --version #查看ansible安装参数和版本 2 安装完成后传输ssh密钥给其他远程主机
ssh-keygen #获取ssh传输key
ssh-copy-id 192.168.1.186 #传输key到指定主机(这里有哪些使用ansible的主机就传输给哪些主机) ssh-copy-id 192.168.1.187 ssh-copy-id 192.168.1.188
3 修改ansible配置文件(以下为各配置文件位置)
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
(1)ansible主配置文件(其中大部分内容无需进行修改)
/etc/ansible/ansible.cfg #ansible主配置文件
[defaults]
inventory = /etc/ansible/hosts # 主机列表配置文件
library = /usr/share/my_modules/ # 库文件存放目录
remote_tmp = HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
local_tmp = HOME/.ansible/tmp # 本机的临时命令执行目录
forks = 5 # 默认并发数
sudo_user = root # 默认sudo 用户
ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
ask_pass = True
remote_port = 22
host_key_checking = False # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log #日志文件,建议启用
module_name = command #默认模块,可以修改为shell
2)inventory 主机清单
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在hosts中将其分组命名
主机清单文件格式(我将149.10、149.11主机放在了one组,将149.12主机放在了two组,[ ]中的组名称可以随意修改,在批量部署时你还可以用 All 表示主机清单中的所有主机):
/etc/ansible/hosts #主机清单配置文件
[one] 192.168.1.186 192.168.1.187
[two] 192.168.1.188
主机清单常用表示命令:
ping所有主机
ansible all -m ping
通配符
ansible "*" -m ping
ansible 192.168.149.* -m ping
ansible "srvs" -m ping
或关系
ansible "one:two" -m ping
ansible "192.168.149.10:192.168.149.11" -m ping
逻辑与
在one组并且在two组中的主机
ansible "one:&two" –m ping
正则表达式
ansible "one:two" –m ping
ansible "~(on|tw)" –m ping
下面介绍常用的ansible模块
4 ansible模块:
1)Command 模块
功能:在远程主机执行命令,此为默认模块,可忽略-m选项
注意:此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
ansible one -m command -a 'chdir=/data cat zzx.txt'
#查看data目录下的zzx.txt文件内容
ansible all -m command -a ‘chdir=/etc creates=passwd cat passwd’
#在清单中的所有主机中/etc/passwd 如果存在就不执行cat /etc/passwd 动作
ansible all -m command -a ‘chdir=/etc removes=passwd cat passwd’
#如果存在就执行
(2)Shell 模块
功能:和command相似,用shell执行命令
ansible 192.168.1.186 -m shell -a 'echo centos | passwd --stdin wang'
#修改192.168.1.186的用户登录密码(此命令仅对centos系统有用)
ansible two -m shell -a 'ls -l /data/mysql'
#查看two主机组的主机的data下的mysql下的文件属性
ansible one -m shell -a 'echo 456 > /data/zzx.txt'
#将one主机组的主机data目录下的zzx.txt文件内容输入为456
注意:如果想将shell模块代替command模块,则更改配置文件
vim /etc/ansible/ansible.cfg
修改module_name = shell
(3)Script 模块
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
ansible one -m script -a /data/test.sh
#在one主机组下的主机中执行本ansible服务器data下的test.sh脚本
(4)Copy 模块
功能:从ansible服务器主控端复制文件到远程主机
ansible one -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=root mode=600 backup=yes"
#如目标存在,默认覆盖,此处指定先备份
src= #本机文件目录
dest #其他主机文件目录
owner #属主
mode #权限
backup #yes为先备份,默认为覆盖
ansible one -m copy -a "content='zzx line1\nzzx line2' dest=/data/test.txt"
#指定内容,直接生成目标文件 (zzx line1\nzzx1 line2 是第一行为zzx,第二行为zzx1)
content #后跟指定内容
ansible one:two -m copy -a "src=/zzx dest=/backup"
#复制/zzx目录自身,注意/zzx/后面没有/
ansible one:two -m copy -a "src=/zzx/ dest=/backup"
#复制/zzx/下的文件,不包括/zzx/目录自身,注意/zzx/后面有/