【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
简介: 【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)

本篇文章详细给大家介绍Ansible变量,变量适合管理剧本中每个项目的动态值,或是某些值在多个地方重复使用,如果将此值设置为变量再在其他地方调用会方便许多。会用变量,才算真正会用Ansible,话不多说,直接开始!

变量定义

在测试情况下,可以在命令行中定义变量;当变量较少,不会被其他剧本调用的情况下,可以在剧本头部进行定义;当有较多playbook调用时,可以在文件中定义变量;也可以通过主机清单中定义变量,但是一般不推荐;也可以采取官方推荐的定义方式。一共四种定义方式。

1、命令行定义变量

主机清单的变量会被剧本文件的方式覆盖,这两种方式的变量又会被命令行定义的方式覆盖,命令行可以使用--extra-vars或者-e设置变量

1. [root@Ansible test]# cat test.yml
2. - hosts: web_group
3.   tasks:
4.     - name: install httpd server
5.       yum:
6.         name: "{{ web_server }}"
7. [root@Ansible test]# ansible-playbook test.yml -e "web_server=vsftpd"    #定义变量并运行
8. 
9. [root@Ansible test]# cat test.yml
10. - hosts: web_group
11.   tasks:
12.     - name: install httpd server
13.       yum:
14.         name: 
15.           - "{{ web_server }}"
16.           - "{{ db_server }}"
17. [root@Ansible test]# ansible-play test.yml -e "web_server=vsftpd" -e "db_server=mariadb-server"    #定义多个变量并运行

2、剧本头部进行定义

1. #1、将一个列表定义在一个变量中
2. [root@Ansible test]# cat test.yml
3. - hosts: web_group
4.   vars:
5.     packages:
6.       - httpd
7.       - mariadb-server
8.       - php
9.       - php-mysql
10.       - php-pdo
11.   tasks:
12.     - name: install httpd ....
13.       yum: 
14.         name: "{{ packages }}"
15. 
16. #2、以列表的形式,一个内容定义一个变量
17. [root@Ansible test]# cat test.yml
18. - hosts: web_group
19.   vars:
20.     - web_server: httpd
21.     - db_server: mariadb-server
22.     - php_server: php,php-mysql,php-pdo
23.   tasks:
24.     - name: install httpd ....
25.       yum: 
26.         name: 
27.           - "{{ web_server }}"
28.           - "{{ db_server }}"
29.           - "{{ php_server }}"
30. 
31. #3、以列表形式,多个内容由多个变量定义,最后拼接调用
32. [root@Ansible test]# cat test.yml
33. - hosts: web_group
34.   vars:
35.     - ngx_ver: 1.1
36.     - ngx_dir: web
37.   tasks:
38.     - name: touch
39.       file: 
40.         name: /tmp/{{ ngx_dir }}_{{ ngx_ver }}
41.         state: touch
42. 
43. #获取并调用Ansible内置变量
44. [root@Ansible test]# cat test.yml
45. - hosts: web_group
46.   vars: 
47.     - remote_ip: "{{ ansible_default_ipv4['address'] }}"
48.     - remote_hostname: "{{ ansible_fqdn }}"
49.   tasks:
50.     - name: touch ip file
51.       file:
52.         path: /root/{{ remote_ip }}
53.         state: touch
54.     - name: touch hostname file
55.       file:
56.         path: /root/{{ remote_hostname }}
57.         state: touch

3、文件中定义变量

剧本头部定义变量的缺陷是只能当前变量使用,其他文件无法调用该变量文件,我们可以在文件中定义变量解决这个问题。

1. [root@Ansible test]# cat vars1.yml 
2. web_server: httpd
3. [root@Ansible test]# cat vars2.yml 
4. db_server: mariadb-server
5. [root@Ansible test]# cat test.yml    #调用一个文件一个变量
6. - hosts: web_group
7.   vars_files: vars1.yml
8.   tasks:
9.     - name: install httpd mariadb
10.       yum:
11.         name: "{{ web_server }}"
12. 
13. [root@Ansible test]# cat test.yml    #调用多个文件多个变量
14. - hosts: web_group
15.   vars_files: 
16.     - vars1.yml
17.     - vars2.yml
18.   tasks:
19.     - name: install httpd mariadb
20.       yum:
21.         name: 
22.           - "{{ web_server }}"
23.           - "{{ db_server }}"

4、主机清单定义变量

在主机清单中定义变量,主机的变量要高于主机组的变量,所以该方法不推荐使用,容易将环境弄乱。

