侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible笔记(7)之默认任务

zze
zze
2020-03-28 / 0 评论 / 0 点赞 / 902 阅读 / 3639 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

本来打算自己写一波 ansible 系列的,后来发现一老哥写的太好了,「点击此处直达」,我这里也就边看边对该系列文章做下笔记,方便以后查阅,ansible 入门的话墙裂建议阅读前方链接博文~~~

当我们运行一个 playbook 时,默认都会运行一个名为 [Gathering Facts] 的任务,ansible 通过 [Gathering Facts] 这个默认任务收集远程主机的相关信息(例如远程主机的IP地址,主机名,系统版本,硬件配置等信息)。

其实,playbook 是自动调用了 setup 模块从而执行了 [Gathering Facts] 任务,这些被收集到的远程主机信息会保存在对应的变量中,我们在 playbook 中可以使用这些变量,从而利用这些信息。

那么我们怎样在 playbook 获取到这些变量的值呢?在 setup 模块的示例中,我们可以通过 ansible_memory_mb 关键字获取远程主机的内存信息,其实,ansible_memory_mb 就是一个变量名,换句话说就是,我们可以在 playbook 中直接引用名为 ansible_memory_mb 的变量,从而获取到远程主机的内存信息,示例如下:

---
- hosts: B
  tasks:
  - name: debug demo
    debug:
      msg: "Remote host memory information: {{ansible_memory_mb}}"

该 playbook 执行结果如下:

$ ansible-playbook test.yml 

PLAY [B] ************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [B]

TASK [debug demo] ***************************************************************************************************************************
ok: [B] => {
    "msg": "Remote host memory information: {u'real': {u'total': 974, u'used': 493, u'free': 481}, u'swap': {u'cached': 0, u'total': 799, u'free': 799, u'used': 0}, u'nocache': {u'used': 172, u'free': 802}}"
}

PLAY RECAP **********************************************************************************************************************************
B                          : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

如上,我们自定义的信息中包含了远程主机的内存信息并同时被输出了。

如上述返回信息所示,ansible_memory_mb 中其实包含了 nocacherealswap 三个部分的信息,如果我们只想获得 real 部分的信息,在 playbook 中引用变量时可以使用如下两种语法。

# 语法一示例:
debug:
     msg: "Remote host memory information : {{ansible_memory_mb.real}}"
# 语法二示例:
debug:
     msg: "Remote host memory information : {{ansible_memory_mb['real']}}"

其实,这些远程主机的变量信息不仅仅能够用于输出,我们通常会获取到这些信息以后,对这些信息的值进行判断,判断是否符合我们的要求,然后再执行下一步动作,比如,先获取到远程主机的系统发行版信息,然后判断发行版是 CentOS 6 还是 CentOS 7,如果是 CentOS 6,我们就将准备好的 A 文件拷贝到远程主机中,如果是 CentOS 7,我们就将准备好的 B 文件拷贝到远程主机中。

其实我们还可以通过 gather_facts 关键字来控制 play 不去执行 [Gathering Facts] 这个默认任务,示例 playbook 如下:

---
- hosts: B
  gather_facts: no
  tasks:
    - ping:

执行结果如下:

$ ansible-playbook test.yml 

PLAY [B] ******************************************************************************************************************************

TASK [ping] ***************************************************************************************************************************
ok: [B]

PLAY RECAP ****************************************************************************************************************************
B                          : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

从输出信息中可以看到现在没有输出 [Gathering Facts] 任务的信息啦,即没有执行这个任务。

当然,如果不执行默认任务,就不能使用通过默认任务收集过来的信息了,这里我就不再演示啦~~

0

评论区