ansible-使用变量总结

playbook ---> 变量
1、使用变量:简化playbook项目的一个维护,使用一个固定的字符串表示一个不固定的值
2、定义变量:
        1) 通过playbook文件中的play进行定义,通过vars来定义变量
        2) 通过inventory主机清单进行变量定义
        3) 通过执行playbook时使用-e参数指定变量


定义变量:
1、在playbook的文件中开头通过vars关键字进行变量定义
vars:
  - v1: value1
  - v2: value2
  - v3: value3

使用变量安装软件的yml:

版本1:
[root@proxy variables]# cat install_variable1.yml
- hosts: webservers
  vars:
    - web_packages: httpd
    - ftp_packages: vsftpd

  tasks:
    - name: Install {{ web_packages }}  Pacages
      yum: name={{ web_packages }} state=present

    - name: Install {{ ftp_packages }} Packages
      yum: name={{ ftp_packages }} state=present

版本2:

[root@proxy variables]# cat install_variables2.yml
- hosts: webservers
  vars:
    - web_packages: httpd
    - ftp_packages: vsftpd

  tasks:
    - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present

使用变量卸载软件的yml:

版本1:
[root@proxy variables]# cat uninstall_variable1.yml
- hosts: webservers
  vars:
    - web_packages: httpd
    - ftp_packages: vsftpd

  tasks:
    - name: Install httpd Pacages
      yum: name={{ web_packages }} state=absent

    - name: Install {{ ftp_packages }} Packages
      yum: name=vsftpd state=absent

版本2:

[root@proxy variables]# cat uninstall_variables2.yml
- hosts: webservers
  vars:
    - web_packages: httpd
    - ftp_packages: vsftpd

  tasks:
    - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: absent


2、通过定义一个变量文件,然后使用playbook进行调用
1) 准备一个变量的文件,建议使用yml格式。内容:vars_name: value
[root@proxy variables]# cat vars.yml
web_packages: httpd
ftp_packages: vsftpd

2) 准备playbook进行调用

安装脚本:
[root@proxy variables]# cat install_vars3.yml
- hosts: webservers
  vars_files: ./vars.yml
  tasks:
    - name: Install rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{  web_packages }}"
          - "{{ ftp_packages }}"
        state: present

卸载脚本:
[root@proxy variables]# cat uninstall_vars3.yml
- hosts: webservers
  vars_files: ./vars.yml
  tasks:
    - name: Install rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{  web_packages }}"
          - "{{ ftp_packages }}"
        state: absent

3、在inventory主机清单中定义变量,但是要注意:主机变量优先于主机组变量。
host_vars 特殊的变量目录,针对单个主机进行变量定义
group_vars 特殊的变量目录,针对inventory主机清单中的组进行变量定义,对A组定义的变量 B组无法调用
group_vars/all 特定的变量文件,可以对多有的主机组定义变量。
在当前目录中定义一个hosts文件
[root@proxy variables]# cat hosts
[remotes]
192.168.200.100
192.168.200.200

[remotes:vars]
filename=ansible_createfile

在远程主机上创建一个文件:
[root@proxy variables]# cat vars2.yml
- hosts: remotes
  remote_user: root
  tasks:
    - name: create a file {{ filename }} in remote /tmp
      file: path=/tmp/{{ filename }} state=touch

调用:ansible-playbook vars2.yml -i hosts

 

在远程主机上删除一个文件:
[root@proxy variables]# cat vars3.yml
- hosts: remotes
  remote_user: root
  tasks:
    - name: delete a file {{ filename }} in remote /tmp
      file: path=/tmp/{{ filename }} state=absent

调用:ansible-playbook vars3.yml -i hosts

 

官方推荐在项目目录下创建两个变量的目录host_vars group_vars:
host_vars/主机名命名的文件
group_vars/组名命名的文件
在当前目录下新建一个group_vars目录,在这个目录下新建两个文件:
[root@proxy variables]# ls group_vars/
db1  db2
[root@proxy variables]# cat group_vars/db1
web_packages: httpd
ftp_packages: vsftpd
[root@proxy variables]# cat group_vars/db2
web_packages: wget
ftp_packages: tree

在/etc/ansible/hosts文件末尾添加以下行:
[db1]
192.168.200.100 ansible_user=root

[db2]
192.168.200.200 ansible_user=root

编写两个yml文件:
[root@proxy variables]# cat install_db1.yml
- hosts: db1
  remote_user: root
  tasks:
    - name: Install rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{  web_packages }}"
          - "{{ ftp_packages }}"
        state: present

[root@proxy variables]# cat install_db2.yml
- hosts: db2
  remote_user: root
  tasks:
    - name: Install rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{  web_packages }}"
          - "{{ ftp_packages }}"
        state: present

执行ansible-playbook install_db1.yml:db1对应的远程主机上安装httpd vsftpd


执行ansible-playbook install_db2.yml:db2对应的远程主机上安装wget tree


注意:默认情况下,group_vars目录中文件名与hosts清单中的组名保持一致,
比如在group_vars目录下创建了db1组的变量,其它组是无法使用db1组的变量
系统提供了一个特殊组,all,只需要在group_vars目录下建立一个all文件,编写好变量,所以组都可以使用。

 

host_vars目录下创建一个文件,文件名与inventory清单中的主机名称要保持完全一致,如果是ip地址,则创建相同
ip地址的文件即可。

3、通过执行playbook时使用-e参数指定

ot@proxy variables]# cat install_db.yml
- hosts: "{{  hosts }}"
  remote_user: root
  tasks:
    - name: Install rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"
      yum:
        name:
          - "{{  web_packages }}"
          - "{{ ftp_packages }}"
        state: present


ansible-playbook install_db.yml -e "hosts=db1"
ansible-playbook install_db.yml -e "hosts=db2"

ansible变量优先级:
外置传参>playbook(vars_files>vars)

>inventory(host_vars>group_vars/group_name>grou_vars/all)
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值