1. [root@Ansible test]# vim /etc/ansible/hosts
2. [web_group]
3. web01 ansible_ssh_host=10.0.0.7
4. web02 ansible_ssh_host=10.0.0.8
5. [web_group:vars]
6. web_server=httpd
7. index_file=index.html
8. 
9. - hosts: web_group
10.   tasks:
11.   - name: Install httpd Server
12.     yum:
13.       name: "{{ web_server }}"
14.   - name: Create Index File
15.     file:
16.       path: /tmp/{{ index_file }}
17.       state: touch

5、官方推荐定义变量

创建group_vars目录,在里面创建以组名命名的文件给组定义变量,想对所有主机进行定义使用组下面的all进行定义;

1. [root@Ansible test]# mkdir group_vars
2. [root@Ansible test]# cat group_vars/web_group 
3. web_server: httpd
4. [root@Ansible test]# cat test.yml 
5. - hosts: web_group
6.   tasks:
7.     - name: install httpd server
8.       yum:
9.         name: "{{ web_server }}"

创建host_vars目录,在里面创建以主机别名命名的文件给主机定义变量。

1. [root@Ansible test]# mkdir host_vars
2. [root@Ansible test]# cat host_vars/web01
3. web_server: nginx
4. [root@Ansible test]# cat test.yml 
5. - hosts: web_group
6.   tasks:
7.     - name: install httpd server
8.       yum:
9.         name: "{{ web_server }}"

变量优先级

变量读取优先级命令行>playbook文件>主机列表文件

注意:尽量使用一种定义变量的方式进行定义,太乱了不容易操作

变量注册

Ansible模块运行时,都会返回一些result结果,类似于执行脚本,我们需要获取这些结果,判断上一步是否执行成功,默认情况下,Ansible的result并不会显示出来,所以,我们可以吧这些返回值储存到变量之中,通过调用对应的变量名,获取这些result。这种将模块的返回值写入到变量的方法叫做变量注册。

1. [root@Ansible test]# cat test.yml 
2. - hosts: web_group
3.   tasks:
4.     - name: test register vars
5.       shell: "ls -l /"
6. [root@Ansible test]# ansible-playbook test.yml    
7. 
8. PLAY [web_group] ***************************************************************
9. 
10. TASK [Gathering Facts] *********************************************************
11. ok: [web01]
12. ok: [web02]
13. 
14. TASK [test register vars] ******************************************************
15. changed: [web02]
16. changed: [web01]
17. 
18. PLAY RECAP *********************************************************************
19. web01                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
20. web02                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

当我们执行这个命令时,并不会给我们返回结果,只会返回changed是否改变,这时我们使用变量注册

