精心总结ansible-playbook剧本的这6种变量
#变量作用
#根据需求灵活修改,如:需要安装不同版本号的服务,或进行版本升级回退等
1.通过vars定义变量
#1.1、定义一个变量
version: 1.1.2 #定义多个变量
vars:
- v1: value
- v2: value #1.2、调用变量
#在{{}}中直接填写变量名
{{ v1 }}
#示例一:添加用户
[root@k8s-master yaml]# cat a4.yml
- hosts: k8s-node
vars:
- user: demo16
tasks:
- name: create{{user}}
user: name={{user}} #语法检查
[root@k8s-master yaml]# ansible-playbook --syntax-check a4.yml
playbook: a4.yml #执行
[root@k8s-master yaml]# ansible-playbook a4.yml #查看效果
[root@node1 ~]# id demo16
uid=1009(demo16) gid=1010(demo16) groups=1010(demo16)
#示例二:安装http和ftp服务,使用变量的话可以方便后续的安装不同版本号
#第一种写法
[root@game yaml]# cat vars1.yml
- hosts: k8s-node
vars:
- web_packge: httpd-2.4.6
- ftp_packge: vsftpd-3.0.2 tasks:
- name: installed {{ web_packge }} {{ ftp_packge }}
yum:
name:
- "{{ web_packge }}"
- "{{ ftp_packge }}"
state: present #第二种写法
#提示:如果要装多个的话建议使用第一种方法,减少语句
[root@game yaml]# cat vars2.yml
- hosts: k8s-node
vars:
- web_packge: httpd-2.4.6
- ftp_packge: vsftpd-3.0.2 tasks:
- name: installed {{ web_packge }} Packages
yum: name={{ web_packge }} state=present - name: installed {{ ftp_packge }} Packages
yum: name={{ ftp_packge }} state=present #进行语法检查,然后执行
[root@game yaml]# ansible-playbook --syntax-check vars2.yml
[root@game yaml]# ansible-playbook vars2.yml
2.通过定义一个变量文件,使用playbook进行调用
[root@game yaml]# cat vars_public.yml
web_packge: httpd-2.4.6
ftp_packge: vsftpd-3.0.2 #进行调用:使用vars_files
#提示:因为写的文件是在同一级目录下,可以使用相对路径进行调用文件
[root@game yaml]# cat vars1.yml
- hosts: k8s-node
vars_files: ./vars_public.yml tasks:
- name: installed {{ web_packge }} {{ ftp_packge }}
yum:
name:
- "{{ web_packge }}"
- "{{ ftp_packge }}"
state: present
3.通过inventory主机清单进行变量定义
#第一种写法
[root@k8s-master yaml]# tail -n 4 /etc/ansible/hosts
[k8s-node]
192.168.86.132 user=demo13
192.168.86.133 user=demo14 [root@k8s-master yaml]# cat a3.yml
- hosts: k8s-node
tasks:
- name: create{{user}}
user: name={{user}} #执行剧本
[root@k8s-master yaml]# ansible-playbook a3.yml #查看效果
[root@node1 ~]# id demo13
uid=1007(demo13) gid=1008(demo13) groups=1008(demo13)
[root@node1 ~]# id demo14
id: demo14: no such user
#node1是创建demo13,demo14是在node2创建的,所以在node1查看的时候会显示没有找到这个用户 #第二种写法
[root@k8s-master yaml]# tail -n 8 /etc/ansible/hosts
[k8s-node]
192.168.86.132
192.168.86.133
[k8s-node:vars]
user=demo15 [root@k8s-master yaml]# cat a3.yml
- hosts: k8s-node
tasks:
- name: create{{user}}
user: name={{user}} #执行剧本
[root@k8s-master yaml]# ansible-playbook a3.yml #查看效果
[root@node1 ~]# id demo15
uid=1008(demo15) gid=1009(demo15) groups=1009(demo15)
4.通过执行playbook时使用-e参数指定变量
#示例
[root@k8s-master yaml]# pwd
/etc/ansible/yaml
[root@k8s-master yaml]# cat a2.yml
- hosts: k8s-node
tasks:
- name: create{{user}}
user: name={{user}}
#检查语法有没有错误,没有错误之后执行
[root@k8s-master yaml]# ansible-playbook --syntax-check a2.yml playbook: a2.yml
[root@k8s-master yaml]# ansible-playbook -e 'user=demo11' a2.yml #查看效果
[root@node1 ~]# id demo11
uid=1006(demo11) gid=1007(demo11) groups=1007(demo11)
5.变量注册register
#应用场景:把命令执行的结果存到register变量里面,然后使用debug模块输出相关信息 #示例
- name: Check Http Services
shell: netstat -untpl |grep httpd
register: check_http_service
#提示:将shell命令执行的结果存到变量check_http_service中 - name:
debug:
msg: "{{ check_http_service.stdout_lines }}"
#提示1:通过debug模块输出信息,如果想输出部分内容,使用变量.方法
#提示2:debug模块更多使用可使用ansible-doc debug查看帮助信息 #基本步骤总结
1.使用shell执行命令
2.将执行命令的结果存到变量中
3.通过debug模块,msg方法,输出变量所有的内容,如果想输出部分内容,使用变量.方法
#例子:检查http服务是否运行,结合when进行判断,如果返回结果不等于0,那么就启动http服务
[root@game yaml]# cat regis.yml
- hosts: k8s-server
tasks: - name: Check Httpd Services
command: netstat -untpl |grep httpd
ignore_errors: yes
register: check_httpd - name: Start Httpd
service:
name: httpd
state: started
when: check_httpd.rc != 0
6.ansible facts变量
主要用来采集被控制端的一些状态指标,如:主机名,IP,内存、磁盘状态等
默认情况的facts变量名已经定义好了,只需采集被控制端的信息,然后传递至facts变量即可 #应用场景
1.获取被控端主机名,生成不同的zabbix配置文件
2.获取被控端CPU信息,生成不同的nginx配置文件
3.获取被控端内存状态信息,生成不同的memcached配置文件
#示例1:获取被控端主机名IP地址,通过debug模块输出
[root@game yaml]# cat facts1.yml
- hosts: k8s-server
tasks: - name: Output Client Hostname IP
debug:
msg:
echo Client "{{ ansible_fqdn }}" and "{{ ansible_default_ipv4.address }}" #执行效果
[root@game yaml]# ansible-playbook --syntax facts1.yml #语法检查
playbook: facts1.yml
[root@game yaml]# ansible-playbook facts1.yml #执行
TASK [Output Client Hostname IP] **********************************************************************
ok: [192.168.228.130] => {
"msg": "echo Client \"web01\" and \"192.168.228.130\""
}
ok: [192.168.228.131] => {
"msg": "echo Client \"web02\" and \"192.168.228.131\""
}
#示例二:使用facts变量安装zabbix-agent客户端
#1.首先准备一个zabbix_agentd.conf配置文件,Hostname需要写成ansible_fqdn自己识别
[root@game yaml]# pwd
/etc/ansible/yaml
[root@game yaml]# cat zabbix_agentd.conf |grep Hostname
Hostname= {{ ansible_fqdn }} #2.编写剧本
[root@game yaml]# cat zab-age.yml
- hosts: k8s-server
tasks: - name: Zabbix-Agent Configure
template:
src: ./zabbix_agentd.conf
dest: /etc/zabbix/zabbix_agentd.conf #3.执行剧本
#首先先检查语法,然后接着执行
[root@game yaml]# ansible-playbook --syntax zab-age.yml
[root@game yaml]# ansible-playbook zab-age.yml #4.到被控制端查看效果
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.conf |grep Hostname
Hostname= web01
#可以看到主机名已经修改成了web01
精心总结ansible-playbook剧本的这6种变量的更多相关文章
- 2.Ansible Playbook剧本
1.playbook?playbook翻译过来就是"剧本",那playbook组成如下 play: 定义的是主机的角色 task: 定义的是具体执行的任务 playbook: 由一 ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
- ansible的playbook剧本
一.playbook剧本介绍 1)playbook介绍 Playbooks是Ansible的配置,部署和编排语言.它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果说ansibl ...
- Ansible之playbook剧本
Ansible之playbook剧本 目录 Ansible之playbook剧本 1. playbook的组成 2. 剧本示例test1 2.1 剧本制作 2.2 准备http.conf 2.3 运行 ...
- ansible笔记(10):初识ansible playbook
ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...
- Ansible Playbook 简介
我们去远程执行命令时要使用 command 模块,拷贝文件时要使用 copy 模块,如果我们要操作的东西很多,那就要执行很多条不同模块的命令Playbook 是一个 yaml 配置文件,我们可以把不同 ...
- Ansible Playbook Variables
虽然自动化存在使得更容易使事情重复,但所有的系统可能不完全一样. 在某些系统上,您可能需要设置一些与其他操作略有不同的行为或配置. 此外,一些观察到的远程系统的行为或状态可能需要影响如何配置这些系统. ...
- Ansible playbook基础组件介绍
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible入门四(Ansible playbook基础组件介绍)
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
随机推荐
- Java中枚举的常见用法
在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...
- 如何在Linux上使用xargs命令
大家好,我是良许. 在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令.xargs 可以将一个命令的输出 ...
- 领导给了一堆无序杂乱的数据,我写了个Python自动化脚本
这个问题算是群友答疑.如果说同事或者老板给你一堆这样的数据,你估计会抓狂,该怎么处理呢? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. ...
- Selenium 如何复用浏览器【解决扫码登录等问题】
Selenium中复用已经打开的浏览器进行自动化测试,可以辅助我们解决某些登录需要扫二维码之后,才能进行的操作 目前只支持谷歌Chrome浏览器,那需要做哪些准备操作呢?往下看 1.windows和M ...
- Cross-Site Scripting: Reflected
首先贴解决办法吧,解决了我项目中的问题,不一定适用所有情况. //For Cross-Site Scripting: Reflected public static String filter(Str ...
- 【原】通过Jenkin传值进Android代码
1) Jenkin中用-Pxxxx = yyyy来传值进gradle 2) 在AndroidManifest.xml中定义占位符: <meta-data android:name="X ...
- php cookie及session
1.会话控制概括 1)http协议的缺陷 无状态,就是无记忆,不能让同一浏览器和服务器进行多次数据交换时,产生业务的连续性, 2)什么是会话控制 会话控制就是解决http无记忆缺陷的,能够==将数据持 ...
- 将大量数据批量插入Oracle表的类,支持停止续传
之前用create table select * from XXTable无疑是创建庞大表的最快方案之一,但是数据重复率是个问题,且数据难以操控. 于是我在之前批量插数据的基础上更新了一个类,让它具有 ...
- Tomcat7.0.99集群使用Redis共享session方案
以前配置过给予多播的session共享方案,这回再配置一个redis共享session的. 先小小的炫耀一下: 相信大家要做Tomcat+Redis+session配置,遇到的头号麻烦就是编译的tom ...
- pwnable之random
这题只要多调试几次就会发现其产生的随机数是固定的一个值,那么就可以通过这个随机值和0xdeadbeef反推出我们要输入的数据, 最后附上这题的flag:flag:Mommy, I thought li ...