AnsiblePlaybook超详细讲解,值得收藏
Playbook是一个由一个或多个play组成的文件;play是针对特定主机或主机组执行的一组有序的任务;每个playbook必须包含两部分:
hosts:运行playbook的一组主机
tasks:需要在主机上运行的任务
除了这两个必须选项,还有一些可选项选项,也可能需要包含在play中,如:
name:play的名称,在运行该play时,会在运行过程中显示。
become:与配置文件中的become作用一样,用于提权,当配置文件中禁用提权时,你想要某个play使用提权的话,你可以在play中添加become。
playbook以yaml格式编写的,通常以yml扩展名保存。yaml格式使用空格缩进,对于空格的数量没有特别要求,但需要注意:同一级别内的元素必须使用相同的缩进;对于子项目,缩进必须比父项目多
编写playbookitworkstation:ansiblevimtest。ymlitworkstation:ansiblecattest。ymlname:InstallApachehosts:serveratasks:name:Installapachehttpdapt:name:apache2state:presentname:Copyusinginlinecontentcopy:content:Welcometodest:varwwwhtmlindex。htmlname:Startapacheserviceservice:name:apache2state:startedenabled:yes
Playbook以开头,用于标记文件开始;
第二行的name为该play的名称;
第三行的hosts表示将要运行该play的主机;
第四行的tasks表示该play将要执行的具体任务;
通过缩进,我们可以看出tasks一共分为三个部分,也就是三个模块,每个模块由一个name来表示该模块的name,虽然name是可选选项,但建议写上,用来作为对该模块执行任务的解释说明,并且name的内容会在playbook执行此模块时,显示在执行过程中;
name下面的是模块的名称,在该play的tasks中一共有三个模块:
apt:用于安装软件
copy:用于复制文件或内容
service:用于操作service,如启动服务,重启服务等
我们可以通过ansibledoc来获取更多关于模块的信息:
我们可以通过ansibledocl来列出所有模块tworkstation:ansibleansibledocla10serverManageA10NetworksAXSoftAXThu。。。a10serveraxapi3ManageA10NetworksAXSoftAXThu。。。a10servicegroupManageA10NetworksAXSoftAXThu。。。a10virtualserverManageA10NetworksAXSoftAXThu。。。aciaaauserManageAAAusers(aaa:User)。。。。。。。。。。。。。。。。。。。。。。。。
列出的内容太多,我们可以通过grep进行筛选:如,我想查找关于apt相关的模块itworkstation:ansibledoclgrepaptaptManagesaptpackagesaptkeyAddorremoveanaptkeyaptrepoManageAPTrepositoriesviaaptr。。。aptrepositoryAddandremoveAPTrepositoriesaptrpmaptrpmpackagemanagerfortiosswitchcontrollersecuritypolicycaptiveportalNamesofVLANsthatusecaptivep。。。naontapqosadaptivepolicygroupNetAppONTAPAdaptiveQualityof。。。naontapucadapterNetAppONTAPUCadapterconfigura。。。niosnaptrrecordConfigureInfobloxNIOSNAPTRrec。。。skypecaptureModulewhichmanagesflowcapture。。。vmwareguestnetworkManagenetworkadaptersofspecif。。。
通过ansibledocModuleName获取模块相关的帮助说明itworkstation:ansibledocaptAPT(usrlibpython3distpackagesansiblemodulespackagingosapt。py)Managesaptpackages(suchasforDebianUbuntu)。ThismoduleismaintainedbyTheAnsibleCoreTeamOPTIONS(ismandatory):allowunauthenticatedIgnoreifpackagescannotbeauthenticated。Thisisusefulforbootstrappingenvironmentsthatmanagetheirownaptkeysetup。allowunauthenticatedisonlysupportedwithstate:installpresent〔Default:no〕type:boolversionadded:2。1。。。。。。。。。。。。。。。。。。。。。。。。
执行playbookitworkstation:ansibleansibleplaybooktest。ymlBECOMEpassword:PLAY〔InstallApache〕TASK〔GatheringFacts〕ok:〔servera〕TASK〔Installapachehttpd〕changed:〔servera〕TASK〔Copyusinginlinecontent〕changed:〔servera〕TASK〔Startapacheservice〕ok:〔servera〕PLAYRECAPservera:ok4changed2unreachable0failed0skipped0rescued0ignored0
由于我们配置了become,所以在运行的时候会提示输入become密码;
在这里,我们可以看到前面说的,在执行过程中会显示play的名称,告诉你现在执行的是那个play;
每个play中会有一个默认的任务,就是获取facts信息,在facts信息中会保存你计算机的系统信息;
然后是三个在play中定义的task,在执行tasks时,会显示当前所执行的task的名称,以及执行的状态,如果是ok,则表示系统状态没有任何更改,如果是changed,则表示系统状态发生了改变;
在最后,还有一个关于该playbook执行结果的汇总,有多少个changed,有多少个failed,有多个skipped等等
后面会分享更多ansible、k8s、docker等方面内容,感兴趣的朋友可以关注下!
特别声明:本文为【怕水的鱼】投稿,仅代表作者观点。马哥教育仅提供信息发布平台。
点击了解更多,阅读《一文详解Ansible变量》