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文件启动服务。

2、实现功能

bash 复制代码
  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"

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 文件,其中输入信息根据实际场景来:

bash 复制代码
[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

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

bash 复制代码
ansible-playbook -i hosts playbooks/agent_upgrade_test.yml

可以发现执行成功。还有可以执行很多功能,等待我们后续探索。

相关推荐
什么半岛铁盒几秒前
Linux跨网络通信中IP与MAC的作用
linux·tcp/ip·macos
什么半岛铁盒16 分钟前
Linux网络基础全面解析:从协议分层到局域网通信原理
linux·服务器·网络·c++
iHero18 分钟前
【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问
linux·docker·jitsi meet
独行soc33 分钟前
2025年渗透测试面试题总结-哔哩哔哩电面(题目+回答)
linux·安全·阿里云·面试·职场和发展·渗透测试
筑梦之路44 分钟前
centos 9 Kickstart + Ansible自动化部署 —— 筑梦之路
centos·自动化·ansible
遇见火星1 小时前
Ansible模块——通过 URL 下载文件
ansible
遇见火星1 小时前
Ansible模块——管理100台Linux的最佳实践
linux·运维·ansible
Ashmcracker1 小时前
在Ubuntu使用 Ansible 配置 Azure 资源的动态清单
ubuntu·microsoft·云计算·ansible·azure·devops
DayDayUpWhyan1 小时前
ubuntu chrome无法使用搜狗拼音输入法,无法输入中文
linux·chrome·ubuntu
QuartusII71 小时前
为什么wifi有信号却连接不上?
运维·智能路由器·电脑