我们已经写了两篇关于Ansible的文章,这是第三篇。如果您是Ansible的新手,我建议您阅读以下两篇文章,它们将教您Ansible的一些基础知识以及它是什么。第1部分:AnsibleAutomationTool安装、配置和快速入门指南第2部分:Ansible点对点命令快速入门指南示例如果您已经阅读过,那么阅读本文不会感到尴尬。什么是Ansible剧本?Playbook剧本比点对点命令模式更强大,而且完全不同。它使用/usr/bin/ansible-playbook二进制文件并提供一组丰富的功能来简化复杂的任务。如果您想频繁运行任务,剧本非常有用。此外,如果您想在服务器组上执行多项任务,它也非常有用。剧本是用YAML语言编写的。YAML代表标记语言,它比其他常见数据格式(如XML或JSON)更易于读写。下面的Ansibleplaybook流程图将向您展示其详细结构。了解AnsiblePlaybooks的术语控制节点:安装Ansible并负责管理客户端节点的机器。被管节点:控制节点管理的主机列表。脚本剧本:剧本文件包含一组自动化任务。主机列表清单:此文件包含有关托管服务器的信息。Task任务:每个脚本都有大量的任务。任务在指定机器(一台主机或多台主机)上按顺序执行。模块模块:模块是从客户端节点收集信息的代码单元。角色:角色是一种根据已知文件结构自动加载一些可变文件、任务和处理程序的方法。动作播放:每个脚本包含大量的动作,一个动作从头到尾执行特定的自动化。Handler:它可以帮助你减少playbook中的重启任务。Handler任务列表其实和常规任务没什么区别,变化由通知者通知。如果处理程序没有收到任何通知,它将无效。基本脚本是什么样的?这是剧本的模板:---[YAML文件应以三个破折号开头]-名称:[脚本描述]hosts:group[添加主机或主机组]become:true[如果你想以root身份运行任务,然后标记]tasks:[任务下要执行什么操作]-name:[输入模块选项]module:[输入要执行的模块]module_options-1:value[输入模块选项]module_options-2:价值。module_options-N:value如何理解Ansible的输出Ansibleplaybook的输出有四种颜色,具体含义如下:绿色:ok表示成功,关联的任务数据已经存在,并且已经按要求配置。黄色:changed指定的数据已经根据任务的需要进行了更新或修改。红色:FAILED如果在执行任务时出现任何问题,它会返回一个失败信息,它可能是任何东西,你需要相应地修复它。白色:表示有多个参数。为此,创建一个playbook目录以将它们全部放在同一个位置。$sudomkdir/etc/ansible/playbooksPlaybook-1:在RHEL系统上安装ApacheWeb服务器这个示例playbook允许您在指定的目标机器上安装ApacheWeb服务器:$sudonano/etc/ansible/playbooks/apache.yml----hosts:webbecome:yesname:"InstallandConfigureApacheWebserver"tasks:-name:"InstallApacheWebServer"yum:name:httpdstate:latest-name:"确保ApacheWeb服务器是running"service:name:httpdstate:started$ansible-playbookapache1.yml如何理解Ansible中playbooks的执行使用如下命令查看语法错误。如果没有发现错误,它只会显示剧本文件名。如果它检测到任何错误,您将收到如下所示的错误,但内容可能因您的输入文件而异。$ansible-playbookapache1.yml--syntax-checkERROR!加载YAML时出现语法错误。发现违反缩进的制表符错误似乎在“/etc/ansible/playbooks/apache1.yml”中:第10行,第1列,但可能在文件的其他位置,具体取决于确切的语法问题。有问题的行似乎是:state:latest^here该行的开头似乎有一个制表符。YAML不使用制表符进行格式化。制表符应替换为空格。例如:-名称:更新工具变量:版本:1.2.3#^---那里有一个选项卡。应该写成:-name:updatetoolingvars:version:1.2.3#^---这里全是空格。或者,您可以使用此URLYAMLLint在线检查Ansible剧本内容。执行以下命令进行“演练”。当您使用--check选项运行剧本时,它不会对远程机器进行任何修改。相反,它会在不实际实施的情况下告诉您将进行哪些更改。$ansible-playbookapache.yml--checkPLAY[安装和配置ApacheWeb服务器]************************************************************************任务[收集事实]**************************************************************************************************确定:[node2.2g.lab]确定:[node1.2g.lab]TASK[安装ApacheWeb服务器]************************************************************************************已更改:[node2.2g.lab]已更改:[node1.2g.lab]任务[确保ApacheWeb服务器正在运行]***************************************************************************更改:[node1.2g.lab]更改:[node2.2g.lab]播放回顾***********************************************************************************************************node1.2g.lab:ok=3changed=2unreachable=0failed=0skipped=0rescued=0ignored=0node2.2g.lab:ok=3changed=2unreachable=0failed=0跳过=0获救=0忽略d=0如果你想知道ansibleplaybook实现的细节,使用-vv选项,它会显示如何收集这些信息$ansible-playbookapache.yml--check-vvansible-playbook2.9.2configfile=/etc/ansible/ansible.cfg配置模块搜索路径=['/home/daygeek/.ansible/plugins/modules','/usr/share/ansible/plugins/modules']ansiblepython模块位置=/usr/lib/python3.8/site-packages/ansible可执行文件位置=/usr/bin/ansible-playbookpython版本=3.8.1(默认,2020年1月8日,23:09:20)[GCC9.2.0]使用/etc/ansible/ansible.cfg作为配置文件剧本:apache.yml************************************************************************************************************1在apache.ymlPLAY中播放[安装和配置ApacheWeb服务器]********************************************************************************任务[收集事实]*********************************************************************************************************任务路径:/etc/ansible/playbooks/apache.yml:2ok:[node2.2g.lab]ok:[node1.2g.lab]META:运行handlersTASK[安装Apac他Web服务器]********************************************************************************************任务路径:/etc/ansible/playbooks/apache.yml:6changed:[node2.2g.lab]=>{"changed":true,"msg":"Checkmode:Nochangesmade,butwouldhaveifnotincheckmode","rc":0,"results":["Installed:httpd"]}changed:[node1.2g.lab]=>{"changed":true,"changes":{"installed":["httpd"],"updated":[]},"msg":"","obsoletes":{"urw-fonts":{"dist":"noarch","repo":"@anaconda","version":"2.4-16.el7"}},"rc":0,"results":[]}TASK[确保ApacheWeb服务器正在运行]***********************************************************************************任务路径:/etc/ansible/playbooks/apache.yml:10changed:[node1.2g.lab]=>{"changed":true,"msg":"在主机上找不到服务httpd,假设它将在完全运行时存在"}changed:[node2.2g.lab]=>{"changed":true,“msg”:“在主机上找不到服务httpd,假设它将在完全运行时存在”}META:运行处理程序META:运行处理程序PLAYRECAP****************************************************************************************************************************node1.2g。实验室:ok=3changed=2unreachable=0failed=0skipped=0rescued=0ignored=0node2.2g.lab:ok=3changed=2unreachable=0failed=0skipped=0rescued=0ignored=0脚本-2:OnUbuntusystemInstallingtheApachewebserveronthisexampleplaybook允许您在指定的目标节点上安装ApacheWeb服务器$sudonano/etc/ansible/playbooks/apache-ubuntu.yml----hosts:webbecome:yesname:"InstallandConfigureApacheWebServer"tasks:-name:"InstallApacheWebServer"yum:name:apache2状态:最新-名称:“启动ApacheWeb服务器”服务:名称:apaceh2状态:已启动-名称:“启用mod_rewrite模块”apache2_module:名称:重写状态:存在通知:-启动apache处理程序:-名称:“确保ApacheWeb服务器正在运行”服务:名称:apache2状态:重新启动已启用:是Playbook-3:要在RedHat系统上安装的软件包列表此示例playbook允许您在指定的目标节点上安装软件包。方法-1:$sudonano/etc/ansible/playbooks/packages-redhat.yml----hosts:webbecome:yesname:"InstallaListofPackagesonRedHatBasedSystem"tasks:-name:"Installing包列表”yum:name:-curl-httpd-nano-htop方法-2:$sudonano/etc/ansible/playbooks/packages-redhat-1.yml----hosts:webbecome:yesname:“在基于RedHat的系统上安装软件包列表”任务:-name:“安装软件包列表”yum:name={{item}}state=latestwith_items:-curl-httpd-nano-htop方法-3:使用数字组变量$sudonano/etc/ansible/playbooks/packages-redhat-2.yml----hosts:webbecome:yesname:"InstallaListofPackagesonRedHatBasedSystem"vars:packages:['curl','git','htop']tasks:-name:安装包列表yum:name={{item}}state=latestwith_items:"{{packages}}"Playbook-4:在Linux系统上安装更新此示例playbook允许您在基于RedHat或Debian的Linux系统上安装更新$sudonano/etc/ansible/playbooks/security-update.yml----hosts:webbecome:yesname:"InstallSecurityUpdate"tasks:-name:"InstallingSecurityUpdateonRedHatBasedSystem"yum:name=*update_cache=yessecurity=yesstate=latestwhen:ansible_facts['分布']=="CentOS"-名称:"在基于Ubuntu的系统上安装安全更新"apt:upgrade=distupdate_cache=yeswhen:ansible_facts['distribution']=="Ubuntu"
