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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【运维知识进阶篇】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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
缓存 NoSQL Java
Java实现redis缓存效果变量过期
Java实现redis缓存效果变量过期
64 0
|
7月前
|
运维 负载均衡 关系型数据库
【运维知识进阶篇】用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP),实现4个项目一键部署
【运维知识进阶篇】用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP),实现4个项目一键部署
98 0
|
7月前
|
存储 运维 应用服务中间件
【运维知识进阶篇】Ansible Roles详解
【运维知识进阶篇】Ansible Roles详解
66 0
|
4月前
|
运维 Shell
运维(12)- shell位置参数和特殊变量
运维(12)- shell位置参数和特殊变量
25 0
|
4月前
|
运维 Shell C语言
运维(04)- shell变量
运维(04)- shell变量
18 0
|
7月前
|
运维 Shell
【运维知识高级篇】超详细的Shell编程讲解4(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)(二)
【运维知识高级篇】超详细的Shell编程讲解4(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)(二)
73 0
|
7月前
|
运维 Shell 数据安全/隐私保护
【运维知识高级篇】超详细的Shell编程讲解4(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)(一)
【运维知识高级篇】超详细的Shell编程讲解4(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)
110 0
|
7月前
|
运维 Shell Perl
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
88 0
|
7月前
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
79 0
|
7月前
|
运维 Shell Linux
【运维知识高级篇】超详细的Shell编程讲解1(Shell作用+脚本书写方式+脚本执行方式+变量分类+变量配置文件+变量定义+Shell重要的位置变量+三种传参方式)
【运维知识高级篇】超详细的Shell编程讲解1(Shell作用+脚本书写方式+脚本执行方式+变量分类+变量配置文件+变量定义+Shell重要的位置变量+三种传参方式)
227 1

相关产品

  • 云迁移中心