|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
K6 X9 b6 }7 I0 S( y t1 `ansible简介
6 H" W: J' O& f. E- G- c6 ^ansible是与puppet、saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet、saltstack那样都需要客户端。与puppet类似,ansible也支持丰富的功能:1 d+ K# n) I8 @) O. `
; H: p+ M3 k. {1 f. F/ A+ c6 U0 z, L- 批量执行
- 支持模块化,支持playbook(相比puppet还是弱些)
- 上手容易(puppet上手有门槛)
- 权限控制
) c* s; C1 t% R9 g7 `1 S , p; f# S2 H7 }* M% l
安装方法为:yum -y install ansible或pip install ansible。
7 P& V1 l: i6 t `/ v( @
+ B& P) k0 Q* W- Z4 J% v' m$ r& A, j4 n
使用方法! ]" A1 R9 r/ z! A! H* I3 p
: d# H" n( I$ ^; m6 j
( ]' j- j4 e+ \- O9 b8 f& X在管理集群时,ansible需要先配置集群hosts列表以方便集群操作
0 ? w( ? i. ^$ h* @( V+ Y- e0 c6 V4 y) P5 c( l
$ cat /etc/ansible/hosts
; c) w2 P/ G" W& s v[local]
$ I" F' k7 M9 k5 {4 j3 i1 _# 配置密码登陆,需要ansible本机安装sshpass% z8 n1 w( E! _$ d5 \
192.168.213.135 ansible_ssh_user=root ansible_ssh_pass=root# y% W' g( r$ t4 m. K
[zabbix]
/ X& h4 N" X/ C% t% ]3 z% U4 o) n/ K4 z# 密钥登陆! z" a0 |2 ?5 ]' _/ x: T
172.17.0.2:49154 ansible_ssh_user=root1 z* p$ W; F7 y" S8 h0 R
172.17.0.4:49155 ansible_ssh_user=root3 i O7 B. H2 C3 J$ a
[vpn]
8 e* Z" Z: i) t" U172.17.0.10
) M& @% [1 o6 r1 G S
' t/ I+ K' _, ?& f4 U5 v/ y; ?; I/ {7 I# R) U6 k* G8 ]
测试连接登陆是否OK6 }) W4 ^. R F' ~% F7 e
/ K' @& X* K5 p2 N; [/ Y1 p, w8 K$ ansible local -m ping. X8 F) q& N, ]' F0 E; m, ]
192.168.213.135 | success >> {( @4 g9 g3 O; K9 v8 g' Y
"changed": false,
! w o: |5 E* d, c "ping": "pong"- ]: `5 f' e! S
}
9 w/ j% w o2 b* @3 d' X$ c! l4 P! B* m2 z
; C5 }& h1 S4 L* U
ansible常见用法为ansible host-pattern -m 模块 -a 命令,host-pattern类似于简化的正则表达式,而模块可以通过ansible-doc -l命令来查询。下面是一些常用模块的使用方法:7 H4 l' J* R( F, E5 [& L1 m: U! |( z
# A; l) h8 Z! @( A/ P8 V- 安装软件:ansible local -m apt -a ‘name=gcc state=present’或者ansible local -m yum -a “name=nmap state=installed”
- 执行命令:ansible local -m shell -a ‘uptime’
- 拷贝文件:ansible local -m copy -a “src=/tmp/server dest=/tmp/server”
- 文件属性:ansible local -m file -a “dest=/tmp/server mode=755 owner=root group=root”
3 c! p9 c7 |: d; I, B5 } ** X t0 ~; L1 k$ @
3 r5 y$ [% e- X, f! o( |1 H9 Q) R+ _# @8 l; Q& x
playbook: K8 A! F: _; F# Z' e, \
- t: T* t& `- ~+ E( ]- _/ F; q/ |playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。 $ |% x2 G% y- T& W$ _5 w9 w9 `
7 A* V F/ C. y' c4 P# l* s% j
一个简单的playbook配置如下:5 a* p) Q, U3 K* t, q
4 F. E# }2 ~. U+ e0 G7 B' _- hosts: local
! }) O* k1 G7 E remote_user: root6 W. j) Z0 O0 _( F
tasks:
' x' z+ p1 B4 S, ~ - name: echo hi% m0 Y+ o z) R: f
shell: echo "hi"8 S; L, m+ q U i; f; k G2 B
* e$ T* E8 @ n
3 W. C+ I% [! c; F/ q1 |! N: Bansible还支持设置handlers,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下: R) K( x; q4 S- J& }1 v, D
. ] R1 F+ u6 |! v; K# playbook.yml, W0 s8 Z. b- _: f
---+ N$ s' h' E1 T: _& M9 }
- hosts: local # hosts中指定0 ~" [% [3 \8 d( ^! v( u3 k, [
remote_user: root # 如果和当前用户一样,则无需指定
7 p+ i) B5 I d+ t# M! T. ^+ p, g( F tasks:
. e6 B5 k# V1 @& L/ Y% Q - name: whoami
4 J% {! b7 D& v) U! `" e1 X copy: src=~/hosts dest=~/hosts.dest # 本地拷贝到远端* i& m7 n$ d: C) w
notify: # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行 m5 u p# B/ @2 c
- clear copy # 调用handler7 h% d% L' p! H0 I! C+ Q
handlers:! i! |9 H5 A/ {2 O: R W
- name: clear copy
- C% m* [ {0 n/ R7 | shell: 'mv ~/hosts.dest hosts.del' # 假装删除' G, w6 f/ ? E2 t
|
|