0%

CentOS 7通过yum安装ansible

一、ansible介绍

1、ansible 简介

Ansible官方的 title 是“Ansible is Simple IT Automation”——简单的自动化IT工具。Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于Chef和Puppet,但是有一个不同的优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。

2、ansible 特点

(1) No agents:不需要在被管控主机上安装任意客户端;
(2) No server:无服务器端,使用时直接运行命令即可;
(3) Modules in any languages:基于模块工作,可使用任意语言开发模块
(4) YAML,not code:使用yaml语言定制剧本playbook;
(5) SSH by default:基于SSH工作;
(6) Strong multi-tier solution:可实现多级指挥;

二、Ansible安装使用

1、 设置EPEL仓库

1
2
[root@object1 ~]# rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm

2、使用yum安装Ansible

1
[root@object1 ~]# yum install -y ansible

3、设置用于节点鉴权的SSH密钥

1
2
3
4
5
#在Ansible服务端生成密钥
[root@object1 ~]# ssh-keygen
#使用ssh-copy-id命令来复制Ansible公钥到节点中
[root@object1 ~]# ssh-copy-id -i root@192.168.1.215

4、为Ansible定义节点的清单

1
2
3
4
[root@object1 ~]# cat /etc/ansible/hosts
[test]
192.168.1.226
192.168.1.215

5、尝试在Ansible服务端运行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#使用ping检查ansible节点的连通性
[root@object1 ~]# ansible -m ping 'test'
192.168.1.226 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
}
192.168.1.215 | SUCCESS => {
"changed": false,
"ping": "pong"
}

#检查Ansible节点的运行时间(uptime)
[root@object1 ~]# ansible -m command -a "uptime" "test"
192.168.1.226 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
}
192.168.1.215 | SUCCESS | rc=0 >>
07:11:16 up 42 days, 13:43, 1 user, load average: 0.00, 0.00, 0.00

#检查节点的内核版本
[root@object1 ~]# ansible -m command -a "uname -r" "test"
192.168.1.226 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
}
192.168.1.215 | SUCCESS | rc=0 >>
2.6.32-573.3.1.el6.x86_64

#给节点增加用户
[root@object1 ~]# ansible -m command -a "useradd test" "test"
192.168.1.226 | SUCCESS | rc=0 >>
192.168.1.215 | SUCCESS | rc=0 >>

6、模块的使用

查看各模块的使用方法

1
2
3
4
5
ansible-doc [options] [modules]  :Show Ansible module documentation 
-l 列出所有的ansible模块
-s 列出该模块的相关指令
可以直接使用 ansible-doc 模块名 来查看模块的使用,如
# ansible-doc htpasswd

三、playbook的使用

YAML Ain’t Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。

YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用”-“来代表,Map里的键值对用”:”分隔。

1、playbook使用

1
ansible-playbook test.yaml

下面就是一个只包含了一个play的playbook,在写playbook的时候,一定要记住在 hosts,yum(模块儿名)等后带空格,否则会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#这个是你选择的主机
- hosts: webservers
#这个是变量
vars:
http_port: 80
max_clients: 200
#远端的执行权限
remote_user: root tasks:
#利用yum模块来操作
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
#触发重启服务器
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
#这里的restart apache 和上面的触发是配对的。这就是handlers的作用。相当于tag
handlers:
- name: restart apache
service: name=httpd state=restarted

2、playbook案例

corosync.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
- hosts: hanodes      #指定要执行任务的主机,可由冒号分隔主机组
remote_user: root #指定远程主机上执行任务的用户
vars: #定义如下2个变量
crmsh: crmsh-1.2.6.4.el6.x86_64.rpm
pssh: pssh-2.3.1-2.el6.x86_64.rpm
tasks: #指定需执行的任务列表,每个task都有其name和使用的模块及参数
- name: test connection
ping: #ping模块无需执行参数
remote_user: jason #在task中指定远程主机上执行任务的用户
sudo: yes #使用sudo在远程主机上执行任务
- name: corosync installing
yum: name=corosync state=present
- name: pacemaker installing #定义一个软件安装任务
yum: name=pacemaker state=present #使用yum安装,并配置需安装的软件名(name),及状态(state)
- name: crmsh rpm packages
copy: src=/ansible/corosync/packages/{{ crmsh }} dest=/tmp/{{ crmsh }}
- name: pssh rpm packages
copy: src=/ansible/corosync/packages/{{ pssh }} dest=/tmp/{{ pssh }}
- name: crmsh installing
command: yum -y reinstall /tmp/{{ crmsh }} /tmp/{{ pssh }}
- name: authkey configure file
copy: src=/ansible/corosync/conf/authkey dest=/etc/corosync/authkey
- name: authkey mode 400 #定义一个文件权限设置任务
file: path=/etc/corosync/authkey mode=400
notify: #定义一个通知,当此任务执行时,可以激发响应的handler
- restart corosync
- name: corosync.conf configure file
copy: src=/ansible/corosync/conf/corosync.conf dest=/etc/corosync/corosync.conf
tags:
- conf
notify:
- restart corosync
- name: ensure the corosync service startup on boot
service: name=corosync state=started enabled=yes
handlers: #定义当关注的资源发生变化时,需采取的操作
- name: restart corosync #定义一个服务重启任务
service: name=corosync state=restarted

heartbeat.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- hosts: hbhosts
remote_user: root
tasks:
- name: ensure heartbeat latest version
yum: name=heartbeat state=present
- name: authkeys configure file
copy: src=/root/hb_conf/authkeys dest=/etc/ha.d/authkeys
- name: authkeys mode 600
file: path=/etc/ha.d/authkeys mode=600
notify:
- restart heartbeat
- name: ha.cf configure file
copy: src=/root/hb_conf/ha.cf dest=/etc/ha.d/ha.cf
notify:
- restart heartbeat
handlers:
- name: restart heartbeat
service: name=heartbeat state=restarted