absible的playbook

Ansible中的基础语言元素:
变量
Inventory
条件测试
迭代
playbook的组成结构
Inventory
Modules
Ad Hoc Command
Playbooks:
Task:任务,即调用模块完成某操作
Variables:变量
Templates:模板
Handlers:处理器,由某事件触发执行的操作。
Roles:角色

基本结构:在哪台主机以什么身份运行什么任务。

- hosts: webservers
  remote_user:
  tasks:
  - task1
  - task2 
- hosts: dbservers

举个栗子:
编写*.yml文件,用ansible-playbook执行此文件
这里写图片描述

这里写图片描述

可以看到我们在第一遍执行任务时,显示的状态为changed,表示这些东西我们已经按需创建了
再执行一遍任务发现结果为OK,表示这些我们所需创建的东西都存在。
这里写图片描述

安装httpd服务,修改监听端口,开启服务
这里写图片描述

这里写图片描述
这里写图片描述

现在我们向修改监听端口为80,我们先试着将/root/conf/httpd.conf文件的端口改为80,然后再次运行.yml文件
这里写图片描述

可以看到copy模块的状态为changed,证明客户端文件确实已发生改变,但service模块的状态为OK,证明这个模块还是保持之前的状态(因为playbook具有幂等性),也就是说配置文件改了,但是并没有重启服务
这里写图片描述

所以要想修改完配置文件后再重启服务就需要用到handler
这次我们将监听端口改为808
这里写图片描述
这里写图片描述

变量:
1)自定义变量:
这里写图片描述
这里写图片描述

2)引用ansible自带变量

查看facts信息
这里写图片描述
例如引用ansible_all_ipv4_addresses作为变量
这里写图片描述

这里写图片描述

这里写图片描述
再inventory中定义的变量也可以直接引用
再hosts文件中定义变量
这里写图片描述

3)引用定义的变量
这里写图片描述
这里写图片描述
这里写图片描述

如果我们没有这时ssh无密码连接,可以在inventory中定义用户和密码
这里写图片描述
这里写图片描述
而使用ssh 正常连接时还是要输密码

条件测试
when:
当ansible_nodename为server3时创建用户ansuser
这里写图片描述
这里写图片描述

可以看到server2和server4都被skipping了
这里写图片描述

迭代
重复同类task时使用
调用:item
定义循环列表:with_items
- apache
- php
- mysql-server
注意with_items的值也可以是字典,但引用时要使用item.KEY
- {name: apache conf: conffiles/httpd.conf}
- {name: php, conf: conffiles/php.ini}
- {name: mysql-server, conf: conffiles/my.cnf}

模板
server2和server3的MaxClients分别为100和200
server2和server3监听的端口分别为80和8080
server2和server3的Servername为ansible_nodename的值
编辑模板文件/root/conf/http.conf.j2
这里写图片描述
这里写图片描述
这里写图片描述
在hosts文件里定义http_port及MaxClients的值
这里写图片描述
修改apache.yml,使用template
这里写图片描述

tags标签
在playbook中为某个或某些任务定义一个标签。在执行playbook时,通过ansible-playbook命令使用–tags选项能实现仅运行指定的tag所而非所有;
在hosts修改MaxClients的值为170和180
这里写图片描述
我们希望值运行[install configuration file for httpd]这个任务
这里写图片描述

可以看到只有指定部分被运行了。
这里写图片描述

特殊情况:无论调用什么标签都会运行的tags
定义
这里写图片描述
可以看到虽然值指定了tags=–conf但是install httpd package任务也被运行了
这里写图片描述

role
(1)创建以roles命名的目录;
(2)在roles目录中分别创建以各角色名称命名的目录,如webservers
(3)在每个角色命名的目录再分别创建files,handlers,meta,tasks,templates和vars目录,用不到的目录可以创建为空目录,也可以不创建
目录结构有固定格式:
files:静态文件
templates:jinjia2模板文件
tasks:至少有一个main.yml文件,定义tasks
handlers:至少由一个main.yml文件,定义handlers
vars:至少有一个main.yml文件定义变量
meta:定义依赖关系等信息
(4)在playbook文件中调用各角色。site.yml文件中定义playbook,额外也可以有其他的yml文件

例子:1、创建以roles命名的目录
这里写图片描述
2、在roles下分别创建以角色名命名的目录
这里写图片描述
3、这里写图片描述

给172.25.44.2安装httpd,给172.25.44.3安装mysqld,给172.25.44.4安装httpd和mysqld
在webservers目录里做一些关于web的操作
这里写图片描述
在file目录里面放入配置文件
这里写图片描述

task目录:
这里写图片描述
这里写图片描述

handlers目录:
这里写图片描述
这里写图片描述

接下来在deservers目录里面定义一些mysql的操作
这里写图片描述

files目录:

tasks目录:
这里写图片描述

files目录:
这里写图片描述

tasks目录:

这里写图片描述
这里写图片描述

handlers:
这里写图片描述
这里写图片描述

最后在playbook中调用role
这里写图片描述
这里写图片描述

执行yml文件就好了
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值