简单的playbook

playbook 是ansible的核心组件,使用的是YAML语法.
下面请看简单的playbook代码

[root@LeoDevops playb]# cat nginx.yaml
- hosts: alltasks:- name: Install Nginx Packageapt: name=nginx state=present- name: Copy Nginx.conftemplate: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf  owner=root group=root mode=0644notify:- Restart Nginx Servicehandlers:- name: Restart Nginx Serviceservice: name=nginx state=restarted
  1. host表示为所有的主机(all)
  2. tasks是任务集,我们在这个playbook里面定义了三个task
  3. name表示为每个task的名字,name的下一行是action,表示这个task要完成什么样的动作。
  4. template 表示模块复制
  5. notify 是触发handler,表示当配置文件有改动后,就触发handler动作
  6. handler在这里是重启nginx
  7. service name表示服务名,state表示要达到什么状态

几个重要语法

在编写playbook的时候,我们需要了解这几个重要的关键词:

  • pre_tasks: 设置playbook运行之前的tasks
  • post_tasks: 设置playbook运行之后的tasks

playbook变量与引用

我们在Inventory里面定义好变量,比如:

  1. 我们在hosts里面定义好变量
[root@LeoDevops playb]# grep -vE "(^$|^#)" /etc/ansible/hosts
192.168.93.132  key=132
192.168.93.137  key=137
[nginx]
192.168.93.132
192.168.93.137
[nginx:vars]
ansible_python_interpreter=/usr/bin/python2.6
  1. 写好palybook
[root@LeoDevops playb]# cat check_variable.yml
- hosts: allgather_facts: Falsetasks:- name: Display Host Variable From Hostfiledebug: msg="The {{ inventory_hostname  }} Value is {{ key  }}"
  1. 执行playbook