1. [root@Ansible test]# cat test.yml 
2. - hosts: web_group
3.   tasks:
4.     - name: test register vars
5.       shell: "ls -l /"
6.       register: list_dir
7.     - name: return result
8.       debug:
9.         msg: "{{ list_dir }}"
10. 
11. [root@Ansible test]# ansible-playbook test.yml
12. 
13. PLAY [web_group] ***************************************************************
14. 
15. TASK [Gathering Facts] *********************************************************
16. ok: [web01]
17. ok: [web02]
18. 
19. TASK [test register vars] ******************************************************
20. changed: [web02]
21. changed: [web01]
22. 
23. TASK [return result] ***********************************************************
24. ok: [web01] => {
25. "msg": {
26. "changed": true, 
27. "cmd": "ls -l /", 
28. "delta": "0:00:00.073085", 
29. "end": "2023-04-19 17:30:57.892956", 
30. "failed": false, 
31. "rc": 0, 
32. "start": "2023-04-19 17:30:57.819871", 
33. "stderr": "", 
34. "stderr_lines": [], 
35. "stdout": "total 24\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin\ndr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot\ndrwxr-xr-x    6 www  www    71 Apr 19 08:29 code\ndrwxr-xr-x   19 root root 3200 Apr 18 22:37 dev\ndrwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 home\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib\nlrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 media\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 mnt\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 opt\ndr-xr-xr-x  128 root root    0 Mar 30 20:56 proc\ndr-xr-x---.   5 root root  197 Apr 19 16:25 root\ndrwxr-xr-x   29 root root  740 Apr 19 17:20 run\nlrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 srv\ndr-xr-xr-x   13 root root    0 Apr 19 17:28 sys\ndrwxrwxrwt.  11 root root 4096 Apr 19 17:30 tmp\ndrwxr-xr-x.  13 root root  155 Mar 29 18:30 usr\ndrwxr-xr-x.  21 root root 4096 Apr 19 17:20 var", 
36. "stdout_lines": [
37. "total 24", 
38. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", 
39. "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", 
40. "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", 
41. "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", 
42. "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", 
43. "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", 
44. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", 
45. "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", 
46. "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", 
47. "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", 
48. "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", 
49. "dr-xr-xr-x  128 root root    0 Mar 30 20:56 proc", 
50. "dr-xr-x---.   5 root root  197 Apr 19 16:25 root", 
51. "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", 
52. "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", 
53. "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", 
54. "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", 
55. "drwxrwxrwt.  11 root root 4096 Apr 19 17:30 tmp", 
56. "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", 
57. "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"
58.         ]
59.     }
60. }
61. ok: [web02] => {
62. "msg": {
63. "changed": true, 
64. "cmd": "ls -l /", 
65. "delta": "0:00:00.072887", 
66. "end": "2023-04-19 17:30:57.891135", 
67. "failed": false, 
68. "rc": 0, 
69. "start": "2023-04-19 17:30:57.818248", 
70. "stderr": "", 
71. "stderr_lines": [], 
72. "stdout": "total 28\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin\ndr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot\ndrwxr-xr-x    6 www  www    71 Apr 19 08:29 code\ndrwxr-xr-x   19 root root 3200 Apr 18 22:37 dev\ndrwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 home\nlrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib\nlrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 media\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 mnt\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 opt\ndr-xr-xr-x  127 root root    0 Mar 30 20:56 proc\ndr-xr-x---.   5 root root 4096 Apr 19 16:25 root\ndrwxr-xr-x   29 root root  740 Apr 19 17:20 run\nlrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin\ndrwxr-xr-x.   2 root root    6 Apr 11  2018 srv\ndr-xr-xr-x   13 root root    0 Apr 19 17:28 sys\ndrwxrwxrwt.  10 root root 4096 Apr 19 17:30 tmp\ndrwxr-xr-x.  13 root root  155 Mar 29 18:30 usr\ndrwxr-xr-x.  21 root root 4096 Apr 19 17:20 var", 
73. "stdout_lines": [
74. "total 28", 
75. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", 
76. "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", 
77. "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", 
78. "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", 
79. "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", 
80. "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", 
81. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", 
82. "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", 
83. "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", 
84. "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", 
85. "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", 
86. "dr-xr-xr-x  127 root root    0 Mar 30 20:56 proc", 
87. "dr-xr-x---.   5 root root 4096 Apr 19 16:25 root", 
88. "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", 
89. "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", 
90. "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", 
91. "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", 
92. "drwxrwxrwt.  10 root root 4096 Apr 19 17:30 tmp", 
93. "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", 
94. "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"
95.         ]
96.     }
97. }
98. 
99. PLAY RECAP *********************************************************************
100. web01                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
101. web02                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

内容很多,我们让其输入自己想要的内容

