title: ansible 学习与实践

date: 2016-05-06 16:17:28

tags:

ansible 学习与实践

一 介绍

ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。

ansible是基于模块工作的,ansible本身没有批量部署能力,真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架,框架包括

  • 连接插件connection plugins负责和被监控端实现通信。
  • Host Inventory:指定操作的主机,是一个配置文件里面定义监控的主机
  • 各种模块核心模块command模块自定义模块
  • 借助于插件完成记录日志邮件等功能
  • PlayBooks:剧本执行多个任务时。并非必需可以让节点一次性运行多个任务

架构如下

二 部署

ansible 部署很简单

无论是linux还是mac都建议使用pip安装,这样可以做到心里有数,方便后期维护

pip install ansible

三 基本配置

ansible使用的是openssh进行数据命令的传递,为了方便管理最好和agent端建立信任

建立信任方法

ssh-keygen
ssh-copy-id -i xx@10.x.x.x

另外还有一个agent的列表文件,centos默认在 /etc/ansible/hosts

生产环境建议自己指定,方便管理

指定方式 这里就引出了另外一个文件 ./ansible.cfg

ansible.cfg中可以设定一些默认值,这样就不需要对同样的内容输入好多遍,ansible.cfg建议放在主目录下隐藏起来,如.ansible.cfg

ansible会默认加载这个文件

简单写法

[defaults]
hostfile = ~/Nconf/ansible/hosts
remote_user = nick
private_key_file = ~/.ssh/id_rsa
host_key_checking = False

指定好了hosts文件的目录 然后开始写hosts文件,很简单如下

[me]
127.0.0.1 [home-child]
10.211.55.4
10.211.55.5
10.211.55.6
10.211.55.7 [work-local]
192.168.1.1
192.168.1.2

如果之前没有做key认证的话,做一下信任key认证,不想做认证也可以这样写hosts文件

[test]
10.211.5.9 ansible_ssh_user=root ansible_ssh_pass=123456

这样做的确定是密码是明文的,比较危险

简单使用

eg:

进阶 Ad-Hoc

Ad-Hoc是相对于playbook来说的,一般来说学习了playbook你才能体会到ansible的强大,Ad-Hoc类似于在终端中使用命令行工具,可以处理一些简单的工作

接下来我就学习如何使用Ad-Hoc

先演示几个例子

重启web组的服务器,每次重启十台

$ ansible atlanta -a "/sbin/reboot" -f 10

执行这个命令默认是以当前用户的身份执行,如果想以特定用户的身份执行可以这样写

$ ansible atlanta -a "/usr/bin/reboot" -f 10 percent-u username

如果想通过sudo去执行命令,如下:

$ ansible atlanta -a "/usr/bin/foo" -u username --sudo [--ask-sudo-pass]

ansible有许多模块,默认是 ‘command’,也就是命令模块,我们可以通过 -m 选项来指定不同的模块.在前面所示的例子中, 因为我们是要在 Atlanta 组下的服务器中执行 reboot 命令,所以就不需要显示的用这个选项指定 ‘command’ 模块,使用 默认设定就OK了.一会在其他例子中,我们会使用 -m 运行其他的模块

ansible 对she'll的支持

使用shell模块的方法如下

$ ansible raleigh -m shell -a 'echo $TERM'

文件传输

$ ansible test  -m  copy -a "src=/Users/nick/Downloads/main_identity_card.sql dest=/tmp/" -u root

修改文件属性

$ ansible test  -m  file  -a "dest=/tmp/main_identity_card.sql mode=600"

修改所属用户

$ ansible test  -m  file  -a "dest=/tmp/main_identity_card.sql mode=600 owner=sunhong group=sunhong"

创建目录

$ ansible test  -m  file  -a "dest=/tmp/hehe state=directory"

删除目录,默认就是递归的,比较危险,所以一定要确定好路径没有问题再执行

$ ansible test  -m  file  -a "dest=/tmp/work state=absent"

Ansible 提供对 yum的支持.

$ ansible test -m yum -a "name=tree state=installed"  #安装
$ ansible test -m yum -a "name=tree state=removed" #卸载
$ ansible test -m yum -a "name=tree state=latest" #更新

用户和组

$ ansible test -m user -a "name=wanzi password=wanzi"   #创建用户
$ ansible test -m user -a "name=wanzi state=absent remove=yes" #删除用户

git

$ ansible test -m git -a "repo=https://github.com/colder219/bulldog.git dest=/tmp/work version=HEAD"

