Ansible进阶变量,与msg选项互斥。v
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
评论暂时关闭