3.ansible进阶

时间:2020-8-31 作者:admin


文章目录

一、Ansible特殊模块

1.1、setup模块

ansible_facts用于采集被管理设备的系统信息,所有收集的信息都被保存在变量中,每次执行playbook默认第一个任务就是Gathering Facts,使用setup模块可以查看收集到的facts信息。

[root@control ansible]# ansible test -m setup
192.168.4.10 | SUCCESS => {
"ansible_facts": {
   "ansible_all_ipv4_addresses": [
… 省略部分内容…
  • 常用的变量
ansible_all_ipv4_addresses IP地址
ansible_bios_version 主板BIOS版本
ansible_memtotal_mb 总内存
ansible_hostname 主机名
ansible_fqdn 主机的域名
ansible_devices.sda.partitions.sda1.size 某个磁盘分区的大小

1.2、debug模块

debug模块可以显示变量的值,可以辅助排错,通过msg可以显示变量的值,变量需要使用{{}}扩起来。

[root@control ansible]# vim ~/ansible/debug.yml
---
- hosts: test
  tasks:
    - debug:
        msg: "主机名是:{{ ansible_hostname }}"
    - debug:
        msg: "总内存大小:{{ ansible_memtotal_mb }}"
#备注调用debug模块显示某些具体的变量值
#debug模块可以显示变量的值,可以辅助排错

二、定义变量的方法

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

下面是根据优先级排序的定义方式:

  1. Inventory变量
  2. Host Facts变量
  3. Playbook变量
  4. Playbook提示变量
  5. 变量文件
  6. 命令行变量

2.1、Inventory变量(在主机清单配置文件中定义变量)。

[root@control ansible]# vim ~/ansible/inventory
[test]
node1  iname="nb" 
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
iname="dachui"

#备注,在node1主机后面给该主机添加变量iname,值为nb.
#给webserver组定义变量,vars是关键词不可以改变,webserver是上面定义的组
#给这个组定义变量iname="dachui"

下面编写剧本调用刚才的变量:(在剧本中需要调用变量是要使用{{}})

[root@control ansible]# vim ~/ansible/inventory_var.yml
---
- hosts: node1,webserver                         #定义需要远程管理的主机是谁               
  tasks:                                           #剧目要完成哪些任务
    - name: create a user with var.              #剧目中的第一个任务描述信息
      user:                                        #调用user模块创建用户
        name: "{{ iname }}"                      #需要创建的用户名是iname这个变量

#注意事项:
#在ansible剧本中当调用变量时,开始位置就调用变量,就需要在{{}}外面加双引号
#如果是在后面或者中间位置调用变量{{}}外面可以不加双引号
#如:
#  "{{ iname }}"
#  nihao {{ iname }}

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

[root@control ansible]# vim ~/ansible/facts_var.yml
---
- hosts: test
  tasks:
    - name: create user.
      user:
        name: "{{ansible_hostname}}"

#定义剧本,远程所有被管理主机,调用user模块,创建用户
#需要创建的用户名ansible_hostname是一个ansible_facts变量
#验证: 到node1主机查看是否有一个与主机名同名的用户

2.3、Playbook变量(使用vars关键词可以在playbook内定义变量)。

[root@control ansible]# vim ~/ansible/playbook_var.yml
---
- hosts: test
  vars:                                     #vars是关键词,用来定义变量用的
    iname: heal                            #具体变量名是iname,值是heal
    ipass: '123456'                       #再定义一个变量名是ipass,值是123456
#注意密码必须是字符串,需要引号                           
  tasks:                                   #tasks定义需要执行的任务
    - name: Use variables create user.  #给任务写个描述信息   
      user:                                #调用user模块创建用户
        name: "{{ iname }}"               #用户名的是前面定义的变量
        password: "{{ ipass | password_hash('sha512') }}"
#密码是前面定义好的ipass,管道给password_hash把密码加密.

2.4、Playbook提示变量(根据提示输入变量的值)。

[root@control ansible]# vim ~/ansible/prompt_var.yml
---
- hosts: test
  vars_prompt:                         #vars_prompt是关键词,定义提示变量
    - name: iname                      #通过name定义变量名为iname
      prompt: "请输入用户名"           #执行剧本时提示信息
      private: no                      #是否是隐私数据,no代表不是(屏幕可以显示)                               
    - name: ipasswd                   #通过name再定义变量,变量名为ipasswd
      prompt: "请输入密码"             #执行剧本时提示信息
      private: yes                     #是否是隐私数据,yes代表是(隐私数据屏幕不显示)                           
  tasks:                               #定义剧本需要执行的任务
    - name: Create a user.           #定义第一个任务的描述信息
      user:                            #调用user模块创建用户,设置用户密码
        name: "{{ iname }}"          #用户名是前面创建的变量iname
        password: "{{ ipasswd | password_hash('sha512') }}"
#密码是前面定义的变量ipasswd,密码管道给password_hash加密.

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

[root@control ansible]# vim ~/ansible/file_var.yml
---
- hosts: test
  vars_files: variables.yml             #当变量比较多时,专门定义一个文件用来存变量
  tasks:
    - name: create user.
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"
#调用user模块创建用户
#用户名是变量文件variables.yml中定义的变量iname,密码也是变量文件中定义的变量
[root@control ansible]# vim  ~/ansible/variables.yml
---
iname: cloud
ipass: '123456'

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

[root@control ansible]# vim ~/ansible/command_var.yml
---
- hosts: test
  tasks:
    - name: create user
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook command_var.yml -e iname="beth" -e ipass="123456"
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。