[root@LeoDevops playb]# ansible-playbook check_variable.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [Display Host Variable From Hostfile] ****************************************************************************************************************************************************
ok: [192.168.93.132] => {"msg": "The 192.168.93.132 Value is 132"
}
ok: [192.168.93.137] => {"msg": "The 192.168.93.137 Value is 137"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.132             : ok=1    changed=0    unreachable=0    failed=0
192.168.93.137             : ok=1    changed=0    unreachable=0    failed=0 
  1. 另一种方式,直接在playbook定义变量
[root@LeoDevops playb]# cat p_vars.yaml
- hosts: allgather_facts: False  #设置为false,那么下面的debug模块会生效vars:       # 先申明vars这个关键字key: "Ansible"  #这种方式定义,key: value的形式tasks:- name: display host variables from hostfiledebug: msg="The {{ inventory_hostname  }} value is {{ key }}"
  1. 或者在playbook里面引用有变量的文件
[root@LeoDevops playb]# cat p_vars.yaml
- hosts: allgather_facts: Falsevars_files:- var.jsontasks:- name: display host variables from hostfiledebug: msg="The {{ inventory_hostname  }} value is {{ key }}"
[root@LeoDevops playb]# cat var.json
{"key":"json"}
另一种变量引用,定义全局变量针对主机组
  1. 在hosts的nginx里面定义一个变量key,不在单独对每个主机定义key
grep -vE "(^$|^#)" /etc/ansible/hosts
[nginx]
192.168.93.132
192.168.93.137
[nginx:vars]
ansible_python_interpreter=/usr/bin/python2.6
key=nginx
  1. playbook保持不变
  2. 执行playbook
[root@LeoDevops playb]# ansible-playbook check_variable.yml PLAY [all] ************************************************************************************************************************************************************************************TASK [Display Host Variable From Hostfile] ****************************************************************************************************************************************************
ok: [192.168.93.132] => {"msg": "The 192.168.93.132 Value is nginx"
}
ok: [192.168.93.137] => {"msg": "The 192.168.93.137 Value is nginx"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.132             : ok=1    changed=0    unreachable=0    failed=0
192.168.93.137             : ok=1    changed=0    unreachable=0    failed=0 

通过命令行传输

  • 通过-e参数能给将变量传入进去
[root@LeoDevops playb]# ansible-playbook check_variable.yml  -e "key=hehe"PLAY [all] ************************************************************************************************************************************************************************************TASK [Display Host Variable From Hostfile] ****************************************************************************************************************************************************
ok: [192.168.93.132] => {"msg": "The 192.168.93.132 Value is hehe"
}
ok: [192.168.93.137] => {"msg": "The 192.168.93.137 Value is hehe"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.132             : ok=1    changed=0    unreachable=0    failed=0
192.168.93.137             : ok=1    changed=0    unreachable=0    failed=0  
  • -e指定文件的方式传入变量
[root@LeoDevops playb]# cat var.json
{"key":"json"}
[root@LeoDevops playb]# ansible-playbook check_variable.yml -e "@var.json"PLAY [all] ************************************************************************************************************************************************************************************TASK [Display Host Variable From Hostfile] ****************************************************************************************************************************************************
ok: [192.168.93.132] => {"msg": "The 192.168.93.132 Value is json"
}
ok: [192.168.93.137] => {"msg": "The 192.168.93.137 Value is json"
}PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.132             : ok=1    changed=0    unreachable=0    failed=0
192.168.93.137             : ok=1    changed=0    unreachable=0    failed=0   

register内的变量

ansible playbook内的task之间还可以互相传递数据,比如我们总共有两个tasks,其中第二个task是否执行是需要判断第1个task运行后的结果,这个时候我们就得在task之间传递数据,需要把第一个task执行的结果传递给第二个task,下面看看简单的register的方式

[root@LeoDevops playb]# cat  p_register.yaml
- hosts: u12tasks:- name: register variableshell: dateregister: info- name: display variabledebug: msg="the variable is {{ info['stdout'] }}"

使用vars_prompt传入

ansible 还支持在运行playbook的时候通过交互式的方式给定义好的参数传入变量值,只需要在playbook中定义vars_prompt 的变量名和交互式提示内容即可。当然ansible还可以对传入的变量值进行加密处理。加密处理依赖于passlib python库。请看简单的 vars_prompt的例子

[root@LeoDevops playb]# cat p_prompt.yaml
- hosts: allgather_facts: Falsevars_prompt:- name: "one"prompt: "please input your value"private: no- name: "two"prompt: "please input two value"default: 'good'  # 默认显示一个值private: yes  #置为yes的话,那么就是看不见自己输入的什么了tasks:- name: display one valuedebug: msg="one value is {{ one }}"- name: display two valuedebug: msg="two value is {{ two }}"

执行效果如下:

[root@LeoDevops playb]# ansible-playbook p_prompt.yaml
please input your value: nihao
please input two value [good]: 

1. ansible-playbook 变量定义与引用相关推荐

  1. C++---类成员变量定义为引用

    C++---类成员变量定义为引用 摘要:类成员变量是可以定义为引用类型的,但是我们需要注意一下用法 note1:在类中定义引用变量, 必须要在初始化列表中初始化该成员变量(const 类型数据成员也必 ...

  2. Ansible Playbook 变量与 register 详解

    ansible 定义变量方式与[多层]变量引用,以及 register 详解 主机规划 主机名称 操作系统版本 内网IP 外网IP(模拟) 安装软件 ansi-manager CentOS7.5 17 ...

  3. SUDO提权-Ansible配置-变量-Playbook应用案例

    返回 文章目录 1 案例1:配置sudo权限 1.1 问题 1.2 方案 步骤一:配置sudo提权 2 案例2:修改Ansible配置 2.1 问题 步骤一:配置普通用户远程管理其他主机 1)修改主配 ...

  4. 指针变量的定义和引用

    目录 引入 一.指针变量的定义 二.指针变量的赋值 三.指针变量的引用 总结 引入 C语言中可以通过变量名来引用变量的内存单元值. 例如,下面定义了两个变量. int a, b; 那么a=2;表示将a ...

  5. (四) Shell脚本简介,变量的定义、引用、删除,常见状态和运算符,命令,软件的安装和维护(RPM),软件的安装和维护(yum)

    1,课程回顾 2,本章重点 shell 脚本 软件管理(rpm yum) 3,具体内容 3.1 Shell脚本简介 3.1.1 什么是shell脚本 1.当命令不在命令行中执行,而是从一个文件中执行时 ...

  6. c语言 引用定义变量,如何在c语言中定义及引用全局变量?

    如何在c语言中定义及引用全局变量? 答案:5  信息版本:手机版 解决时间 2019-10-03 10:30 已解决 2019-10-02 15:19 如何在c语言中定义及引用全局变量? 最佳答案 2 ...

  7. c语言中结构体变量的作用,C语言 结构体 类型变量的 定义 和 引用

    前面学习了变量和数组这些简单的数据结构,它们的特点是必须使用规定的数据类型.例如数组被定义为整型后,它的所有存储单元都是由整型构成.现实生活中某一类事物的共同属性可能是由不同的数据类型组成的集合,或者 ...

  8. C语言:指针变量的定义与引用

    一.指针变量的定义和赋值 1.格式:类型名    *指针变量名: 2.举例 int     *p1;       char  *s1, *s2;       float  *a1, *a2,  f; ...

  9. Ansible 学习总结(2)—— Ansible playbook 入门详解

    一.Ansible playbook 简单概述 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本.通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远 ...

最新文章

  1. mamp设置mysql密码_MAMP中设置Mysql root密码
  2. 人民日报三问人工智能,给法律制度带来哪些挑战?
  3. 皮一皮:感受下什么叫瑟瑟发抖的寒冬...
  4. 百度金融资深产品经理降峰:互金产品如何准确触达用户
  5. Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB
  6. GenericUDAF使用流程记载(转载+自己整理)
  7. matlab 7.9.0 帮助翻译--zeros函数
  8. rabbitmq订单模块_RabbitMQ播放模块! 构架
  9. 在Java中使用内存映射文件时检测(写入)失败
  10. 消防给水及消火栓系统技术规范_消防给水及消火栓系统技术规范5.1 消防水泵 习题...
  11. go实现数组切片洗牌函数Shuffle
  12. matlab 简单的图像填充例子
  13. red hat linux yum,Red Hat Linux安装CentOS的yum源
  14. 用Vim查看和编辑二进制文件
  15. bootstrap datepicker 在bootstrap modal中不显示问题
  16. git合并——衍合于挑拣(cherry-pick)——只合并某个commit
  17. TypeScript等无法获取到歌曲播放的位置信息时,关于歌曲的续播
  18. CMOS图像传感器OV7725数据手册
  19. javafx与MySQL的连接_如何让javafx界面直接连接数据库?
  20. Turbo C 2.0的下载地址

热门文章

  1. ll命令报错-bash: ll: command not found
  2. linux扫描目标主机开放端口
  3. Excel中 插入 对号等特殊字符
  4. Eclipse、VBA、IE开发者工具 Debug快捷键
  5. mysql 根据状态输出_mysql show processlist 输出状态说明
  6. 【Oracle】创建用户
  7. 【解决方案 二】---设置mysql5.7编码集为utf8mb4
  8. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法
  9. mybatis异常:Could not find result map ......... 问题分析及解决
  10. 如何创建一个<style> tag with Javascript?