ansible-playbook编写和使用_ansible playbook 语法,太香了

2.3 通过ansile-playbook命令行传入

通过ansible-playbook命令行传参的方式定义变量,默认传进去时全局变量。
在这里插入图片描述
目前ansible-playbook还支持指定文件的方式传入变量,变量的文件内容支持YAML和JSON两种格式:
在这里插入图片描述

2.4 在playbook文件内使用vars

在文件内通过vars字段定义变量:
在这里插入图片描述

2.5 在playbook文件内使用var_files

在playbook文件内通过var_files字段引用变量,首先把所有的变量定义到某个文件内,然后playbook文件内使用var_files参数引用这个变量文件。
注意:变量文件路径实在playbook下的。
在这里插入图片描述

2.6 使用register内的变量

ansible playbook内的task之间还可以相互传递数据,比如我们总共有两个task是,其中第2个task执行与否要判断第1个task运行后的结果,这个时候我们就得在task之间传递数据,需要把第1个task执行的结果传递给第2个task。ansible task之间传递数据使用register方式。
在这里插入图片描述
执行效果:
指定标准输出的stdout的信息输出
在这里插入图片描述

2.7 使用vars_prompt传入

ansible还支持在运行playbook的时候童话刚刚交互式的方式给定义好的参数传入变量值,只需要在playbook中定义var_prompt的变量名和交互式提示内容即可。
ansible还可以对输入变量值进行加密处理,比如采用SHA512和MD5算法加密。加密方式在可参照之前博客ansible组件介绍和简单playbook测试
在这里插入图片描述
已经介绍了7种比较常用的定义变量以及如何引用的方式。ansible的变量引用方式相对比较少,都是比较固定的{{key}}或{{key[‘key’]}}或{{key[0][‘key’]}},根据变量的值定义了不同的数据结构,因而变量引用方法稍微有区别。

三、playbook循环

在编写playbook的过程中,发现有很多的task都是重复引用某个模块,比如一次想同步10个文件,如果按照以前写playbook的思路需要写10个task,这样的话playbook会显得臃肿。采用loops方式区编写playbook减少重复使用某个模块。

下面介绍几种常见的loops

3.1 标准循环

标准loops是我们在编写playbook过程中使用最多的一种loops,它能直接减少编写task的次数。
在这里插入图片描述
with_items的值时python list数据结构,可以理解为每个task会循环读取list里面的值,然后key的名称时item,list里面也支持python字典。
在这里插入图片描述

3.2 嵌套loops

[root@hadoop1010 loops]# cat loopsqt.yaml 
---
- hosts: all
  gather_facts: False
  tasks:
    - name: give users access to multiple databases
      debug: msg="name={{ item[0] }} priv={{ item[1] }}"
      with_nested:
        - [ 'alice', 'bob' ]
        - [ 'clientdb', 'employeedb', 'providerdb' ]  
[root@hadoop1010 loops]# ansible-playbook loopsqt.yaml -l 192.168.10.11

PLAY [all] **************************************************************************************************************************************************************************************

TASK [give users access to multiple databases] **************************************************************************************************************************************************
ok: [192.168.10.11] => (item=[u'alice', u'clientdb']) => {
    "changed": false, 
    "item": [
        "alice", 
        "clientdb"
    ], 
    "msg": "name=alice priv=clientdb"
}
ok: [192.168.10.11] => (item=[u'alice', u'employeedb']) => {
    "changed": false, 
    "item": [
        "alice", 
        "employeedb"
    ], 
    "msg": "name=alice priv=employeedb"
}
ok: [192.168.10.11] => (item=[u'alice', u'providerdb']) => {
    "changed": false, 
    "item": [
        "alice", 
        "providerdb"
    ], 
    "msg": "name=alice priv=providerdb"
}
ok: [192.168.10.11] => (item=[u'bob', u'clientdb']) => {
    "changed": false, 
    "item": [
        "bob", 
        "clientdb"
    ], 
    "msg": "name=bob priv=clientdb"
}
ok: [192.168.10.11] => (item=[u'bob', u'employeedb']) => {
    "changed": false, 
    "item": [
        "bob", 
        "employeedb"
    ], 
    "msg": "name=bob priv=employeedb"
}
ok: [192.168.10.11] => (item=[u'bob', u'providerdb']) => {
    "changed": false, 
    "item": [
        "bob", 
        "providerdb"
    ], 
    "msg": "name=bob priv=providerdb"
}

