Ansible Playbook 基本概述与使用案例

主机规划

添加用户账号

说明:

1、 运维人员使用的登录账号;

2、 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放;

3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。

 # 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息
useradd -u -d /app yun && echo '' | /usr/bin/passwd --stdin yun
echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod /app/

Ansible 配置清单Inventory

之后文章都是如下主机配置清单

 [yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_key
# 方式1、主机 + 端口 + 密钥
[manageservers]
172.16.1.180: [proxyservers]
172.16.1.18[:]: # 方式2:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=

Playbook 基本概述

什么是 playbook,playbook 翻译过来就是“剧本”,那 playbook 组成如下:

1、play:定义主机角色「比作:剧本中的角色」

2、task:定义具体执行任务「比作:剧本中的角色要做什么事儿」

3、playbook:由一个或多个play组成,一个 play 可以包含多个 task 任务

简单理解:使用不同的模块完成一项事情

Playbook 优势

1、功能上比 Ad-Hoc 更全

2、能很好的控制先后执行顺序,以及依赖关系

3、语法更加直观,可读性更好

4、Ad-Hoc 是临时的无法持久使用,Playbook 可以持久化使用。

Playbook 书写格式

Playbook 是有 yml 语法书写,结构清晰,可读性强。

Playbook 示例-安装部署 httpd

要求:在 172.16.1.180、172.16.1.181、172.16.1.182 安装 httpd 服务。

test_httpd.yml 脚本内容

说明:其中 172.16.1.181 和 172.16.1.182 已经安装好了 httpd 服务。

脚本参数说明:

host:指定主机

remote_user:要使用什么用户操作

tasks:具体执行什么任务

 [yun@ansi-manager object01]$ pwd
/app/ansible_info/object01
[yun@ansi-manager object01]$ ll ../ # 主机清单存放位置
total
-rw-rw-r-- yun yun Oct : hosts_key # 主机清单文件
drwxrwxr-x yun yun Oct : object01
[yun@ansi-manager object01]$ ll
total
-rw-rw-r-- yun yun Oct : test_httpd.yml
[yun@ansi-manager object01]$ cat test_httpd.yml # playbook 内容
---
# 上面一行表明这是一个 yml 文件,无其他作用
# test playbook
- hosts: manageservers, proxyservers # 定义主机组 「可以有多个主机组 使用 逗号加空格 隔开」
# remote_user: yun # 可省略该行 定义用户的身份「我们按之前的约定使用的 yun 用户,因此这里也是 yun 用户」 tasks: # 定义运行什么样的任务
- name: "Installed httpd server" # 第一个任务 描述
yum: name=httpd state=present # 执行什么模块「第一种书写方式,如果该行很长,会有折行的情况,不怎么美观」 - name: "site update" # 第二个任务 描述「第二种书写方式,推荐,更规范人性化」
copy:
content: "Test WEB"
dest: "/var/www/html/index.html" - name: "start httpd server"
systemd:
name: httpd
daemon_reload: yes
state: started
enabled: yes

语法检查

 # 由于我们使用的是 yun 普通用户
# 因此有时需要使用 -b 选择进行提权
[yun@ansi-manager object01]$ ansible-playbook -b -i ../hosts_key --syntax-check test_httpd.yml playbook: test_httpd.yml

预执行

如果存在依赖关系【如:软件安装,配置,启动】,那么可能预执行报错,但是执行是正常的。

因为后面的「启动」依赖前面的「配置」,「配置」依赖前面的「软件安装」。

因此如果报错,那么详细看看。确定是存在问题还是依赖关系导致的。

 [yun@ansi-manager object01]$ ansible-playbook -b -i ../hosts_key -C test_httpd.yml

 PLAY [manageservers, proxyservers] ***************************************************************************************

 TASK [Gathering Facts] **************************************************************************************************
ok: [172.16.1.180]
ok: [172.16.1.182]
ok: [172.16.1.181] TASK [Installed httpd server] *******************************************************************************************
ok: [172.16.1.182]
ok: [172.16.1.181]
changed: [172.16.1.180] TASK [site update] ******************************************************************************************************
changed: [172.16.1.180]
changed: [172.16.1.181]
changed: [172.16.1.182] TASK [start httpd server] ***********************************************************************************************
changed: [172.16.1.180]
changed: [172.16.1.181]
changed: [172.16.1.182] PLAY RECAP **************************************************************************************************************
172.16.1.180 : ok= changed= unreachable= failed= skipped= rescued= ignored=
172.16.1.181 : ok= changed= unreachable= failed= skipped= rescued= ignored=
172.16.1.182 : ok= changed= unreachable= failed= skipped= rescued= ignored=

执行 test_httpd.yml

 [yun@ansi-manager object01]$ ansible-playbook -b -i ../hosts_key test_httpd.yml

 PLAY [manageservers, proxyservers] **************************************************************************************

 TASK [Gathering Facts] *************************************************************************************************
ok: [172.16.1.182]
ok: [172.16.1.180]
ok: [172.16.1.181] TASK [Installed httpd server] ******************************************************************************************
ok: [172.16.1.182]
ok: [172.16.1.181]
ok: [172.16.1.180] TASK [site update] *****************************************************************************************************
changed: [172.16.1.181]
changed: [172.16.1.182]
changed: [172.16.1.180] TASK [start httpd server] **********************************************************************************************
ok: [172.16.1.180]
ok: [172.16.1.182]
ok: [172.16.1.181] PLAY RECAP *************************************************************************************************************
172.16.1.180 : ok= changed= unreachable= failed= skipped= rescued= ignored=
172.16.1.181 : ok= changed= unreachable= failed= skipped= rescued= ignored=
172.16.1.182 : ok= changed= unreachable= failed= skipped= rescued= ignored=

然后在 172.16.1.180、172.16.1.181、172.16.1.182 可见 httpd 安装部署已完成、服务已启动且已加入开机自启动;浏览器也能正常访问。

Playbook 示例-安装部署 nfs

要求:在 172.16.1.180 安装 NFS 服务端,在 172.16.1.181、172.16.1.182 挂载 NFS。

test_nfs.yml 脚本内容

 [yun@ansi-manager object01]$ pwd
/app/ansible_info/object01
[yun@ansi-manager object01]$ ll
total
-rw-rw-r-- yun yun Oct : test_httpd.yml
-rw-rw-r-- yun yun Oct : test_nfs.yml
[yun@ansi-manager ansible_info]$ cat test_nfs.yml # playbook 内容
---
# 必要包安装
- hosts: manageservers, proxyservers tasks:
- name: "NFS package install"
yum:
name:
- nfs-utils
- rpcbind
state: present # 服务端配置与启动
- hosts: manageservers tasks:
- name: "create NFS dir"
file:
path: /data
owner: nfsnobody
group: nfsnobody
state: directory
recurse: yes - name: "NFS server config and start"
copy:
content: "/data 172.16.1.0/24(rw,sync,root_squash,all_squash)\n"
dest: /etc/exports
owner: root
group: root
mode: ''
# 当配置文件改变时,需要重加载 NFS 服务
notify: "reload NFS server" - name: "rpcbind server start"
systemd:
name: rpcbind
state: started
daemon_reload: yes
enabled: yes - name: "NFS server start"
systemd:
name: nfs
state: started
daemon_reload: yes
enabled: yes handlers:
- name: "reload NFS server"
systemd:
name: nfs
state: reloaded # 客户端操作
- hosts: proxyservers tasks:
- name: "rpcbind server start"
systemd:
name: rpcbind
state: started
daemon_reload: yes
enabled: yes - name: "mount NFS"
mount:
src: 172.16.1.180:/data
path: /mnt
fstype: nfs
state: mounted
backup: True

语法检查

 # 由于我们使用的是 yun 普通用户
# 因此有时需要使用 -b 选择进行提权
[yun@ansi-manager object01]$ ansible-playbook -b -i ../hosts_key --syntax-check test_nfs.yml playbook: test_nfs.yml

预执行

如果存在依赖关系【如:软件安装,配置,启动】,那么可能预执行报错,但是执行是正常的。

因为后面的「启动」依赖前面的「配置」,「配置」依赖前面的「软件安装」。

因此如果报错,那么详细看看。确定是存在问题还是依赖关系导致的。

[yun@ansi-manager object01]$ ansible-playbook -b -i ../hosts_key -C test_nfs.yml  # 具体打印内容,这里省略

执行 test_nfs.yml

[yun@ansi-manager object01]$ ansible-playbook -b -i ../hosts_key test_nfs.yml  # 具体打印内容,这里省略

然后在 172.16.1.180 可见 NFS 服务已经部署且启动成功。

在 172.16.1.181、172.16.1.182 可见 NFS 挂载成功,且已写入 /etc/fstab 文件。


———END———
如果觉得不错就关注下呗 (-^O^-) !

Ansible Playbook 初识的更多相关文章

  1. ansible笔记(11):初识ansible playbook(二)

    ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...

  2. ansible笔记(10):初识ansible playbook

    ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...

  3. Ansible_自动化运维《Ansible之初识-1》

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  4. Python+Django+ansible playbook自动化运维项目实战☝☝☝

    Python+Django+ansible playbook自动化运维项目实战☝☝☝  一.入门引导 DevOPSDevOps(英文Development和Operations的组合)是一组过程.方法 ...

  5. Ansible playbook API 开发 调用测试

    Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...

  6. ansible playbook实践(四)-如何调试写好的playbook文件

    有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...

  7. ansible playbook批量改ssh配置文件,远程用户Permission denied

    最近手里的数百台服务器需要改/etc/ssh/sshd_config的参数,禁止root直接登陆,也就是说 [root@t0 ~]# cat /etc/ssh/sshd_config | grep R ...

  8. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  9. 写Ansible playbook添加zabbix被监控的对象

    本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...

随机推荐

  1. OpenCA搭建

    前言: OpenCA是OpenCA开源组织使用Perl对OpenSSL进行二次开发而成的一套完善的PKI免费软件,主要由四部分组成:CA.RA.PUB和NODE.简而言之,PUB是对外提供服务的接口, ...

  2. 码海拾遗:Linux多线程mutex锁

    多线程计数,每个线程累加10个数. 实现: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  3. 微软亚洲研究院开源图数据库GraphView

    我们很高兴地宣布,由微软亚洲研究院系统算法组开发的图数据库GraphView通过GitHub平台开源.GraphView是一款中间件软件,方便用户使用关系数据库SQL Server 或Azure SQ ...

  4. 国际控制报文协议ICMP

    国际控制报文协议ICMP ICMP简介 ICMP 用于主机或路由器报告差错情况和提供有关异常情况的报告(检测网络错误). ICMP 不是高层协议,而是 IP 层的协议. ICMP 报文的格式 ICMP ...

  5. git指令-管理修改

    git指令-管理修改 git管理的不是文件,而是修改 eg:对readme.txt文件进行修改一行 在最后追加一句git has to tracked 然后添加,并且查看状态 cat +文件名称 表示 ...

  6. 史上最全Beyond Compare中文文档.CHM (根据官网整理编辑)

    截图如下:  下载地址: 链接:https://pan.baidu.com/s/1Ml98_biT1leXxGLr9fqI_w 提取码:p8jg

  7. git工作中常用操作总结

    这篇文章主要记录下工作中常用的git操作.主要是对之前文章记录的问题做个总结,这个其实在idea中操作更加简单 别名配置 在敲git 命令时,其实可以使用别名,比如 commit可以配置为ci 下面是 ...

  8. spring——AOP原理及源码(三)

    在上一篇中,我们创建并在BeanFactory中注册了AnnotationAwareAspectJAutoProxyCreator组件.本篇我们将要探究,这个组件是在哪里以及何时发挥作用的. 调试的起 ...

  9. 编译putty 源码去掉 Are you sure you want to close this session? 提示

    0, 为什么要编译 putty ?在关闭窗口的时候,会弹出一个 Are you sure you want to close this session?要把这个去掉.当然也可以用 OD 之类的来修改. ...

  10. 等宽字体的妙用-loading 点点点动画

    原理 ch等宽字体 + text-indent 动画负缩进 显示效果如 loading . loading .. loading ... loading . loading .. loading .. ...