centos下安装使用ansible自动化工具

340 阅读4分钟

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/后面有/