1. ansible-playbook 变量定义与引用

简单的playbook

playbook 是ansible的核心组件,使用的是YAML语法.

下面请看简单的playbook代码

[[email protected] playb]# cat nginx.yaml
- hosts: all
  tasks:
  - name: Install Nginx Package
    apt: name=nginx state=present
  - name: Copy Nginx.conf
    template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf  owner=root group=root mode=0644
    notify:
        - Restart Nginx Service
  handlers:
    - name: Restart Nginx Service
      service: 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里面定义好变量
[[email protected] 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
[[email protected] playb]# cat check_variable.yml
- hosts: all
  gather_facts: False
  tasks:
    - name: Display Host Variable From Hostfile
      debug: msg="The {{ inventory_hostname  }} Value is {{ key  }}"
  1. 执行playbook
[[email protected] 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定义变量
[[email protected] playb]# cat p_vars.yaml
- hosts: all
  gather_facts: False  #设置为false,那么下面的debug模块会生效
  vars:       # 先申明vars这个关键字
    key: "Ansible"  #这种方式定义,key: value的形式
  tasks:
    - name: display host variables from hostfile
      debug: msg="The {{ inventory_hostname  }} value is {{ key }}"
  1. 或者在playbook里面引用有变量的文件
[[email protected] playb]# cat p_vars.yaml
- hosts: all
  gather_facts: False
  vars_files:
    - var.json
  tasks:
    - name: display host variables from hostfile
      debug: msg="The {{ inventory_hostname  }} value is {{ key }}"
[[email protected] 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
[[email protected] 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参数能给将变量传入进去
[[email protected] 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指定文件的方式传入变量
[[email protected] playb]# cat var.json
{"key":"json"}
[[email protected] 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的方式

[[email protected] playb]# cat  p_register.yaml
- hosts: u12
  tasks:
    - name: register variable
      shell: date
      register: info
    - name: display variable
      debug: msg="the variable is {{ info[‘stdout‘] }}"

使用vars_prompt传入

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

[[email protected] playb]# cat p_prompt.yaml
- hosts: all
  gather_facts: False
  vars_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 value
       debug: msg="one value is {{ one }}"
     - name: display two value
       debug: msg="two value is {{ two }}"

执行效果如下:

[[email protected] playb]# ansible-playbook p_prompt.yaml
please input your value: nihao
please input two value [good]: 

原文地址:https://www.cnblogs.com/liaojiafa/p/9353760.html

时间: 2024-10-03 04:42:23

1. ansible-playbook 变量定义与引用的相关文章

Ansible_变量定义与引用

Ansible_变量定义与引用 inventory定义主机及主机组(自定义变量) 通过/etc/ansible/ 定义文件表示变量 使用ansible-playbook命令行传入: playbook中写入: playbook中引用vars_file: vars_prompt传入 register变量: setup模块获取变量传入 inventory定义主机及主机组(自定义变量) $?cat?hosts localhost?ansible_ssh_host=192.168.38.104?key=1

ansible 变量定义和引用

cat /etc/ansible/hosts [nodes]10.2.1.232 key=23210.2.1.43 key=43 cat debug.yaml ---- name: test how to use command module hosts: nodes remote_user: root gather_facts: false vars: - content: '20181104' tasks: - name: create a file shell: "echo {{key}}

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

摘要:类成员变量是可以定义为引用类型的,但是我们需要注意一下用法 note1:在类中定义引用变量, 必须要在初始化列表中初始化该成员变量(const 类型数据成员也必须在初始化列表中进行初始化) #include <iostream> using namespace std; class A { public: A(int k):a(n){ // 必须要在初始化列表中进行初始化 n = k; cout << a <<endl; } int get() const { r

Ansible系列(六):各种变量定义方式和变量引用

本文目录:1.1 ansible facts1.2 变量引用json数据的方式 1.2.1 引用json字典数据的方式 1.2.2 引用json数组数据的方式 1.2.3 引用facts数据1.3 设置本地facts1.4 输出和引用变量1.5 注册和定义变量的各种方式 1.5.1 register注册变量 1.5.2 set_fact定义变量 1.5.3 vars定义变量 1.5.4 vars_files定义变量 1.5.5 roles中的变量 1.5.6 命令行传递变量 1.5.7 inve

ansible之变量使用与playbook的设置(重点)

ansible之playbook 1.playbook的语法格式如下:  - hosts:  webservers 是定义的主机组 也就是playbook中的 play 角色的意思 注意":" 冒号后面也必须价格空格不然就报错 tasks: 注意 他前面是有2个空格的, ansible 是用空格来区分规格的, 记住不能使用tab按键 [[email protected] ~]# mkdir project1 [[email protected] ~]# cd project1/ [[e

自动化运维工具ansible playbook和roles的使用

ansible的结构: Inventory 用来定义被控制端 Modules 定义被控制端可用的操作 Ad Hoc Commands 定义被控制端可以执行命令的 Playbook 批量运行的方式 Tasks: 任务:由各模块所支持执行的特定操作:可以通过ansible-doc module_name来查看帮助文档,非常详细 -m  user -a 'name= password=' Variables: 变量 Templates: 模板:(如执行httpd服务时,各节点上httpd的配置文件内容

ansible使用二(ansible playbook)

ansible playbook ansible playbooks 是使用ansible简单的配置管理部署系统的基础,使用YAML语法格式的配置文件.每一个playbook中包含一系列的任务.使用ansible playbook可以更方便的管理.维护多态主机. 1.yaml语法    yaml是”YAML Ain't a Markup Language”的缩写,即不是一种标记性语言,它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料

Ansible PlayBook语法(4)

title: Ansible PlayBook语法(4) date: 2018-12-02 10:53:24 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署

Ansible Playbook - Understanding YAML

要想用Ansible操作复杂的任务,就必须要学会YAML语法的书写,不光是Ansible,连他的竞争对手saltstack也使用了YAML,下面来学习一下YAML语法的格式,省得到要你写个Playbook的时候手忙脚乱的要好. 引用一下维基:YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递回缩写.在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语