ansible简单本地配置
Ansible 中文权威指南:http://www.ansible.com.cn/
Ansible 官方文档:http://docs.ansible.com/
这里不过多描述,ansible的工作原理、playbook。很多信息可以从文档中获取。
在一个公司项目中选用什么样的辅助工具,完全看个人的喜好和项目需求。我也希望,各位在选择工具的时候;不要浪费太多时间。一个好的工具,不是最热、最火、最主流才是最好的;而是合适才是最好的。
Puppet、SaltStack、Ansible简单比较。
Puppet:
优点历史悠久,比较成熟,功能强,可远程可本地。批量执行功能没有,配置比较复杂,而且有服务端、客户端
SaltStack:
和ansible都是python流的,而且就功能上来讲,两者也极为相似,不同之处是salt stack是有客户端的,并且execution模块还用0MQ实现了pub-sub,命令和执行结果因此可以高效并行传输,
不过成也萧何败也萧何,第一个sub阶段(将querystring下发到所有机器,然后收集机器响应的阶段)太依赖与客户端返回了,如果客户端未能及时返回或未响应的话,playbook执行阶段可能会直接漏掉这部分机器而没有任何提示,
这对于运维来说是不可接受的
Ansible:
与前面的相比,没有什么特别明显的特性。配置管理方面绝对比不上puppet。批量执行也没有SaltStack高尚。但是ansible仅依赖ssh,与登录授权管理系统天然集成,简单即有效,没有比这更美妙的事情了。
为什么我选择用ansible,因为ansible,不需要客户端、部署简单、上手极其容易。所有我现在了ansible。就这么简单。
项目需求简单介绍,为了研发简单自己上传代码到业务服务器。在本地建立了jenkins+ansible集成平台,控制线上跳板机将代码推送到业务服务器。
一、本地实例配置:
说明:
1、ubuntu14.04 X64
2、安装省略
3、远程使用playbook配置
4、这里只用的哦hosts文件和playbook目录
5、所有的登录方式都是ssh+key,这里省略
二、配置文件配置
1、hosts配置:
#主机和组的配置
#定义一个主机 指定ssh_ip ssh_port ssh_user 这里为了顾及全部使用内网ip
onlinemaster ansible_ssh_host=192.168.1.241 ansible_ssh_port=22 ansible_ssh_user=root
[online]
onlinemaster
2、playbook配置:
这里涉及几个操作:
A、将代码更新到OnlineMaster本地、
B、生成当前时间到OnlineMaster ansible log
C、控制OnlineMaster ansible执行操作(将OnlineMaster上的代码推动到业务服务器)结果输出到 OnlineMaster ansible log
2016-05-30 17:06:53
D、取回OnlineMaster的 ansible log回Local 本地打印出来、
E、清空OnlineMaster的ansible log
注明:以上所有操作分为两个文件 【A】【B C D E】最终使用脚本来做构建:
#!/bin/bash
case "$1" in
online.yml)
cd /etc/ansible && ansible-playbook -i hosts playbooks/upCode/$1
;;
*)
echo $"Usage: $0 {online.yml}"
exit 3
;;
esac
case "$2" in
online_rsync.yml)
cd /etc/ansible && ansible-playbook -i hosts playbooks/rsync/$2
;;
*)
echo $"Usage: $0 {online_rsync.yml}"
exit 3
;;
esac
# 在Local本地打印出取回来的状态opera.log文件
echo ""
echo "\033[41;37m################在本地打印出取回来的状态opera.log文件,此文件是远端ansible执行的结果##########################\033[0m"
cat playbooks/log/opera.log
echo "\033[41;37m#############################################################################################################\033[0m"
echo ""
# 清空Local本地的up.log文件
rm -rf playbooks/log/opera.log
exit 0
配置A:
目录playbooks/upCode/
vim online.yml
#####################################
--- #YAML特有的开头格式
- name: hosts or group #调用hosts中配置的host或者host_group
hosts: online
tasks: #定义一下任务下面的是包含一个文件进来,这个好处是方面管理、扩展
- include: tasks/updateCode.yml
vim tasks/updateCode.yml
#####################################
---
- name: 更新代码到本地 #这里用shell command都可以
shell: "cd /var/www/project && git pull >> /etc/ansible/playbooks/log/opera.log"
配置B C D E:
目录playbooks/rsync/
vim online_rsync.yml
#############################################
---
- name: hosts or gropu
hosts: master
tasks:
- include: tasks/cDate.yml #创建时间
- include: tasks/rsync_test.yml #控制远程的ansible推动代码
- include: tasks/fetchRe.yml #获取log文件回本地
- include: tasks/cleanLog.yml #清空远程的log文件
#############################################
tasks下面的文件:
cDate.yml
*******************
--
- name: 当前时间
shell: date +"%Y-%m-%d %H:%M.%S" >> /etc/ansible/playbooks/log/opera.log
*******************
rsync_test.yml
*******************
---
- name: 控制远端ansible执行操作
shell: "cd /etc/ansible && ansible-playbook -i hosts playbooks/gamec/rsync.yml >> /etc/ansible/playbooks/log/opera.log"
*******************
*******************
fetchRe.yml
*******************
---
- name: 获取远程节点生成的opera.log文件,回到本地
fetch: src=/etc/ansible/playbooks/log/opera.log dest=/etc/ansible/playbooks/log/ flat=yes fail_on_missing=yes
# src是远端,dest是本地目录
*******************
*******************
cleanLog.yml
*******************
---
- name: 清空远端控制端opera.log文件
shell: echo "" > /etc/ansible/playbooks/log/opera.log
*******************
下回文档: ansible简单现网配置