Ansible变量

news/2024/11/25 7:41:55/

Ansible变量

变量命名规则

变量的名字由字母、下划线和数字组成,必须以字母开头如:

good_a

ok_b

传递一个YAML/JSON的形式(注意不管是YAML还是JSON,它们的最终格式一定要是字典)

# cat a.json

{"name":"gyq","type":"student"}

ansible all -i localhost, -m debug -a "msg='name is {{ name }} type is {{type}}'" -e @a.json

# cat a.yaml

---

name: gyq

type: student

...

剧本变量

通过PLAY属性vars定义

通过PLAY属性vars_files定义

如何在PlayBook中使用这些变量

使用{{} 变量名 }

---

- name: test play vars

  hosts: all

  vars:

    user: lilei

    home: /home/lilei

  tasks:

    - name: create the user {{ user }}

      user:

        name: "{{ user }}"

        home: "{{ home }}"

...

在PLayBook中使用变量的注意点,为{}加上双引号避免Ansible把它当字典

资产变量

资产变量分为主机变量和主机组变量,分别针对资产中的单个主机和主机组

主机变量

以下资产中,定义了一个主机变量lilei,此变量只针对192.168.40.137这台服务器有效。

# cat hostsandhostvars

[webservers]

192.168.40.137 user=lilei port=3309

192.168.40.138

验证

//获取定义的变量值

[root@GYQ-master ~]# ansible 192.168.40.137 -i hostsandhostvars -m debug -a "msg='{{user}} {{port}}'"

192.168.40.137 | SUCCESS => {

    "msg": "lilei 3309"

}

//未获取到定义的变量值,因为lilei这个变量针对192.168.40.138主机无效

ansible 192.168.40.138 -i hostsandhostvars -m debug -a "var=user"

192.168.40.138 | SUCCESS => {

    "user": "VARIABLE IS NOT DEFINED!"

}

主机组变量

以下资产中,定义了一个组变量home,此变量将针对webservers这个主机组的所有服务器有效

# cat hostsandhostvars 

[webservers]

192.168.40.137 user=lilei port=3309

192.168.40.138

[webservers:vars]

home="/home/lilei"

验证

ansible webservers -i hostsandhostvars -m debug -a "var=home"

主机变量VS主机组变量

当主机变量和组变量在同一个资产中发生重名的情况,会有什么效果?

# cat hosts_v2

[webservers]

192.168.40.137 user=lilei

192.168.40.138

[webservers:vars]

user=tom

验证

//在资产中定义了主机变量和组变量user,此时发现192.168.40.137这台机器的主机变量user的优先级更高

//优于组变量user使用。

ansible webservers -i hosts_v2 -m debug -a "var=user"

变量的继承

# cat hosts_v3

[webservers]

192.168.40.137

[dbservers]

192.168.40.138

[allservers]

[allservers:children]

dbservers

webservers

[allservers:vars]

user=lilei

验证

//在资产继承的同时,对应的变量也发生了继承

ansible allservers -i hosts_v3 -m debug -a "var=user"

Inventory内置变量的说明

内置变量几乎都是以ansible_为前缀。

ansible_ssh_host

    将要连接的远程主机名与你想要设定的主机的别名不同的话,可通过此变量设置。

ansible_ssh_port

    ssh端口号.如果不是默认的端口号,通过此变量设置

ansible_ss_user

    默认的 ssh 用户名

ansible ssh pass

    ssh 密码(这种方式并不安全,官方强烈建议使用 --ask-pass ssh SSH密钥)

