Ansible进阶变量,与msg选项互斥。v


Ansible变量

1.Ansible变量最常见的是以下四种:
1.1.ansible变量可以用命令行(不推荐)
1.2.在剧本中vars定义一个变量
1.3.在配置文件中做变量(推荐多个剧本都可使用)
1.4.ansible内置一个变量facts

2.剧本引用变量是用两个花括号{{变量名}},一般用debug模块
msg 打印的自定义消息
var 要调试的变量名。与msg选项互斥。
verbosity 一个控制调试运行时间的数字,如果设置为3,则仅在-vvv或更高版本时运行调试
例如:

#定义一个变量file变量内容/etc/hostname
- hosts:web
  vars:
    file: /etc/hostname
  tasks:
    - name: print var
      debug:
        msg: 变量file内容是 {{file}}

3.在配置文件中做变量(推荐多个剧本都可使用)
例如:在ansible目录下建立一个vars-file.yml文件,其它剧本也可调用

vim vars-file.yml			#名字随变
file: /etc/hostname			#写入变量file
dir: /root					#写入变量dir
#保存退出

编写使用变量yml

- hosts: web		#主机清单分组可根据自己的实际情况来
  vars_files: ./vars-file.yml   #调用变量文件,
  task:
    - name: print var
      debug:
        msg: '{{dir}}变量file的内容是{{file}}'

常见问题:ansible什么时候加引号?
一般在变量开头的时候加引号。

4.根据主机清单自动识别变量
通过主机清单里面的分组进行变量共享
比如:我想让hosts主机清单组中的web组服务器 的port80 ,date组服务器 的port837口
在ansible目录文件夹下创建

mkdir -p group_vars	 
#先建立一个group_vars/  文件夹
#group_vars/  目录下得文件夹一定要和主机清单中的分组名必须一致
例如:
group_vars/
	lb/vars.yml 	#存放lb组的变量
	web/vars.yml	#存放web组的变量
	data/vars.yml   #存放data组的变量
	all/vars.yml    #所有主机共用的变量
	#注意ansible调用变量一般是就近原则,很少两个一块写的,二选一
在web文件中的vars.yml写入:
port:80
在data文件中的vars.yml写入:
port:837

编写剧本:

- hosts: web
  tasks:
    - name: print var
      debug:
        msg: '当前的服务的端口号是{{port}}'
- hosts: data
  tasks:
    - name: print var
      debug:
        msg: '当前的服务的端口号是{{port}}'

5.定义变量小结:

命令行定义变量:不推荐,临时定义创建

剧本中定义变量:常用,vars好处:易于理解,缺点只限于当前剧本

变量文件:都存放在一个文件中,优点:vars_files方便管理与维护,缺点:无法针对某些主机进行定义

根据分组变量:在group_vars目录下存放,定义剧本中可根据组

6.ansible内置变量facts
facts收集主机信息:一般获取主机名,IP,cpu等

ansible -i hosts test1 -m setup 	#查看facts变量
#常用的facts变量
ansible_hostname	#主机名
ansible_memtotal_mb		#内存大小总计mb
ansible_processor_vcpus	#cpu数量
ansible_default_ipv4	#默认网卡IP 
ansible_date_time.data	#时间  
ansible_distribution	#系统发行版本
ansible_processor_cores	#CPU核心数

下级目录后面直接加点
例如:ansible_date_time.data #时间

ansible_date_time": {
            "date": "2022-08-29",
                    },

例子:

#批量分发motd文件,文件内容根据不同机器变化
#01.创建motd模板文件
#02.分发文件到/etc/motd替换
vim motd.j2
#welcom to linux
#hostname: {{ansible_hostname}}
#eth0.ip: {{ansible_default_ipv4}}
#内存大小:{{ansible_memtotal_mb}}
#发行版本:{{ansible_distribution}}
#CPU数量: {{ansible_processor_vcpus}}
#CPU核心数:{{ansible_processor_cores}}

编写剧本

vi facts.yaml
- host: all
  task:
    - name: fenfa /etc/motd
	  template:
	  	 src: ./motd.j2
	  	 dest: /etc/motd
	  	 backup: yes

注意如果用copy模块,机器是无法解析的,出现的是motd.j2编写的内容,所以用template模块,功能跟copy模块一样,但是能解析
7.关闭facts变量增加剧本执行速度
在剧本中增加:gather_facts: false
例子:

vi facts.yaml
- host: all
  gather_facts: false
  task:
    - name: fenfa /etc/motd
	  template:
	  	 src: ./motd.j2
	  	 dest: /etc/motd
	  	 backup: yes

相关内容