设为首页收藏本站
开启辅助访问 切换到窄版

自动化运维——ansible

[复制链接]
作者:maria 
版块:
学习笔记 Linux操作系统 发布时间:2016-5-2 20:55:16
35902
maria 发表于 2016-5-2 16:33:09 | 显示全部楼层 |阅读模式
官方文档  http://docs.ansible.com/ansible/, f7 i3 l2 P4 {9 I9 d$ q. M

0 B' B7 ~' `9 e8 Z8 Q/ ~特性" j2 N- T: P$ g7 t
(1)、no agents:不需要在被管控主机上安装任何客户端;
! u- f3 |+ n: N7 ?$ a(2)、no server:无服务器端,使用时直接运行命令即可;
* W( C9 P9 Y! k: [8 S6 [+ c6 p(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;
7 H4 y0 [) O$ f+ `! Y8 g(4)、yaml,not code:使用yaml语言定制剧本playbook;  E$ h  N1 P  `5 |1 g8 Y. h
(5)、ssh by default:基于SSH工作;
! y, D5 g3 l/ A: M. a' I(6)、strong multi-tier solution:可实现多级指挥。% m) \* x  b0 P6 ~+ a

2 {1 W, @1 q7 ?/ M, |/ l5 l优点
* f- c% H* V# s: k. g% s(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;6 o% e/ U5 a9 C' ]  r
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;) k6 q# I. B' g3 F
(3)、使用python编写,维护更简单,ruby语法过于复杂;  }, e" d& ^7 Z' l4 H
(4)、支持sudo。' D$ B% T4 M4 B$ `5 c3 A& k0 r
1 J' ~0 ?5 w" g$ T; h' Y  D



上一篇:python练习题
下一篇:I value the forum post. Fantastic.
回复

使用道具 举报