服务管理

$ ansible test -m service -a "name=httpd state=restarted"   #重启服务
$ ansible test -m service -a "name=httpd state=started" #启动服务
$ ansible test -m service -a "name=httpd state=stoped" #停止服务

如果服务依靠supervisor管理

$ ansible test -m supervisorctl -a "name=mysql-3306 state=restarted config=/home/waimaiw/supervisor/conf/supervisord.conf"

重启什么的基本一样,就不用写了,生产环境一般都是要指定配置文件路径的。

ansible基本的就这么多了,不过ansible真正的精华还是在playbook上面,这个下次和大家分享。

ansible 学习与实践的更多相关文章

  1. Ansible学习实战手记-你想要知道的可能都在这里了

    最近接触了ansible工具,查找了一些资料,也做了一些总结.希望能给刚接触的新手带来一些帮助. 此总结有实际例子,大部分也是从实践中用到才逐一总结的. 当然可能肯定一定会存在一些错误和纰漏,还望大家 ...

  2. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  3. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse

    生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...

  4. Google App Engine 学习和实践

    这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.ne ...

  5. PMBOK 学习与实践分享视频

    本系列为自己在学习PMBOK时进行的总结与分享,每一节主要包括两部分: 对PMBOK本身的一个结构笔记和讲解. 对自己项目管理工作的一个总结和思考. PMBOK 学习与实践分享视频内容清单 人力资源管 ...

  6. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

  7. ansible学习笔记一

    ansible学习笔记一 参考博客: ansible学习 - 51CTO博客 一.安装 1 .下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mir ...

  8. Weex学习与实践

    Weex学习与实践(一):Weex,你需要知道的事 本文主要介绍包括Weex基本介绍.Weex源码结构.初始化工程.we代码结构.Weex的生命周期.Weex的工作原理.页面间通信.boxmodel ...

  9. 免考final linux提权与渗透入门——Exploit-Exercise Nebula学习与实践

    免考final linux提权与渗透入门--Exploit-Exercise Nebula学习与实践 0x0 前言 Exploit-Exercise是一系列学习linux下渗透的虚拟环境,官网是htt ...

随机推荐

  1. j2ee开发中的“java容器”和“web容器”有什么区别?

    http://blog.csdn.net/zi_jun/article/details/7387259

  2. [转] linux 下 进程和线程的区别

    1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...

  3. 不用修改nginx的高并发合并回源架构

    nginx的连接都是一对一的,想改成一对多,比较麻烦,所以曾经看完了Nginx代码想改成一对多,我还是没改成,后来改变了一下思路想到一个更简单的方案,而且不失并发性能,还容易控制,下面先给出下面的图: ...

  4. Sencha Architect 激活方法

     Sencha Architect 2是ExtJS和Sencha Touch的官方可视化IDE工具.最新版本是2.2,说是破解,其实是修改License来实现无限试用而已. 1.先下载安装官方软件,大 ...

  5. windows7下python环境变量配置

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行或cmd里直接使用python命令. 1. 首先需要在系统中注册python环境变量:假设pyth ...

  6. java反射 -Class类

    Class类:任何类都是Class类的对象 Class类的实例对象的三种表现形式:1.通过某个类的.class实现 2.某个类的对象的getClass()方法 3.Class.forName() 注意 ...

  7. 解读 《2014 最流行编程语言》 by Code Eval

    此文已转至http://cn.abnerchou.me/2014/02/23/fa87ae80/ 原文:点我 原文翻译:点我 首先了解下CodeEval是做什么的: A tool for auto e ...

  8. css、js的相互阻塞

    先决条件:脚本前面存在外部样式 以下试验虽然是在chrome下,但是对于IE8+以及其他浏览器也适用. 1.内联脚本(http://jsbin.com/mudab/1) <!DOCTYPE ht ...

  9. C 語言中的編譯指示 (Pragma)

    編譯指示 #pragma 是用來告知編譯器某些特殊指示,例如不要輸出錯誤訊息,抑制警告訊息,或者加上記憶體漏洞檢查機制等.這些指示通常不是標準的 C 語言所具備的,而是各家編譯器廠商或開發者所制定的, ...

  10. MFC的杂七杂八

    1.判断焦点当前所在控件 2.动态移动控件位置 3.GDI+绘制文字 4.编辑框跳变显示 5.最大化显示 6.Uint uFormat常用值 7.获取菜单个数 8.添加气泡提示 9.编辑框输入时响应函 ...