如何创建 Ansible 脚本

一、简介

如果您没有阅读之前的博客或仅作为提醒,该环境由一台控制器和两台 Target 机器组成。Controller 和 Target 机器在 VirtualBox VM 中运行。Ansible 脚本的开发是在主机上使用 IntelliJ 完成的。这些文件通过脚本从主机同步到控制器。在这个博客中,机器有以下 IP 地址:

  • 控制器:192.168.2.11
  • 目标 1:192.168.2.12
  • 目标 2:192.168.2.13
  • 本博客中使用的文件可在 GitHub 上相应的 git 存储库中找到。

    2.先决条件

    以下先决条件适用于此博客:

  • 你需要一个Ansible测试环境,看 之前的一篇博客如何搭建测试环境;
  • 您需要具备 Ansible Inventory 和 Ansible Vault 的基础知识, 如果您没有这方面的知识,请参阅之前的博客;
  • 如果您使用自己的环境,您应该知道 Ubuntu 22.04 LTS 用于 Controller 和 Target 机器以及 Ansible 版本 2.13.3;
  • 基本的 Linux 知识。
  • 3. 你的第一本剧本

    作为第一个 playbook,您将创建一个 playbook,它将 ping Target1 和 Target2 机器。该剧本可以在 git 存储库中找到
    playbook-ping-targets-success.yml,如下所示:

    – name: Ping target1

    hosts: target1

    tasks:
    – name: Ping test
    ansible.builtin.ping:

    – name: Ping target2
    hosts: target2

    tasks:
    – name: Ping test
    ansible.builtin.ping:

    让我们看看这个剧本是什么样子的。剧本由剧本组成。在这个剧本中,可以找到名称 Ping target1和 两个剧本Ping target2。hosts对于每个剧本,您可以通过引用清单文件中的名称的参数来指示它需要在何处运行 。

    剧本由任务组成。在这两个剧本中,只有一个任务是用 name 定义的 Ping test。

    任务调用 Ansible 模块。可以在此处找到可以使用的模块列表 。了解存在哪些模块、如何找到它们、如何使用它们等非常重要。Ping 模块的文档 是本示例所需要的,因此请花点时间看看它。

    最后要注意的是,使用了 FQCN(完全合格的集合名称)。这被认为是最佳实践。

    从 Controller 机器运行 playbook。如果您按原样使用 git 存储库中的文件,则需要输入保管库密码,即itisniceweather.

    $ ansible-playbook playbook-ping-targets-success.yml -i inventory/inventory.ini –ask-vault-pass
    Vault password:

    PLAY [Ping target1] ***********************************************************************************************

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

    TASK [Ping test] **************************************************************************************************
    ok: [target1]

    PLAY [Ping target2] ***********************************************************************************************

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

    TASK [Ping test] **************************************************************************************************
    ok: [target2]

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

    日志记录准确显示执行了哪些播放和哪些任务,以及它们是否执行成功。

    Ping 模块还提供了使命令崩溃的选项。在Target1播放中,data为了让命令崩溃,添加了参数。该剧本可以在 git 存储库中找到,格式为
    playbook-ping-targets-failure.yml.
    – name: Ping target1

    hosts: target1

    tasks:
    – name: Ping test
    ansible.builtin.ping:
    data: crash

    执行此 playbook 将使 Target1 play 崩溃并且该 playbook 刚刚结束。

    $ ansible-playbook playbook-ping-targets-failure.yml -i inventory/inventory.ini –ask-vault-pass
    Vault password:

    PLAY [Ping target1] ***********************************************************************************************

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

    TASK [Ping test] **************************************************************************************************
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: Exception: boom
    fatal: [target1]: FAILED! => {“changed”: false, “module_stderr”: “Shared connection to 192.168.2.12 closed.rn”, “module_stdout”: “Traceback (most recent call last):rn File “/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py””

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年10月24日
    下一篇 2022年10月24日

    相关推荐