最近看ansible自动化运维工具,前段时间刚好有需求。最近发布系统上线,需要安装agent,400多台服务器手动安装当然费事,《ansible自动化运维》华章出的也看了80多页了,就试着写了一个agent推送和zabbix-agent推送,主要是发布系统agent推送,之前的zabbix-agent推送已经写成shell脚本推送,这边就不显摆了。公司也是刚用ansible,线上都是脚本自动化。
以下比较简单:
ansible play-book的树行结构如下:
主要是推发布系统的agent:
$ 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的树形结构如下:
$ tree agent agent ├── files │ └── agent.tgz ├── handlers ├── stop.sh ├── tasks │ └── main.yaml ├── templates └── vars └── main.yaml
$ cat main.yaml #ansible-playbook tasks的内容
- 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 主要是定义几个变量。
$ cat main.yaml agent_home: /data user: ody version: v3.0 bag: agent
#ansible的当下目录放一个stop脚本,主要是发布新的agent是杀掉在运行的agent进程。
$ cat stop.sh #!/bin/bash ps -ef | grep python | grep -v "grep" | awk ‘{print $2}‘ | xargs kill -9
本文出自 “LINUX Super梦” 博客,请务必保留此出处http://215687833.blog.51cto.com/6724358/1886323
原文地址:http://215687833.blog.51cto.com/6724358/1886323