PLAY RECAP **************************************************************************************************************************************************************************************
192.168.10.11              : ok=1    changed=0    unreachable=0    failed=0   


3.3 对哈希表使用循环

[root@hadoop1010 loops]# cat loopshash1.yaml 
---
- hosts: all
  gather_facts: False
  vars_files:
    - vars/user.yaml 

  tasks:
    - name: Print phone records
      debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
      with_dict: "{{users}}"
  
[root@hadoop1010 loops]# cat loopshash.yaml 
---
- hosts: all
  gather_facts: False
  tasks:
    - name: Print phone records
      debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
      with_dict: "{{users}}"
[root@hadoop1010 loops]# cat vars/user.yaml 
---
      users:
        alice:
          name: Alice Appleworth
          telephone: 123-456-7890
        bob:
          name: Bob Bananarama
          telephone: 987-654-3210


执行效果:
在这里插入图片描述
在这里插入图片描述

3.4 对文件列表使用循环

在这里插入图片描述
在这里插入图片描述

3.5 对并行数据集使用循环

假设你通过某种方式加载了以下变量数据:
alpha: [ ‘a’, ‘b’, ‘c’, ‘d’ ]
numbers: [ 1, 2, 3, 4 ]
如果你想得到’(a, 1)’和’(b, 2)’之类的集合.可以使用’with_together’:

[root@hadoop1010 loops]# cat loopspral.yaml 
---
- hosts: all
  gather_facts: False
  vars_files:
    - vars/var1.yaml
  tasks:
    - debug: msg="{{ item.0 }} and {{ item.1 }}"
      with_together:
        - "{{lpha}}"
        - "{{numbers}}"
[root@hadoop1010 loops]# cat vars/var1.yaml 
---
lpha: [ 'a', 'b', 'c', 'd' ]
numbers:  [ 1, 2, 3, 4 ]


执行效果:
在这里插入图片描述

3.6 随机选择

---
- hosts: all
  gather_facts: False
  tasks:
    - name: debug random choose
      debug: msg="name ========> {{ item }}"
      with_random_choice:
        - hadoop1
        - 'hadoop2'
        - 'hadoop3'
        - 'hello hadoop'


在这里插入图片描述

3.7 条件判断

判断时间是否达到预计的时间,重试次数是5次,时间间隔是5s,如果达到预设值,任务执行成功,否则任务执行失败。

[root@hadoop1010 loops]# cat loopstiem.yaml 
---
- hosts: all
  gather_facts: False
  tasks:
    - name: debug loops
      shell: date '+%Y%m%d%H%M'
      register: time
      until: time.stdout.startswith('202303081709')
      retries: 5
      delay: 5


执行成功:
在这里插入图片描述
执行失败:
在这里插入图片描述

3.8 循环中使用注册器

[root@hadoop1010 loops]# cat loopsregister.yaml 
#register loop
---
- hosts: all
  gather_facts: True
  tasks:
    - name: debug loops register use
      shell: "{{ item }}"
      with_items:
        - 'hostname'
        - 'uname'
        - 'date "+%Y%m%d"'
        - 'uname -r'
        - 'echo $JAVA\_HOME'
      register: ret
    - name: display loops
      debug: msg="{% for i in ret.results %} {{i.stdout}} {% endfor %}"


调测
在这里插入图片描述
执行效果
在这里插入图片描述

四、playbook的lookups

lookups插件是Jinja2模板语言的Ansible特定扩展。可以使用lookups插件从playbook中的外部源(文件、数据库、密钥/值存储、API和其他服务)访问数据。与所有模板一样,查找在Ansible控制机器上执行和评估。Ansible使用标准模板系统使查找插件返回的数据可用。可以使用查找插件从外部源加载包含信息的变量或模板。也可以创建自定义查找插件。

4.1 lookup files


