最近看ansible自动化运维工具,前段时间刚好有需求。最近发布系统上线,需要安装agent,400多台服务器手动安装当然费事,《ansible自动化运维》华章出的也看了80多页了,就试着写了一个agent推送和zabbix-agent推送,主要是发布系统agent推送,之前的zabbix-agent推送已经写成shell脚本推送,这边就不显摆了。公司也是刚用ansible,线上都是脚本自动化。
以下比较简单:
ansible play-book的树行结构如下:
主要是推发布系统的agent:
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
38
39
40
41
42
43
44
|
$ tree
.
├── agent.yaml
├── ansible.cfg
├── desheng.list
├──
file
.list
├──
file
.sh
├── hosts
├── hosts_agent
├── hosts_new
├── logstash.retry
├── logstash.yaml
└── roles
├── agent
│ ├── files
│ │ └── agent.tgz
│ ├── handlers
│ ├── stop.sh
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ └── vars
│ └── main.yaml
├── logstash
│ ├── files
│ │ └── logstash-2.4.1.
tar
.gz
│ ├── handlers
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ │ ├── logstash.j2
│ │ └── logstash.j2.bak
│ └── vars
└── zabbix_agent
├── files
│ └── zabbix.
tar
.gz
├── handlers
│ └── main.yml
├── tasks
│ └── main.yaml
├── templates
│ └── zabbix_agentd.conf.j2
└── vars
└── main.yaml
|
agent play-book的树形结构如下:
1
2
3
4
5
6
7
8
9
10
11
|
$ tree agent
agent
├── files
│ └── agent.tgz
├── handlers
├── stop.sh
├── tasks
│ └── main.yaml
├── templates
└── vars
└── main.yaml
|
$ cat main.yaml #ansible-playbook tasks的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
- name: pkill agent process
script:
/etc/ansible/roles/agent/stop
.sh
- name: remove link
file
: path={{ agent_home }}/{{ bag }} state=absent
- name:
scp
agent
copy: src=agent.tgz dest={{ agent_home }}
- name:
tar
zxf agent.tgz
shell: chdir={{ agent_home }}
tar
-zxf agent.tgz
- name: link
file
: src={{ agent_home }}/{{ bag }}-{{ version }} dest={{ agent_home }}/{{ bag }} state=link
- name: running agent
shell:
cd
{{ agent_home }}/{{ bag }} &&
nohup
python swift_agent.py > agent.log 2>&1 &
- name: remove agent.tgz
file
: path={{ agent_home }}
/agent
.tgz state=absent
|
#vars 主要是定义几个变量。
1
2
3
4
5
|
$
cat
main.yaml
agent_home:
/data
user: ody
version: v3.0
bag: agent
|
#ansible的当下目录放一个stop脚本,主要是发布新的agent是杀掉在运行的agent进程。
1
2
3
|
$
cat
stop.sh
#!/bin/bash
ps
-ef |
grep
python |
grep
-
v
"grep"
|
awk
'{print $2}'
|
xargs
kill
-9
|
本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1886323