• Ansible playbook简介与初步实战,实现批量机器应用下载与安装


    一.Ansible playbook简介

    • playbook是ansible用于配置,部署,和管理被节点的剧本
    • 通过playbook的详细描述,执行其中的一些列tasks,可以让远端的主机达到预期的状态。playbook就像ansible控制器给被控节点列出的一系列to-do-list,而且被控节点必须要完成
    • playbook顾名思义,即剧本,现实生活中演员按照剧本表演,在ansible中,这次由被控计算机表演,进行安装,部署应用,提供对外的服务等,以及组织计算机处理各种各样的事情。

    二.Ansible playbook使用场景

    • 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作的时候,执行的ad-hoc命令是不合适的,这时候最好使用playbook。
    • 就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式
    • 使用playbook可以方便的重复使用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写playbook,之后管理服务器会变得很简单。

    三.Ansible playbook格式

    格式简介:

    • playbook由YAML语言编写。
    • YAML( /ˈjæməl/ )参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822,Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与OrenBen-Kiki也是这语言的共同设计者。
    • YAML格式是类似JSON的文件格式。YAML用于文件的配置编写,JSON多用于开发设计。

    YAML的格式如下:

    1.文件的第一行应该以“—”(三个连字符)开始,表明YAML文件的开始。
    2.在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
    3.YAML中的列表元素以“-”开头并且跟着一个空格。后面为元素内容。
    4.同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。
    5.play中hosts、variables、roles、tasks等对象的表示方法都是以键值中间以“:”分隔表示,并且“:”之后要加一个空格。

    四.Ansible playbook实战

    1、任务目标

    1、获取升级包
    从XX网址中下载XXX安装包,并拷贝到对应的机器上并解压。
    
    2、升级
    进入安装包解压后所在目录,双击install.bat文件执行安装
    
    3、启动服务
    进入安装包解压后所在目录,双击start.bat文件启动服务。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、实现功能

      1 ---
      2 - name: "agent upgrade"
      3   hosts: all
      4   gather_facts: no
      5   vars:
      6     host_agent_url: "https://XXXXXXXX/host-agent.zip"
      7     host_agent_destination: "C:\\host_agent_windows"
      8   tasks:
      9     - name: create destination directory
     10       win_file:
     11         path: "{{ host_agent_destination }}"
     12         state: directory
     13
     14     - name: download host agent zip file
     15       win_get_url:
     16         url: "{{ host_agent_url }}"
     17         dest: "{{ host_agent_destination }}\\host-agent.zip"
     18         force: yes
     19
     20     - name: extract host agent zip file
     21       win_unzip:
     22         src: "{{ host_agent_destination }}\\host-agent.zip"
     23         dest: "{{ host_agent_destination }}"
     24         creates: "{{ host_agent_destination }}\\host-agent"
     25
     26     - name: install host agent
     27       win_command: "{{ host_agent_destination }}\\host-agent\\install.bat"
     28       args:
     29         chdir: "{{ host_agent_destination }}\\host-agent"
     30
     31     - name: start host agent service
     32       win_command: "{{ host_agent_destination }}\\host-agent\\start.bat"
     33       args:
     34         chdir: "{{ host_agent_destination }}\\host-agent"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    3、脚本说明

    具体含义如下:

    • 第 2 行:设置 playbook 的名称。
    • 第 3 行:指定要升级 host agent 的主机。
    • 第 4 行:关闭收集主机信息的功能。
    • 第 5-7 行:定义变量,用于存储 host agent 的下载链接和目录。
    • 第 9-12 行:创建 host agent 目标目录。
    • 第 15 行中的 url 参数指定了 host agent 压缩包的下载链接。
    • 第 16 行中的 dest 参数指定了下载的文件应该保存在哪个目录下,这里是 C:\host_agent_windows\host-agent.zip
    • 第 17 行中的 force 参数指定了如果目标文件已经存在,是否要强制覆盖它。这里是 yes,表示无论文件是否存在都要覆盖。
    • 第 21 行中的 src 参数指定了要解压的文件路径,这里是 C:\host_agent_windows\host-agent.zip
    • 第 22 行中的 dest 参数指定了解压后的文件应该保存在哪个目录下,这里是 C:\host_agent_windows
    • 第 24 行中的 creates 参数指定了一个文件或目录的路径,如果这个文件或目录已经存在,那么这个任务就不会再次执行。这里是 C:\host_agent_windows\host-agent,表示如果这个目录已经存在,则不再执行解压任务。
    • 第 27 行中的 win_command 模块指定了要执行的命令,这里是 C:\host_agent_windows\host-agent\install.bat,表示要执行 host agent 的安装脚本。
    • 第 28-29 行中的 args 参数指定了要传递给命令的参数,这里是 chdir: "{{ host_agent_destination }}\host-agent",表示在执行命令之前要切换到 C:\host_agent_windows\host-agent 目录下。这个参数是必需的,因为 host agent 的安装脚本需要在这个目录下执行,否则会出现错误。
      请注意,这个脚本假设目标主机已经具有适当的网络配置,以便可以从 Ansible 主机访问它们,并且在目标主机上已安装了必要的软件和驱动程序。此外,如果您需要其他配置或自定义设置,请相应地更改脚本。

    注意:第 3 行应该是 hosts 可别写成 host

    4、脚本执行

    我们对一台测试机器进行执行测试,首先我们创建 hosts 文件,其中输入信息根据实际场景来:

    [win_base_image]
    111.111.111.111
    
    [win_base_image:vars]
    ansible_user=Administrator
    ansible_password=Administrator
    ansible_connection=winrm
    ansible_winrm_transport=basic
    ansible_port=5555
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    然后我们通过ansible-playbook执行脚本:

    ansible-playbook -i hosts playbooks/agent_upgrade_test.yml
    
    • 1

    在这里插入图片描述
    可以发现执行成功。还有可以执行很多功能,等待我们后续探索。

  • 相关阅读:
    云原生容器技术入门:Docker、K8s技术的基本原理和用途
    js-mark新时代的网页标记容器
    【数字IC验证快速入门】2、通过一个SoC项目实例,了解SoC的架构,初探数字系统设计流程
    计算机图像处理:图像轮廓
    无胁科技-TVD每日漏洞情报-2022-8-6
    【C++】引用’&‘的深入解析
    SIEMENS S7-1200 汽车转弯灯程序 编程与分析
    编程学:同一个数据,要只有一处保存
    【DataEase】“宇宙最强” 零代码数据可视化分析工具的安装部署保姆级教程
    vue3加axios配合element-plus实现图片等文件本地上传,并获取服务器返回的真实地址数据,前端写法
  • 原文地址:https://blog.csdn.net/JJBOOM425/article/details/132719056