1. [root@Ansible test]# cat test.yml
2. - hosts: web_group
3.   tasks:
4.     - name: test register vars
5.       shell: "ls -l /"
6.       register: list_dir
7.     - name: return result
8.       debug:
9.         msg: "{{ list_dir.stdout_lines }}"
10. [root@Ansible test]# ansible-playbook test.yml 
11. 
12. PLAY [web_group] ***************************************************************
13. 
14. TASK [Gathering Facts] *********************************************************
15. ok: [web02]
16. ok: [web01]
17. 
18. TASK [test register vars] ******************************************************
19. changed: [web02]
20. changed: [web01]
21. 
22. TASK [return result] ***********************************************************
23. ok: [web01] => {
24. "msg": [
25. "total 24", 
26. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", 
27. "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", 
28. "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", 
29. "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", 
30. "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", 
31. "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", 
32. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", 
33. "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", 
34. "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", 
35. "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", 
36. "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", 
37. "dr-xr-xr-x  129 root root    0 Mar 30 20:56 proc", 
38. "dr-xr-x---.   5 root root  197 Apr 19 16:25 root", 
39. "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", 
40. "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", 
41. "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", 
42. "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", 
43. "drwxrwxrwt.  11 root root 4096 Apr 19 17:34 tmp", 
44. "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", 
45. "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"
46.     ]
47. }
48. ok: [web02] => {
49. "msg": [
50. "total 28", 
51. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 bin -> usr/bin", 
52. "dr-xr-xr-x.   5 root root 4096 Mar 29 18:41 boot", 
53. "drwxr-xr-x    6 www  www    71 Apr 19 08:29 code", 
54. "drwxr-xr-x   19 root root 3200 Apr 18 22:37 dev", 
55. "drwxr-xr-x.  90 root root 8192 Apr 19 17:20 etc", 
56. "drwxr-xr-x.   2 root root    6 Apr 11  2018 home", 
57. "lrwxrwxrwx.   1 root root    7 Mar 29 18:30 lib -> usr/lib", 
58. "lrwxrwxrwx.   1 root root    9 Mar 29 18:30 lib64 -> usr/lib64", 
59. "drwxr-xr-x.   2 root root    6 Apr 11  2018 media", 
60. "drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt", 
61. "drwxr-xr-x.   2 root root    6 Apr 11  2018 opt", 
62. "dr-xr-xr-x  127 root root    0 Mar 30 20:56 proc", 
63. "dr-xr-x---.   5 root root 4096 Apr 19 16:25 root", 
64. "drwxr-xr-x   29 root root  740 Apr 19 17:20 run", 
65. "lrwxrwxrwx.   1 root root    8 Mar 29 18:30 sbin -> usr/sbin", 
66. "drwxr-xr-x.   2 root root    6 Apr 11  2018 srv", 
67. "dr-xr-xr-x   13 root root    0 Apr 19 17:28 sys", 
68. "drwxrwxrwt.  10 root root 4096 Apr 19 17:34 tmp", 
69. "drwxr-xr-x.  13 root root  155 Mar 29 18:30 usr", 
70. "drwxr-xr-x.  21 root root 4096 Apr 19 17:20 var"
71.     ]
72. }
73. 
74. PLAY RECAP *********************************************************************
75. web01                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
76. web02                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

debug模块常用参数

msg        #调试输出的消息

var          #将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出

verbosity #debug的级别(默认是0,全部显示)

层级定义变量

1、编辑变量文件

1. [root@Ansible test]# cat vars_file.yml
2. lamp:
3.   framework:
4.     web_package: httpd
5.     db_package: mariadb-server
6.     php_package: php
7. 
8. lnmp:
9.   framework:
10.     web_package: nginx
11.     db_package: mysql
12.     php_package: php
13. 
14. lnmt:
15.   framework:
16.     web_package: nginx
17.     db_package: mysql
18.     java_package: tomcat

2、编辑剧本文件

1. #简单写法
2. [root@Ansible test]# cat test.yml
3. - hosts: web_group
4.   vars_files: vars_file.yml
5.   tasks:
6.     - name: install lamp httpd
7.       yum:
8.         name: "{{ lamp.framework.web_package }}"
9.     - name: install lamp mariadb-server
10.       yum:
11.         name: "{{ lamp.framework.db_package }}"
12.     - name: install lamp php
13.       yum:
14.         name: "{{ lamp.framework.php_package }}"
15. 
16. #官方推荐写法
17. [root@Ansible test]# cat test.yml
18. - hosts: web_group
19.   vars_files: vars_file.yml
20.   tasks:
21.     - name: install lamp httpd
22.       yum:
23.         name: "{{ lamp['framework']['web_package'] }}"
24.     - name: install lamp mariadb-server
25.       yum:
26.         name: "{{ lamp['framework']['db_package'] }}"
27.     - name: install lamp php
28.       yum:
29.         name: "{{ lamp['framework']['php_package'] }}"

3、执行剧本

1. [root@Ansible test]# ansible-playbook test.yml 
2. 
3. PLAY [web_group] ***************************************************************
4. 
5. TASK [Gathering Facts] *********************************************************
6. ok: [web01]
7. ok: [web02]
8. 
9. TASK [install lamp httpd] ******************************************************
10. ok: [web01]
11. ok: [web02]
12. 
13. TASK [install lamp mariadb-server] *********************************************
14. ok: [web01]
15. ok: [web02]
16. 
17. TASK [install lamp php] ********************************************************
18. ok: [web01]
19. ok: [web02]
20. 
21. PLAY RECAP *********************************************************************
22. web01                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
23. web02                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

facts缓存变量

Ansible facts是在客户端主机通过Ansible自动采集发现的变量,facts包含每台特定的主机信息,如被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等。

1、fasts使用场景

1、通过facts缓存检查CPU,来生成对应的nginx配置文件

2、通过facts缓存检查主机名,生成不同的zabbix配置文件

