ansible和playbook的基本用法

ansible简介:一款自动化软件,基于python开发,糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能。

优点:只需要SSH和PYthon即可使用;无需要客户端;门槛低;使用公司较多;基于PYthon开发。

依赖关系:ansible默认通过ssh协议管理服务,被管理主机要开启ssh服务,允许absible主机登陆,托管节点需安装PYthon2.5以上的版本等。

ansible配置文件寻找顺序:(默认路径:/etc/ansible/ansible,cfg)
1.先寻找ANSIBLE_CONFIG变量定义的配置文件
2.其次检查当前目录下的./ansible.cfg文件
3.其次检查当前用户家目录下的 ~/ansible.cfg文件
4.最后检查/etc/ansible/ansible.cfg文件

ansibel.cfg配置文件
inventory定义托管主机地址配置文件路径名
inventory指定的配置文件,写入远程主机的地址。
ansible需要给所有主机部署秘钥
ssh-keygen 创建秘钥  ssh-copy-id  所有主机名称

部署文件组 :  vim  /etc/ansible/hosts
[web] web1 web2  [db] db1  db2  [other]  cache

常见命令  ansible 主机集合 -m 模块名称  -a  模块参数 (-i 文件路径脚本 -k 交互密码)
ansible all –list      //可以查看主机列表
ansible  all  -m ping    //ping所有主机 ( -k 交互式,没秘钥验证可加上使用)

模块使用:
ansible-doc :模块手册,相当于shell和man,
– ansbile-doc   -l   列出所有模块
– ansible-doc   modulename  查看帮助
ping模块:  检查ssh的连通性, ansible  主机  -m ping

command模块:默认模块,可远程执行命令
用法:ansible 主机  -m  command -a  [  命令 ]
例如:ansible all -m command -a  “uptime”
注意:命令需要可直接执行,如果有 <> | & 则执行不成功,不能解析系统变量

shell模块:基本上与command一样,区别是shell通过/bin/sh执行,可执行任意命令,不能执行交互式命令,例如VIM,TOP等。
用法:ansibele all  -m  shell -a ‘uptime’
ansible web -m  shell -a ‘echo  ${HOSTNAME}’

scipt模块:在本地编写脚本,然后使用script模块批量执行
vim /etc/a.sh
ansible  web -m  script  -a ‘/root/a.sh’

yum模块:使用yum来管理管理软件包
-name:软件包名字  -state:动作(installed,removed)
ansible db -m yum -a ‘name=”mariadb-server ” state=installed ‘  安装
ansible cache -m yum -a ‘name=”lrzsz”  state=removed’

service模块:可启动服务
-name:服务名称  -enabled:时候开机启动 yes|no   -state:服务启动,停止
ansible cache -m service -a ‘name=”sshd”  enabled=”yes”  state=”started”‘

copy模块: 主要用于分发配置文件,复制管理主机的文件。
复制文件:ansible all -m copy -a ‘src=/etc/resolv.conf  dest=/etc/resolv.conf’
复制目录:andible all -m copy -a ‘src=/etc/yum.repo.d/   dest=/etc/yum.repos.d/’

lineinfile模块 : 类似于sed一种行编辑替换模块,匹配行,修改整行。
-path  目标文件   -regrexp 正则表达式  -line 最终修改结果
例如:ansible db -m lineinfile -a     ‘path=”/etc/my.cnf” regexp=”^binlog-format” line=”binlog-format=row”‘

replace模块:类似于sed一种行编辑替换模块,匹配行,修改某字段。
-path  目标文件   -regrexp 正则表达式  -replace 替换后的结果
例如:ansible db -m replace -a ‘path=”/etc/my.cnf”  regexp=”row” replace=”mixed”‘  (绿色表示执行成功,黄色表示文件发生改变)
template模块:类似于copy模块,但是能使用变量。

playbook:用于ansible配置,部署,管理托管主机,执行一系列的tasks,可以让远端主机大道预期状态。(剧本)
由一个或者多个play组成,由hosts,variables,roles,tasks,等对象组成。
hosts: 定义要执行playbook的远程主机。
vars:定义playbook运行时需要使用的变量。
tasks:定义将要在远程主机上执行任务列表。
handlers:定义task执行完成以后需要调用的任务。

playbook的ping脚本检测
[root@ansible ansible]# vim ping.yml

– hosts: all
remote_user: root
tasks:
– ping:
[root@ansible ansible]#  ansible-playbook ping.yml

用playbook安装Apache,修改端口,配置ServerName,修改主页,设置开机自启
[root@ansible ansible]#vim httpd.yml

– hosts: cache
remote_user: root
tasks:
– name: 安装apache
yum:
name: httpd
state: installed
– lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: ‘^Listen’
line: ‘Listen 8080’
– service:
name:  httpd
enabled:  yes
state: restarted
-copy:
src:  /root/index.html
dest: /var/www/html/index.html

变量:
使用 yaml 传递参数
ansible-playbook user.yml -e @args.yaml

[root@ecs-proxy my-ansible]# cat args.yaml

username: w5

[root@ecs-proxy my-ansible]# vim  user.yaml

– name: 添加用户
hosts: web
tasks:
– name: 添加用户”{{username}}”
user:
name: “{{username}}”
group: root
password: “{{‘123456’ | password_hash(‘sha512’)}}”
~

给指定的任务定义一个调用标识tages,使用handers来配置文件,重新载入让服务生效
通过增加 tags来定义标签,通过增加motify定义调整的名字,通过命令- t motify的参数来执行需要执行的服务。以下则调整更换首页地址,命令为:ansible-playbook web.yml  -t update_inde

[root@ansible ~]# vim web.yml
[root@ansible ~]# vim index.html

– name: reload web_httpd_conf
hosts: web
tasks:
– name: 更新配置文件
tags: update_httpd
motify: reload_httpd
copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: ‘0644’
– name: 更换首页地址
tags: update_index
motify: reload_conf
copy:
src: index.html
dest: /var/www/html/index.html
owner: apache
group: apache
mode: ‘0644’
handlers:
– name: reload_conf
service:
[root@ansible ~]# ansible-playbook web.yml  -t update_index
with_item创建多用户
通过增加with_item来创建多用户

– hosts: web1
remote_user: root
tasks:
– name: 添加用户
user: group=wheel password={{‘123456’ | password_hash(‘sha512’)}} name={{item}}
with_items: [“ya”,”bc”,”plj”,”lx”]

创建多用户

– hosts: web2
remote_user: root
tasks:
– name: 添加用户
user: group={{item.group}} password={{‘123456’ | password_hash(‘sha512’)}} name={{item.name}}
with_items:
– {name: ‘yan011’ , group: ‘root’}
– {name: ‘yan012’ , group: ‘root’}
– {name: ‘yan013’ , group: ‘wheel’}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