Ansible - [07] 定义变量的几种方式

题记部分

 

 

Ansible 支持十几种定义变量的方式

  • Inventory 变量
  • Host Facts 变量
  • Register 变量
  • Playbook 变量
  • Playbook 提示变量
  • 变量文件
  • 命令行变量

 

 

一、Inventory 变量

1、定义变量(在主机清单配置文件中进行定义)

[root@control ansible]# cat ~/ansible/hosts
[test]
node1 myvar1="hello world" myvar2="content"
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
yourname="jacob"

2、使用变量(以下是以playbook的场景演示变量的使用)

[root@control ansible]# cat ~/ansible/inventory_var.yml
---
- hosts: test
  tasks:
    - name: create a file with var.
      shell: echo {{ myvar1 }} >/tmp/{{myvar2}}
- hosts: webserver
  tasks:
    - name: create a user with var.
      user:
        name: "{{ yourname }}"

第11行 以双花括号开始的时候,需要用双引号引起来,第6行 如果不是以双花括号开头则不需要加引号。

 

 

 

二、Host Facts 变量

Host Facts 变量(可以直接调用ansible收集的系统信息)

[root@control ansible]# cat ~/ansible/facts_var.yml
---
- hosts: test
  tasks:
    - name: Use facts info.
      copy:
        content: "{{ansible_hostname}}:{{ansible_bios_version}}"
        dest: /tmp/facts.txt

上述playbook可以将目标主机名及其bios版本号输出到目标主机/tmp/facts.txt文件中

 

 

三、Register 变量

register语句可以将某个命令的执行结果保存到变量中

[root@control ansible]# cat ~/ansible/register.yml
---
- hosts: agent
  tasks:
    - name: save shell result to a variable.
      shell: hostname
      register: myvar
    - name: print the variable's value through debug
      debug:
        msg: "{{ myvar.stdout }}"

如果(使用debug模块)在msg直接获得myvar,则会将所有输出信息到保存在myvar中,可以通过myvar.stdout获取提取部分数据(如:输出结果 stdout

 

 

 

四、Playbook 变量

使用 vars 关键词可以在playbook内定义变量(注意密码必须是字符串,需要加引号)

[root@control ansible]# cat ~/ansible/playbook_var.yml
---
- hosts: agent
  vars:
    iname: heal
    ipass: '123456'
  tasks:
    - name: Use variables create user.
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"

 

 

 

五、Playbook 提示变量

根据提示输入变量的值

[root@control ansible]# cat ~/ansible/prompt_var.yml
---
- hosts: agent
  vars_prompt:
    - name: iname
      prompt: "请输入用户名:"
      private: no
    - name: ipasswd
      prompt: "请输入密码:"
      private: yes
  tasks:
    - name: create a user.
      user:
        name: "{{ iname }}"
        password: "{{ ipasswd | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook prompt_var.yml
请输入用户名: xyz
请输入密码: 

 

 

六、变量文件(vars_files)

单独定义一个变量文件,在playbook中用vars_files调用该文件

[root@control ansible]# cat ~/ansible/varibales.yml
---
iname: cloud
ipass: '123456'
[root@control ansible]# cat ~/ansible/file_var.yml
---
- hosts: test
  vars_files: variables.yml
  tasks:
    - name: create user.
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"

 

 

七、命令行定义变量

执行ansible-playbook命令时使用-e参数定义变量

[root@control ansible]# cat ~/ansible/command_var.yml
---
- hosts: agent
  tasks:
    - name: create user
      user: 
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook command_var.yml -e iname=jack -e ipass=123456

 

 

 

 

— 要养成终身学习的习惯 —

posted @ 2024-01-13 14:16  HOUHUILIN  阅读(46)  评论(0编辑  收藏  举报