3、通过facts缓存检索物理机的内存大小来生成不同的mysql配置文件

Ansible facts类似于saltstack中的grains,对于做自动化非常有帮助!

2、fasts用法

1. [root@Ansible test]# cat test.yml 
2. - hosts: web_group
3.   vars_files: vars_file.yml
4.   tasks:
5.     - name: get host info
6.       debug:
7.         msg: Hostname "{{ ansible_fqdn }}" and IP "{{ an
8. sible_default_ipv4.address }}"
9. 
10. [root@Ansible test]# ansible-playbook test.yml 
11. 
12. PLAY [web_group] ***************************************************************
13. 
14. TASK [Gathering Facts] *********************************************************
15. ok: [web01]
16. ok: [web02]
17. 
18. TASK [get host info] ***********************************************************
19. ok: [web01] => {
20. "msg": "Hostname \"Web01\" and IP \"10.0.0.7\""
21. }
22. ok: [web02] => {
23. "msg": "Hostname \"Web02\" and IP \"10.0.0.8\""
24. }
25. 
26. PLAY RECAP *********************************************************************
27. web01                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
28. web02                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
29. 
30. [root@Ansible test]#

3、关闭fasts

1. [root@Ansible test]# cat test.yml
2. - hosts: web_group
3.   gather_facts: no #关闭信息采集
4.   vars_files: vars_file.yml
5.   tasks:
6.     - name: get host info
7.       debug:
8.         msg: Hostname "{{ ansible_fqdn }}" and IP "{{ ansible_default_ipv4.address }}"

4、fasts生成zabbix配置文件

1. [root@Ansible test]# cat test.yml
2. - hosts: web_group
3.   vars: 
4.     - zabbix_server: 172.16.1.71
5.   tasks:
6.     - name: copy zabbix agent conf
7.       template:                    #作用是将管理机上的变量内容覆盖到客户机的目标配置文件中
8.         src: ./zabbix_agentd.conf
9.         dest: /tmp/zabbix_agentd.conf

5、facts生成mysqld配置文件

1. - hosts: db_group
2.   tasks:
3.     - name: Install mysql server
4.       yum:
5.         name: mariadb-server
6.         state: present
7. 
8.     - name: copy mysql  conf
9.       template:                  #作用是将管理机上的变量内容覆盖到客户机的目标配置文件中
10.         src: ./my.cnf
11.         dest: /etc/my.cnf
12. 
13. [root@m01 ~]# vim /etc/my.cnf
14. [mysqld]
15. basedir=/usr
16. datadir=/var/lib/mysql/
17. socket=/var/lib/mysql/mysql.sock
18. log_error=/var/log/mariadb/mariadb.log
19. innodb_buffer_pool_size={{ ansible_memtotal_mb * 0.8 }}

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 缓存 编译器
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
478 0
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
1231 3
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
709 51
|
存储 缓存 Java
Java本地高性能缓存实践问题之如何定义Caffeine的缓存
Java本地高性能缓存实践问题之如何定义Caffeine的缓存
272 0
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
SAE(Serverless应用引擎)是阿里云推出的全托管PaaS平台,致力于简化微服务应用开发与管理。为满足用户对可观测性和运维能力的更高需求,SAE引入Sidecar容器技术,实现日志采集、监控指标收集等功能扩展,且无需修改主应用代码。通过共享资源模式和独立资源模式,SAE平衡了资源灵活性与隔离性。同时,提供全链路运维能力,确保应用稳定性。未来,SAE将持续优化,支持更多场景,助力用户高效用云。
|
边缘计算 运维 Cloud Native
云原生技术的崛起:重新定义软件开发与运维
云原生技术的崛起:重新定义软件开发与运维
|
JSON 数据格式 索引
Ansible fact变量与魔法变量
Ansible fact变量与魔法变量
358 6
|
存储 网络安全 数据安全/隐私保护
Ansible的变量
Ansible的变量
372 6
|
存储 C++ 运维
开发与运维数组问题之指针的定义语法如何解决
开发与运维数组问题之指针的定义语法如何解决
151 6
|
机器学习/深度学习 人工智能 运维
自动化运维的崛起:重新定义IT管理的未来
在数字化浪潮不断推进的今天,自动化运维不再是可选项,而是提升企业竞争力的必由之路。通过深入探讨自动化运维的关键要素、实施步骤和面临的挑战,本文旨在揭示自动化技术如何革新传统的IT管理模式,并展望其在未来IT领域的应用前景。
231 1