maria  楼主| 发表于 2016-5-2 17:40:23 | 显示全部楼层
第一部分 安装与配置
. [% `3 K3 U$ f1 x# W- S1. 安装; R; M* A7 b0 J% O- Q4 f
通过yum安装,首先安装epel扩展源,然后安装ansible% O' q% C3 ~, L) B4 {5 G1 m, o( b
  1. yum install -y epel-release- [6 u& S- U* \" Z
  2. yum install -y ansible
复制代码
2.  配置
% c/ j3 c: o2 F" e- i- v3 E4 n! s(1) ssh密钥配置
) }. O5 V" n5 i1 ^1 ]; F) f7 S& h首先生成密钥对+ d+ Z$ J# t: A# O& A1 V: H
  1. ssh-keygen -t rsa  #直接回车即可,不用设置密钥密码
复制代码
7 y2 }$ T7 _& W, F- @
这样会在root家目录下生成.ssh目录,这里面也会生成两个文件 id_rsa 和  id_rsa.pub 0 R2 g6 V% x; S4 p) y( E
然后把公钥(id_rsa.pub)内容放到对方机器的/root/.ssh/authorized_keys里面,包括本机
+ D1 e$ f3 j% W" T
  1. cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
复制代码
对方机器上要配置好 authorized_keys文件的权限# P& Z! q5 l; L2 N( i
  1. chmod 700 /root/.ssh/
    + m6 Q  \  @, M
  2. chmod 600 /root/.ssh/authorized_keys
复制代码
还需要关闭selinux
% T2 a* ]7 q4 A7 r
  1. sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config;
    ) B/ w& B0 V! Z: m- x
  2. setenforce 0;
    ; _( d; g1 u- V. v9 X
  3. iptables -F && service iptables save;
复制代码

. o" S- A: ^! n! H; a(2) ansible 配置
8 T3 I$ z& ]5 y7 \3 ~. t
  1. vi  /etc/ansible/hosts
复制代码
增加
! C' `) I/ B9 r' R5 k3 `! C8 j
  1. [ma2c.cn]6 t8 D: P5 z) O3 E9 q
  2. 127.0.0.16 ]$ p; `$ K* [1 i1 }- H( A
  3. 192.168.199.212. v6 b% ~. g1 n2 w1 Z
  4. 192.168.199.190
复制代码
: [, \+ O1 _: n  d) a% a
说明: ma2c.cn为主机组名字,自定义的。 下面几个ip为组内的机器ip。
回复 支持 反对

使用道具 举报

maria  楼主| 发表于 2016-5-2 20:55:16 | 显示全部楼层
第二部分 远程执行命令和shell脚本7 M/ z% O( P7 u/ T
1、远程执行命令
/ s4 q6 |; F5 q
  1. ansible ma2c.cn -m command -a 'date'
复制代码
其中ma2c.cn就是上面定义的hosts,这里也可以单用ip
: _& O" J) d" I/ h" B9 Z       -m 表示使用模块9 V) ?6 y; W+ ]# A! k
       command 表示后面使用的是命令, B: a) t5 G1 E5 h
QQ图片20160502191215.png ' T; W9 C3 J: G/ G( U6 L
如果提示错误信息
9 d7 Z! B, \6 d$ B! b
  1. 错误: "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
复制代码
QQ图片20160502204828.png
. ^9 I2 k5 j; x$ f解决方法:
$ a7 ^  V: G2 J' ^8 V2 v- c" D
  1. yum install -y libselinux-python
复制代码
注意这是需要客户端安装的。6 F- s9 L% q$ i$ U8 Y4 Q: k2 [; i

( D) x) n/ C8 v另外,在设置完密钥登录之后,最好使用ssh命令登录一下所使用到的主机,使ansible服务器上产生know_hosts文件。
9 U, b( Z5 e9 ?% q, E  \) u QQ图片20160502193043.png 7 m- L, V# N4 T  T
这样再次使用ansible命令时就不用确认了。否则每次使用ansible命令时都要确认,影响执行效率6 D& z+ u* l: ]! I$ z
QQ图片20160502192344.png 9 c5 a& O' d1 D  M# b0 l# J
1 `! `$ V" V# Y, _, h8 ^
2、拷贝文件或者目录, c3 j' D/ \) j2 v2 |
  1. ansible 192.168.199.212 -m copy -a "src=/tmp/123.txt dest=/tmp/123"
    ! X+ a! h  p. [) S' E5 o9 }+ h
  2. mkdir /tmp/tmp15 f% ]! [" R4 c! b2 e0 a
  3. cp /tmp/123.txt /tmp/tmp1
    6 d/ |4 X; [7 Y) V- a
  4. ansible 192.168.199.212 -m copy -a "src=/tmp/tmp1 dest=/tmp/234"
复制代码
QQ图片20160502200440.png
5 [: ]5 J1 o; P3 _, v. K$ M- P; m其中 src是服务端源文件或目录
2 k* P: V; ]9 @! M3 ]6 l8 }: u       dest是客户端目标文件或目录+ }7 b+ ?0 z$ F
注意:源目录会放到目标目录下面去。
% ^' A( w/ t& G QQ图片20160502200558.png , Q0 Z" q+ p3 g$ o! f$ X4 p
3、远程执行一个shell脚本
. p% L9 k7 y7 z, p' k首先创建一个shell脚本
0 E' a1 a( M/ f4 D  k6 R; Y
  1. vim  /tmp/testsh.sh  
复制代码
加入内容0 r- q! J2 R" a  A
  1. #!/bin/bash
    1 R; ~! {; R7 Q2 |) }
  2. echo `date` > /tmp/test.txt
    8 Q8 W% T5 j: t1 G9 Q+ t
  3. echo $HOSTNAME >> /tmp/test.txt5 G6 D; F0 ^* b! E' q9 A# y. b- e& V
  4. cat /tmp/test.txt
复制代码
QQ图片20160502203138.png
9 q+ M  v- l) s4 i. _6 e然后把该脚本分发到各个机器上: W5 M' E+ ]  M9 Z, _# v
  1. ansible ma2c.cn -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
复制代码
QQ图片20160502205219.png - Z8 [+ [# i3 ~# ]
最后是批量执行该shell脚本$ M2 z  P! a9 y- P0 Z) [. t+ L2 k
  1. ansible ma2c.cn -m shell -a "/tmp/testsh.sh"
复制代码
QQ图片20160502205442.png
/ _5 h% v- n. \) L
$ m3 W" k5 d7 F' f0 h$ rshell模块,还支持远程执行命令并且带管道
( Y( _! J4 e/ X
  1. ansible ma2c.cn -m shell -a "ps -ef | grep httpd "
复制代码
QQ图片20160502201740.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表