ansible sudo pass

    sudo 密码(这种方式并不安全,官方强烈建议使用 --ask-sudo-pass

ansible_sudo_exe (new in version 1.8)

    sudo 命令路径(适用于1.8及以上版本)

ansible_ssh_private_key_file

    ssh 使用的私钥文件适用于有多个密钥,而你不想使用SS代理的情况

ansible_python_interpreter

    目标主机的 python 路径适用于的情况:系统中有多个 Python或者命令路径不是"/usr/bin/python",比如/usr/local/bin/python3

Facts变量

不需要人为去声明及赋值,完全由setup模块帮我们完成。

它收集了有关被管理服务器的操作系统版本、服务器IP地址、主机名,,磁盘的使用情况、CPU个数、内存大小等等有关被管理服务器的私有信息。

在每次PlayBook运行的时候都会发现在PlayBook执行前都会有一个GatheringFacts的过程。这个过程就是收集被管理服务器的Facts信息过程。

手动手机Facts变量

ansible all -i localhost, -c local -m setup

过滤Facts

通过使用Facts模块中的filter参数去过滤我们想要的信息。

ansible all -i localhost, -m setup -a "filter=*memory*" -c local

在PlayBook中使用Facts变量

默认情况下,在执行PlayBook的时候,它会去自动的获取每台被管理服务器的facts信息。

[root@GYQ-master ~]# cat facts.yml

---

- name: print facts variable

  hosts: all

  tasks:

   - name: print facts variable

     debug:

       msg: "The default IPV4 address is {{ ansible_default_ipv4.address }}"

...

在PlayBook中去关闭Facts变量的获取

若在整个PlayBook的执行过程中,完全未使用过Facts变量,此时我们可以将其关闭,以加快PlayBook的执行速度。

[root@GYQ-master ~]# cat myplaybook.yml

---

- name: mange web servers

  hosts: webservers

  gather_facts: no    #关闭Facts变量

  remote_user: root

  tasks:

    - name: install nginx package

      yum: name=nginx state=present

    - name: copy ngixn.conf to remote server

      copy: src=nginx.conf dest=/etc/nginx/nginx.conf

    - name: start nginx server

      service:

        name: nginx

        enabled: true

        state: started

...

注册变量

往往用于保存一个task任务的执行结果,以便于debug时使用。

或者将此次task任务的结果作为条件,去判断是否去执行其他task任务注册变量在PlayBook中通过register关键字去实现。

[root@GYQ-master ~]# cat myplaybook3.yml

---

- name: install a package and print the result

  hosts: webservers

  remote_user: root

  tasks:

    - name: install nginx package

      yum: name=nginx state=present

      register: install_result

    - name: print result

      debug: var=install_result

#执行

ansible-playbook -i hosts myplaybook3.yml

变量优先级

环境准备

1、定义一份资产、且定义了资产变量user

# cat user

[dbservers]

192.168.40.137

[webservers]

192.168.40.138

[allservers:children]

dbservers

webservers

[allservers:vars]

user=tomcat

2、编写一份PlayBook、同样定义剧本变量user

# cat user.yml

---

- name: test variable priority

  hosts: all

  remote_user: root

  vars:

    user: mysql

  tasks:

    - name: print the user value

      debug: msg='the user value is {{ user }}'

...

验证测试

同时使用全局变量、剧本变量、资产变量

当变量user同时定义在全局变量、剧本变量及资产变量中时,全局变量的优先级最高。

ansible-playbook -i hosts priority.yml -e "user=www"


http://www.ppmy.cn/news/108652.html

相关文章

做接口测试时遇到接口加密了该如何处理

对明文编码生成信息摘要,以防止被篡改。比如MD5使用的是Hash算法,无论多长的输入,MD5都会输出长度为128bits的一个串。 摘要算法不要秘钥,客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。 对称加密 对称加…

小学课后兴趣班选课平台的设计与实现(ASP.NET,SQLServer)

系统功能模块设计 中小学课后兴趣班选课平台包括前台功能模块和后台功能模块:前台功能模块是给会员使用的功能模块,在前台功能模块中会员可以实现在线注册,登录,查看发布的新闻资讯信息,查看教师,在线留言&…

腾讯云轻量应用服务器CPU主频多少?型号?

腾讯云轻量应用服务器CPU型号是什么?轻量服务器处理器主频?腾讯云服务器网账号下的CPU处理器型号为2.5GHz主频的Intel(R) Xeon(R) Gold 6133 CPU和2.4GHz主频Intel(R) Xeon(R) CPU E5-26xx v4,腾讯云轻量应用服务器不支持指定底层物理服务器的…

在Linux系统实现服务器端和客户端的套接字通信

目录 一.创建一个socket文件夹用来存放编写的服务器端和客户端程序 二.编写服务器端代码 三.编写客户端代码 四.编译c语言程序 五.断开连接 六.可能涉及到的一些没接触过的知识点 一.创建一个socket文件夹用来存放编写的服务器端和客户端程序 (我系统里的文件…

【多线程】sleep( ) 和 wait( ) 区别面试常问到

文章目录 前言区别1:使用限制区别2:使用场景区别3:所属类区别4:释放锁区别5:线程切换 前言 sleep(休眠) 和 wait(等待) 方法是 Java 多线程中常用的两个方法,它们有什么区别及一些该注意的地方有哪些呢&am…

Django_models模型--03

1. 配置MySQL表🐕🐕🐕 1.1 安装mysql🐅🐅 MySQL Workbench 8.0 CE 1.2 MySQL驱动🐈🐈 1.21 使用mysqlclient🐆 使用mysqlclientpip install mysqlclient( 如果上面的命令安装失…

2023年春秋杯网络安全联赛春季赛Reverse题目复现

文章目录 一.sum1. 分析程序逻辑2.解数独矩阵3.解题脚本 二.Poisoned_tea_CHELL1. 重新识别函数及程序逻辑分析2.IDA动态调试(attach附加调试)3. 输入选项进行单步调试4.解题脚本 一.sum 1. 分析程序逻辑 这里直接贴上当时分析的结果,根据程序行为不难猜出是数独问题(还得靠猜…

MATLAB 之 数值数据,矩阵的表示和变量及其操作

文章目录 一、数值数据1. 数值数据类型的分类1.1 整型1.2 浮点型1.3 复型 2. 数据的输出格式 二、矩阵的表示1. 矩阵的建立1.1 直接输入法建立矩阵1.2 已建好的矩阵建立更大的矩阵 2. 冒号表达式3. 矩阵元素的引用3.1 矩阵元素的引用方式3.2 利用冒号表达式获得子矩阵3.3 利用空…