[root@hadoop1010 lookups]# cat lookups1.yaml 
- hosts: all
  gather_facts: no
 
  tasks:
    - name: get file content with /tmp/test.txt 
      set_fact:
        test: "{{ lookup('file', '/etc/hostname') }}"
 
    - name: register
      shell: cat /etc/hostname
      register: register_key
 
    - name: debug test and register_key
      debug:
        msg:
          - "{{ test }}"
          - "{{ register\_key['stdout'] }}"
[root@hadoop1010 lookups]# ansible-playbook lookups1.yaml 

PLAY [all] **************************************************************************************************************************************************************************************

TASK [get file content with /tmp/test.txt] ******************************************************************************************************************************************************
ok: [192.168.10.11]
ok: [192.168.10.10]
ok: [192.168.10.12]

TASK [register] *********************************************************************************************************************************************************************************
changed: [192.168.10.10]
changed: [192.168.10.11]
changed: [192.168.10.12]

TASK [debug test and register_key] **************************************************************************************************************************************************************
ok: [192.168.10.11] => {
    "msg": [
        "hadoop1010", 
        "hadoop1011"
    ]
}
ok: [192.168.10.12] => {
    "msg": [
        "hadoop1010", 
        "hadoop1012"
    ]
}
ok: [192.168.10.10] => {
    "msg": [
        "hadoop1010", 
        "hadoop1010"
    ]
}

PLAY RECAP **************************************************************************************************************************************************************************************
192.168.10.10              : ok=3    changed=1    unreachable=0    failed=0   
192.168.10.11              : ok=3    changed=1    unreachable=0    failed=0   
192.168.10.12              : ok=3    changed=1    unreachable=0    failed=0   

[root@hadoop1010 lookups]# 


4.2 lookup pipe

[root@hadoop1010 lookups]# cat lookupspip.yaml 
---
- hosts: all
  gather_facts: False
  tasks:
    - name: get contents
      set_fact:
        contents: "{{lookup('pipe','date +%Y%m%d')}}"
    - name: debug lookups
      debug:
        msg:
          - "The contents is {% for i in contents.split('\n') %} {{ i }} {% endfor %} "
[root@hadoop1010 lookups]# ansible-playbook lookupspip.yaml 

PLAY [all] **************************************************************************************************************************************************************************************

TASK [get contents] *****************************************************************************************************************************************************************************
ok: [192.168.10.12]
ok: [192.168.10.11]
ok: [192.168.10.10]

TASK [debug lookups] ****************************************************************************************************************************************************************************
ok: [192.168.10.11] => {
    "msg": [
        "The contents is 20230308 "
    ]
}
ok: [192.168.10.10] => {
    "msg": [
        "The contents is 20230308 "
    ]
}
ok: [192.168.10.12] => {


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/2b51e00f17e657db1d771237ad3fba5b.png)
![img](https://img-blog.csdnimg.cn/img_convert/e98147b13fb378ecf3034a23e8471b8b.png)
![img](https://img-blog.csdnimg.cn/img_convert/6383b00f9c229c6347c287675fd33745.png)
![img](https://img-blog.csdnimg.cn/img_convert/f39bade87fb6ece68e0d5ba38de57e14.png)
![img](https://img-blog.csdnimg.cn/img_convert/070895da58dd4335f1ad722a603d0af2.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
![img](https://img-blog.csdnimg.cn/img_convert/d33c1f8ec88cccf2dec769fe532c6d1a.jpeg)



### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

![](https://img-blog.csdnimg.cn/img_convert/54f12a1ab42f5175b176fc3787df7043.png)

给大家整理的电子书资料:

  

![](https://img-blog.csdnimg.cn/img_convert/25b1b93984c2c6b77ec4e96f5a031613.png)



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**


**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/90747f9d688ae93755fafdfc8cf3956c.jpeg)

运维获取)**
[外链图片转存中...(img-bNGaMuDl-1712940726151)]



### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

[外链图片转存中...(img-kgpTpSC5-1712940726152)]

给大家整理的电子书资料:

  

[外链图片转存中...(img-IYGKJufW-1712940726152)]



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**


**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-bYoprfmD-1712940726152)]

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值