Ansible变量
作者:互联网
Ansible变量 特点 PlayBook ad-hoc 完整性 √ ✘ 持久性 √ ✘ 执行效率 低 高 变量 支持 不支持 耦合度 低 高 1.PlayBook功能比ad-hoc更全,是对ad-hoc的一种编排. 2.PlayBook能很好的控制先后执行顺序, 以及依赖关系. 3.PlayBoo
Ansible变量
特点 | PlayBook | ad-hoc |
---|---|---|
完整性 | √ | ✘ |
持久性 | √ | ✘ |
执行效率 | 低 | 高 |
变量 | 支持 | 不支持 |
耦合度 | 低 | 高 |
1.PlayBook
功能比ad-hoc
更全,是对ad-hoc
的一种编排.
2.PlayBook
能很好的控制先后执行顺序, 以及依赖关系.
3.PlayBook
语法展现更加的直观.
4.playbook
可以持久使用,ad-hoc
无法持久使用.
扩展模块
unarchive 模块
用来解压,在管理机上的压缩包可以直接解压到目标主机上,也可在远程主机上执行默认解压到/tmp目录下。需要依耐各种解压命令。
[root@m01 ~]# ansible web_group -m unarchive -a 'src=/root/wordpress-5.4-zh_CN.tar.gz dest=/root' [root@m01 ~]# ansible web01 -m unarchive -a 'src=/root/wordpress-5.4-zh_CN.tar.gz dest=/root remote_src=yes' src: # 指定源文件在哪里(压缩包的路径) dest: # 指定你要解压的位置在哪里 remote_src: # 指定该包是否在远端机器 yes: # 在 no: # 不在
数据控制模块
grant all on *.* to wp@'%' identified by '123' mysql_user: name: wp password: 123 host: "%" priv: '*.*:ALL' state: present name # 创建的用户名 password # 创建的密码 host # 允许连接的主机 priv # 权限 state absent # 删除 present # 创建 mysql_db: name: 库名 state: prensent
定义playbook变量
定义方式
- 命令方式定义
- play文件中定义
- 通过主机清单定义
通过playbook定义
# 定义变量的一种方式 [root@m01 ~]# vi vars.yml - hosts: web_group vars: # packges 变量名 packges: - httpd - tree - mariadb tasks: - name: install service yum: # 调用变量 name: "{{ packges_name }}" state: present # 方法二: - hosts: web_group vars: - web_server: httpd - db_server: mariadb-server - php_server: - php - php-mysql - php-pdo tasks: - name: Install httpd mariadb php Server yum: name: - "{{ web_server }}" - "{{ db_server }}" - "{{ php_server }}"
通过vars_file定义
## 1.定义变量 [root@m01 ~]# vim /root/vars_file.yml create_file: zls_vars_file ## 2.调用变量 [root@m01 ~]# vim var1.yml - hosts: web01 vars_files: /root/vars_file.yml tasks: - name: Create file file: path: /root/{{ create_file }} state: touch
在主机清单中定义变量
## 1.定义变量 [root@m01 ~]# vim /etc/ansible/hosts [web_group:vars] create_file=zls_inventory ## 2.调用变量 - hosts: web01 tasks: - name: Create file file: path: /root/{{ create_file }} state: touch
官方推荐
官方推荐在ansible项目目录中创建变量,在play-book指定的目录下创建两个固定的目录名group_vars、host_vars再再里面创建变量。
[root@m01 ~/ansible]# tree . ├── create.yml ├── group_vars │ └── web_group ├── host_vars │ ├── web01 │ └── web02 [root@m01 ~/ansible]# vi create.yml - hosts: all tasks: - name: create debug: msg: "{{ create_file }}" when: ansible_fqdn == "web01" # 打印web01的变量
变量的优先级
## 调用变量 - hosts: web_group vars: create_file: vars vars_files: /root/vars_files.yml tasks: - name: c f file: path: /root/{{ create_file }} state: touch ## 定义变量 1. vars: create_file: vars 2. vars_files: /root/vars_files.yml 3.host_vars [root@m01 ansible]# vim host_vars/web01 create_file: host_vars_web01 [root@m01 ansible]# vim host_vars/web02 create_file: host_vars_web02 4.group_vars [root@m01 ansible]# vim group_vars/web_group create_file: group_vars 5.命令行定义变量 -e '变量名=变量值' [root@m01 ansible]# ansible-playbook var4.yml -e 'create_file=minglinghang_file' ##### 优先级最高:命令行 #### 优先级第二:vars_file ### 优先级第三:vars ## 优先级第四:host_vars # 优先级第五:group_vars #### 层级定义变量 lnmt: framework: web_package: nginx db_package: mysql java_package: tomcat xxx: a: 123 b:456 ### 层级调用变量 {{ lnmt.xxx.a }} {{ lnmt.framework.web_package }}
变量 | 优先级 |
---|---|
命令行file | 1 |
vars_file | 2 |
vars | 3 |
host_vars | 4 |
group_vars | 5 |
变量注册
[root@m01 ~]# vi regester.yml - hosts: web_group tasks: - name: Test re vars shell: "df -h" register: disk_info - name: get disk info debug: msg: "{{ disk_info.stdout_lines }}" # 案例 [root@m01 ~/ansible]# vim register.yml - hosts: web_group tasks: - name: register vars shell: "hostname -I" register: host_ip - name: get register vars debug: msg: "{{ host_ip.stdout_lines }}" [root@m01 ~/ansible]# vi create.yml - hosts: web01 tasks: - name: register var shell: "ls /root/nginx_php" register: directory_info ignore_errors: yes # 忽略错误 - name: create web01 shell: "mv /root/nginx_php /root/web01" when: directory_info.rc == 0 # 通过注册变量的方式来判断文件是否存在,然后做出相应的动作。
层级变量
# 定义层级变量 [root@m01 ~/ansible]# vi vars_file.yml lamp: framework: web_package: httpd db_package: mariadb-server php_package: php # 调用方法 [root@m01 ~/ansible]# vi level.yml - hosts: web01 vars_files: ./vars_file.yml tasks: - name: debug level vars debug: # 每一层后面加"."取到下一层 msg: "{{ lamp.framework.web_package }}"
facts 缓存
就是每一次执行一次play-book缓存的主机信息。
[root@m01 ~/ansible]# ansible web01 -m setup
## 关闭facts [root@m01 ~]# vim facts.yml - hosts: web_group gather_facts: no #关闭信息采集 tasks:
template 模块
在使用它推送脚本的时候,会把脚本里面的ansible变量给替换掉。
[root@m01 ~/ansible]# cat hostname.conf hostname={{ ansible_fqdn }} [root@m01 ~/ansible]# vi template.yml - hosts: web01 tasks: - name: telplate test template: src: /root/ansible/hostname.conf dest: /root/ [root@web01 ~]# cat hostname.conf hostname=web01
标签:Ansible,变量,vars,ansible,file,m01,root,name 来源: https://blog.51cto.com/u_10272167/2711260