




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux自动化运维项目11:角色和集合
学习目标【知识目标】了解大项目管理方式。了解任务并行和滚动更新的使用场景。了解角色基本概念和目录结构。了解AnsibleGalaxy基本概念和作用。了解集合基本概念和目录结构。【技能目标】掌握Ansible角色管理方式,可以创建和编写角色内容。掌握Ansible集合管理方式,可以部署和使用集合内容。掌握使用ansible-galaxy命令管理角色和集合的方法。【素质目标】培养读者系统分析与解决问题的能力,使其能够深入分析问题,掌握相关知识点,并在实践中高效地完成项目任务。培养读者的安全意识,使其重视Ansible自动化代码的安全性,避免代码出现漏洞,保护系统安全。角色和集合任务1:大项目管理方式目录/Contents01020304动态清单文件forks并行配置滚动更新控制任务执行位置05导入和包含任务01动态清单文件动态清单文件在Ansible中,用户可以手动编辑静态清单文件,并轻松地添加、删除或修改主机信息。静态清单文件非常适合用于主机列表相对稳定,或者不经常更改的小型环境或测试环境。但对于大型基础设施或快速变更的环境来说,保持静态清单文件的最新状态可能会很困难。为了解决这个问题,Ansible提供了对动态清单脚本的支持。动态清单脚本可以从外部数据源中获取主机列表,在Ansible运行时动态生成清单文件,这些脚本可以是可执行程序,也可以是Ansible插件,能够以JSON格式输出清单文件信息。在大型IT环境中,许多系统都使用动态清单脚本来跟踪可用主机和它们的组织方式,比如云提供商、LDAP(LightweightDirectoryAccessProtocol,轻量目录访问协议)、Cobbler或企业CMDB系统。动态清单脚本可以从这些数据源中获取主机列表,并在Ansible执行时将其提供给Ansible模块进行管理。相比于静态清单文件,动态清单脚本具有更高的灵活性和自动化能力,可以更好地适应不同的环境和任务需求。动态清单文件如果通过AWX或RedHatAnsibleAutomationPlatform(红帽Ansible自动化平台)等图形用户界面工具管理和监视动态清单脚本,这些平台的清单脚本数据库会与所有动态清单脚本源同步,并提供Web和REST接口来查看和编辑清单脚本。通过与所有主机的数据库记录相关联,用户可以查看过去的事件历史记录,并查找哪些主机在最近的Playbook运行中出现了故障。动态清单脚本是一种基于外部数据源的清单文件管理方式。Ansible支持两种与外部数据源连接的方式:清单插件和清单脚本。在Ansible2.10及之前的版本中,常见的方式是编写自定义动态清单脚本,用户可以使用任何编程语言编写自定义程序,但传递选项时必须以JSON格式返回清单脚本信息。清单插件是管理动态清单脚本的推荐方式,它可以利用Ansible核心代码的最新更新内容。通过编写自定义的清单插件,用户可以连接到其他动态清单脚本源,并且可以更灵活地管理和更新清单文件。动态清单文件动态清单脚本的使用方式与静态清单文件的类似,清单脚本的位置可以直接在当前的ansible.cfg文件中指定,或者通过-i选项指定。如果清单文件可以执行,则视为动态清单脚本,Ansible会尝试运行它来生成清单文件。如果清单文件不可执行,则视为静态清单文件。动态清单脚本如下所示。#inventory_script.py#!/usr/bin/envpythonimportjsonhost_data={'webserver':{'hosts':['web1','web2'],'vars':{'http_port':80,'proxy_server':''}},'databases':{'hosts':['db1'],'vars':{'ansible_user':'dbadmin','ansible_password':'dbpass'}}}print(json.dumps(host_data))setcolour_count=colour_count+1%}{%endfor%}Currently{{colour_count}}peoplecall{{}}theirfavourite.Andthefollowingareexamplesofthingsthatare{{}}:{%foritemincolour.things%}-{{item}}执行命令python3inventory_script--list|python3-mjson.tool运行动态清单脚本,查看动态清单脚本中的主机信息。02forks并行forks并行当Ansible处理Playbook时,会按顺序运行每个play,确定play的主机列表之后,Ansible将按顺序运行每个任务。通常情况下,所有主机在play中启动下一个任务之前成功完成当前任务。默认情况下,Ansible可以同时在所有目标主机上执行任务,但是如果目标主机数量较多,那么执行任务的主机数量也会很多,这可能会导致系统负载过高,影响系统稳定性。因此,可以使用forks关键字控制同时执行任务的主机数量,以提高任务执行效率。在小型主机列表中,可以同时连接到play中的所有主机以执行每项任务。但如果该play以数百个主机为目标,则可能会给控制节点带来沉重的负担。因此,根据实际情况,可以选择合适的策略来平衡负载和效率,以确保Ansible自动化运维任务的顺利执行。forks并行Ansible所允许的最大同时连接数由Ansible配置文件中的forks参数控制。默认情况下,该参数设置为5,可在/etc/ansible/ansible.cfg文件中查看默认值。ansible或ansible-playbook命令都支持-f或--forks选项,如果要修改forks的数量,可以在Playbook中使用forks关键字,或者在命令行中使用-f参数来指定。如果Ansible控制节点配置了默认值为5的forks参数,这表示Ansible可以同时处理的最大连接数为5。当一个play包含10个受管主机时,Ansible将在前5个受管主机上执行play中的第1个任务,然后在剩下的5个主机上再次执行第1个任务。完成对所有主机的第一个任务后,Ansible将每次在5个主机的组中逐一执行下一个任务,直到play执行完毕。grepforks/etc/ansible/ansible.cfgforks=5ansible-playbook-f30my_playbook.yml03配置滚动更新配置滚动更新在示例中,web_servers主机组包含100个服务器,通过将serial设置为10,每次将按照每组10个主机的数量进行操作,通过控制任务的并发性,使大规模集群的配置更新和服务重启过程更加可控和稳定。-name:DeployandRestartServicehosts:web_serversserial:10#设置每组处理的主机数量为10tasks:-name:Copyconfigurationfileansible.builtin.copy:src:/path/to/config/filedest:/etc/service/config.conf-name:Restartserviceansible.builtin.service:name:service_namestate:restarted在生产环境中,当需要更新配置并重启服务时,使用serial关键字可以控制并发性,一组一组进行更新和重启,而不是同时对所有主机进行操作,避免整个集群同时停机导致服务中断,可提高系统的可用性和稳定性,减少对用户的影响。在Playbook中使用serial关键字示例如下。配置滚动更新在示例中,第一个Plabook中的webservers组有20个主机,那么第一批包含6个主机,第二批包含6个主机,第三批包含6个主机,最后一批包含2个主机。----name:testplayhosts:webserversserial:"30%"----name:testplayhosts:webserversserial:-1-5-10serial关键字还可以指定为百分比,或者以列表的形式指定批处理流程,具体示例如图。第一批包含1个主机,第二批包含5个主机,第三批包含10个主机。如果剩余的主机数量少于10个,则下一批将包含所有剩余的主机。04控制任务执行位置控制任务执行位置默认情况下,Ansible会在Playbook中指定的所有主机上执行任务,但有些情况下,需要将任务委派给不同的机器或组,或者只在本地运行Playbook。通过任务委派,可以更加灵活地控制Playbook的执行过程。常见的任务委派可以使用delegate_to、delegate_facts、run_once、local_action等关键字来实现如表所示。在Ansible中,可以使用delegate_to和delegate_facts关键字将任务委派给指定的机器或组,或将事实委派给特定的机器或组。序号委派关键字描述1delegate_to将任务委派给指定的主机或组执行2delegate_facts将事实委派到指定的主机或组收集3local_action将任务委派给Ansible控制节点上的本地主机执行4run_once将任务委派给所有主机中的一个主机执行控制任务执行位置通过delegate_to关键字,可以将任务从当前主机转移到其他主机,以便在指定的主机上执行任务。delegate_to关键字具体示例如下。在上面的示例中,delegate_to关键字将Stopwebserver任务委派给名为web_server3的主机执行,该任务将在web_server3上执行,而不是在play中的web_servers主机列表中的主机上执行。----name:Exampleplaybookhosts:web_serverstasks:-name:Stopwebserverservice:name:httpdstate:stoppeddelegate_to:web_server3控制任务执行位置通过delegate_facts关键字,可以将事实从当前主机转移到其他主机,以便在指定的主机上使用这些事实。delegate_facts关键字具体示例如下。在上面的示例中,delegate_facts参数被设置为true,因此收集到的事实将分配给被委派的主机web_server3,而不是当前执行任务的主机。----name:Exampleplaybookhosts:web_serverstasks:-name:Gatherfactssetup:delegate_facts:truedelegate_to:web_server3控制任务执行位置local_action关键字用于在控制节点上执行本地任务,而不是在远程主机上执行。local_action关键字具体示例如下。在上面的示例中,local_action关键字将Runlocalscript任务委派给Ansible控制节点上的本地主机执行,而不是在远程主机上执行。----name:Exampleplaybookhosts:web_serverstasks:-name:Runlocalscriptlocal_action:command/path/to/local/script.sh控制任务执行位置run_once关键字用于确保一个任务只在清单文件的主机中的一个主机上运行。run_once关键字具体示例如下。在上面的示例中,Createdirectory任务使用file模块创建一个名为/path/to/directory的目录。由于run_once关键字被设置为true,因此该任务只会在第一个主机上执行,而不是在所有主机上都执行。----name:Exampleplaybookhosts:web_serverstasks:-name:Createdirectoryfile:path:/path/to/directorystate:directoryrun_once:true05导入和包含任务导入和包含任务在编写大型Playbook时,如果将所有任务都写在一个Playbook文件中,这些任务可能会变得难以维护和理解。为了使Playbook更加模块化和易于维护,可以将其分成较小的文件,可采用模块化方式将多个Playbook组合为一个主Playbook,或者将文件中的任务列表插入play,这样可以更轻松地在不同项目中重用play或任务序列。常见的导入和包含关键字如表所示。序号关键字描述1import_playbook静态导入另一个Playbook文件,可以在当前Playbook中使用导入的Playbook中定义的变量。与动态包含相比,静态导入不支持循环2import_tasks静态导入一个或多个任务文件,可以在当前Playbook中使用导入的任务文件中定义的变量。与动态包含相比,静态导入不支持循环3import_role静态导入一个或多个角色,可以在当前Playbook中使用导入的角色中定义的变量。与动态包含相比,静态导入不支持循环4include_tasks动态包含一个或多个任务文件。可以与循环一起使用,对于循环中的每个项目,包含的任务文件将被执行一次。支持变量传递。与静态包含相比,动态包含无法在--list-tags中列出标签5include_role动态包含一个或多个角色。可以与循环一起使用,对于循环中的每个项目,包含的角色将被执行一次。支持变量传递。与静态包含相比,动态包含无法在--list-tags中列出标签导入Playbookimport_playbook指令可以将包含play列表的外部文件导入主Playbook中,它允许在主Playbook中导入一个或多个额外的Playbook。通过使用import_playbook指令,可以将复杂的Playbook分解为多个模块化的部分,以提高其可维护性和可重用性。在Ansible项目中有两个Playbook文件,分别是webserver.yml和database.yml,webserver.yml包含Web服务器的自动化任务,database.yml包含数据库服务器的自动化配置。在主Playbook中导入两个额外Playbook的示例如下:由于导入的内容是一个完整的Playbook,因此import_playbook功能只能在Playbook的顶层使用,不能在play内使用。如果导入多个Playbook,它们将按照导入的顺序依次执行。-name:Preparethewebserverimport_playbook:webserver.yml-name:Preparethedatabaseserverimport_playbook:database.yml导入和包含任务将任务分解到不同的任务文件中是组织复杂任务集或重用任务的好方法,任务文件只包含一个任务列表。以下示例为common_tasks.yml的任务文件,其中包含一些基本任务:可以使用import_tasks关键字导入common_tasks.yml文件中的任务,或者使用include_tasks关键字包含common_tasks.yml文件中的任务:#common_tasks.yml-name:placeholderfoocommand:/bin/foo-name:placeholderbarcommand:/bin/bartasks:-import_tasks:common_tasks.yml#或-include_tasks:common_tasks.yml导入和包含任务导入和包含任务是一种将复杂项目分解为更小的可重用部分的方式。但是在生产环境中,随着项目规模的增长、文件数量和复杂性的增加,自动化项目的执行逻辑和流程变得更加复杂,因此不推荐使用这种方式管理大项目。也可以将变量传递给imports_tasks关键字导入的任务文件:tasks:-import_tasks:wordpress.ymlvars:wp_user:timmy-import_tasks:wordpress.ymlvars:wp_user:alice-import_tasks:wordpress.ymlvars:wp_user:bob谢谢角色和集合任务2:角色简介目录/Contents01020304角色基本概念和目录结构角色目录结构角色查找路径在Playbook中使用角色01角色基本概念和目录结构角色基本概念Ansible角色是一种组织和管理Ansible代码的机制,它可以根据已知的文件结构自动加载相关的变量、文件、任务、处理程序以及其他Ansible资源。简单地理解,角色就是按照标准化的目录结构,将相关的任务、变量、处理程序、模板和其他文件等组织在一起的集合。使用角色可以简化AnsiblePlaybook的开发和维护,将任务、变量和模板等文件组织到一个逻辑单元中,以便更好地管理和维护Playbook,提高代码的可重用性和可维护性,同时促进代码重用和模块化管理。角色可以被多个Playbook重复使用,并根据需要进行定制和扩展,以实现更复杂的配置和部署方案。角色通常用于部署和配置应用程序或服务等,比如Web服务器、数据库、负载均衡器、监控和日志服务器等。角色可以在不同的环境中使用,以确保应用程序或服务等在不同环境中的一致性和可靠性。02角色目录结构角色目录结构角色这种标准化的目录和文件设计可以帮助开发者更好地组织和管理Ansible代码,提高自动化代码的可读性、可维护性和可重用性。角色目录结构,主要包括tasks、handlers、defaults、vars、files、templates、meta等目录,它们包含角色的不同组成部分,比如任务、处理程序、默认变量、变量、文件、模板、元数据等。roles/examplerole/tasks/main.ymlhandlers/main.ymltemplates/ntp.conf.j2files/bar.txtfoo.shvars/main.ymldefaults/main.ymlmeta/main.ymllibrary/module_utils/lookup_plugins/默认情况下,Ansible会在角色的每个目录中查找main.yml文件的相关内容。角色目录结构Ansible角色目录结构和任务文件如下所示。序号角色主要目录和文件描述1tasks/main.ymltasks目录包含在角色中执行的主要任务列表,这些任务是角色的核心功能,将在部署过程中执行。在main.yml文件中,可以定义任务及其执行顺序,以及条件和循环语句等。比如main.yml包含角色要执行的主要操作,包括安装软件包、配置文件和服务等任务2handlers/main.ymlhandlers目录包含角色使用的处理程序列表。处理程序在任务执行过程中会触发某些动作,用于在任务结束后执行特定的操作,如重启服务或重新加载配置文件等3library/my_module.pylibrary目录包含角色使用的模块列表,这些模块可以在角色的任务中使用。这些模块通常是Python脚本,可以为角色提供自定义功能4defaults/main.ymldefaults目录包含角色变量的默认值列表,这些变量的优先级较低,可以被其他角色或Playbook的变量覆盖5vars/main.ymlvars目录包含角色使用的其他变量列表,这些变量可以在角色的任务中使用,通常是为了提高角色的灵活性和可配置性而定义的6files/main.ymlfiles目录包含角色使用的文件列表,如配置文件、脚本、二进制文件等,这些文件通常从控制节点传递到目标节点7templates/main.ymltemplates目录包含角色部署的Jinja2模板,模板是用于生成配置文件或其他文本文件的文件,可以在任务中使用template模块将模板复制到目标主机上8meta/main.ymlmeta目录包含角色的元数据列表,如角色的作者信息、版本、依赖项和支持的平台等信息,这些元数据可以帮助其他人理解角色的用途,还可以用于在AnsibleGalaxy上发布和共享角色03角色查找路径01如果正在使用集合,Ansible会在集合中查找角色。集合是一种组织和共享Ansible内容的机制,其中包含角色、模块、插件、Playbook等。在集合中查找02如果在Playbook文件所在目录中有一个roles目录,Ansible将在这个目录中查找角色。在roles目录中,每个角色都有自己的目录,并按照规定的目录结构组织。在Playbook文件所在目录的roles目录中查找03如果在Playbook文件所在目录的roles目录中没有找到角色,会在ansible.cfg文件设置的roles_path中查找角色。roles_path是Ansible用于查找角色的搜索路径,可以设置多个搜索路径,以冒号分隔,默认的roles_path为~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles。在roles_path中查找04如果Ansible无法在以上位置中找到角色,将在Playbook文件所在目录中查找。在Playbook文件所在目录中查找默认情况下,Ansible在以下位置查找角色。角色查找路径角色查找路径常见的方法是设置roles_path配置选项,roles_path可指定Ansible查找角色的搜索路径,多个不同路径以冒号分隔,并按照优先级排列。在roles_path中,可以包含绝对路径或相对路径。roles_path配置选项示例如下:[defaults]roles_path=/opt/ansible/roles:/home/user/ansible/roles:/etc/ansible/roles在上述示例中,roles_path设置了3个路径,并以冒号分隔。Ansible会优先在/opt/ansible/roles目录中查找角色。如果在这个目录中没有找到所需的角色,Ansible会继续在/home/user/ansible/roles目录中查找。如果在前两个目录中都没有找到角色,Ansible会在/etc/ansible/roles目录中查找。04在Playbook中使用角色在Playbook中使用角色在Ansible中,使用角色有如下3种不同的方式,对于每个指定的角色,角色任务、角色处理程序、角色变量和角色依赖项将按照顺序导入Playbook。角色中的任何copy、template、include_tasks、import_tasks任务等都可引用角色中相关的文件、模板或任务等,且无须相对路径或绝对路径。-name:Exampleplaybookusingroleshosts:web_serversroles:-common-web_app在play级别使用roles关键字,在Playbook文件中,roles关键字可以指定要在当前play中使用的角色。在上述示例中,在当前play中使用了两个角色,分别是common和web_app。当Ansible执行这个play时,它会查找这两个角色的任务,并按照指定的顺序依次执行它们。在Playbook中使用角色-name:Exampleplaybookusinginclude_rolehosts:web_serverstasks:-name:Configurecommonsettingsinclude_role:name:common-name:Configurewebappsettingsinclude_role:name:web_app在tasks级别使用include_role关键字,使用include_role关键字可以在Playbook的任何位置动态地重用角色。在上述示例中,在Playbook的tasks部分使用了include_role来动态地重用角色。当Ansible执行这个Playbook时,它会按照指定的顺序执行相应任务,并动态地使用指定的角色。在Playbook中使用角色-name:Exampleplaybookusingimport_rolehosts:web_serverstasks:-name:Configurecommonsettingsimport_role:name:common-name:Configurewebappsettingsimport_role:name:web_app在tasks级别使用import_role关键字,使用import_role关键字可以在Playbook的任何位置静态地重用角色。在上述示例中,在Playbook的tasks部分使用了import_role来静态地重用角色。当Ansible执行这个Playbook时,它将始终使用指定的角色,并按照指定的顺序执行相应任务。谢谢角色和集合任务3:创建和使用角色目录/Contents0102创建角色目录并定义角色内容使用变量改变角色01创建并使用角色创建角色目录Ansible角色具有标准化的目录结构,可以使用标准Linux命令创建新角色所需的所有目录和文件,也可以通过ansible-galaxy命令行实用程序来自动执行新角色创建流程。基本的角色创建流程包括创建角色目录、定义角色和在Playbook中使用角色。使用ansible-galaxy命令行工具创建角色是一种快速和方便的方法。该命令可用于管理Ansible角色,包括新角色的创建、打包、发布等。运行ansible-galaxyinit命令来创建一个新角色的目录结构,将角色的名称作为参数传递给该命令,该命令将在当前工作目录中创建一个新角色的目录。在项目目录(如home/rhce/playbook/)中,创建角色主目录role。[rhce@ansibleplaybook]$pwd/home/rhce/playbook/[rhce@ansibleplaybook]$mkdirroles[rhce@ansibleplaybook]$lsansible.cfginventoryroles定义角色内容[rhce@ansibleplaybook]$catansible.cfg[defaults]inventory=./inventoryremote_user=rhceask_pass=falsehost_key_checking=Falseroles_path=./roles使用ansible-galaxyinit命令,初始化角色目录结构在ansible.cfg文件中,定义角色路径。[rhce@ansibleplaybook]$ansible-galaxyinit--init-path./roles/apache-Roleapachewascreatedsuccessfully[rhce@ansibleplaybook]$lsroles/apache/defaultsfileshandlersmetaREADME.mdtaskstemplatestestsvars[rhce@ansibleplaybook]$treeroles/apache/roles/apache/├──defaults│└──main.yml├──files├──handlers│└──main.yml├──meta│└──main.yml├──README.md├──tasks│└──main.yml├──templates├──tests│├──inventory│└──test.yml└──vars└──main.yml8directories,8files查看角色信息。[rhce@ansibleplaybook]$ansible-galaxyrolelist#/home/rhce/playbook/roles-apache,(unknownversion)创建角色目录并定义角色内容在apache/defaults目录的main.yml文件中定义要使用的变量,设置httpd的监听端口。---httpd_port:80...在apache/tasks目录的main.yml文件中编写要执行的任务,包括安装httpd、创建目录、复制配置文件和模板文件等任务。----name:Installhttpdyum:name:httpdstate:latest...-name:indexhtmlfileisinstalledtemplate:src:index.html.j2dest:/var/www/html/index.htmlowner:apachegroup:apachenotify:-Restarthttpd创建角色目录并定义角色内容在apache/handlers目录的main.yml文件中定义处理程序,重启httpd服务。----name:Restarthttpdservice:name:httpdstate:restarted在apache/templates目录中,创建一个名为index.html.j2的Jinja2模板文件。[rhce@ansibleplaybook]$catroles/apache/templates/index.html.j2Welcometo{{ansible_facts['fqdn']}}on{{ansible_facts['default_ipv4']['address']}}在Playbook中使用角色,编写deployapache.yml脚本,调用apache角色执行自动化任务。[rhce@ansibleplaybook]$vimdeploy_apache.yml----name:useapacheroleplaybookhosts:webroles:-apache[rhce@ansibleplaybook]$ansible-playbookdeploy_apache.yml02使用变量改变角色使用变量改变角色编写良好的角色并利用默认变量来改变角色行为,使之与相关的配置场景相符,这有助于让角色变得更为通用,可在各种不同的上下文中重复利用。如果通过以下方式定义了相同的变量,则角色的defaults目录中定义的变量的值将被覆盖。在角色默认变量文件中定义变量,在web_server角色defaults/main.yml文件中定义了一个名为system_owner的变量。①在清单文件中定义,作为主机变量或组变量。②在Playbook项目的group_vars或host_vars目录下的YAML文件中定义。③嵌套在play的vars关键字中定义。④在play的roles关键字中包含该角色时定义。#roles/web_server/defaults/main.ymlsystem_owner:root如果在Playbook的group_vars或host_vars目录下的YAML文件中重新定义了system_owner变量,那么在应用角色时,该变量的值将被覆盖为新定义的值。#playbook/group_vars/all.ymlsystem_owner:rhce使用变量改变角色在Playbook的vars关键字中定义变量,使用vars关键字或在包含角色的play的roles关键字中定义变量来覆盖角色的默认值。----name:ExamplePlaybookhosts:allvars:system_owner:someone@roles:-role:web_serverexample_var:"{{system_owner}}"在上述示例中,变量system_owner会被定义并传递给web_server角色,以便在角色中使用。这个变量的优先级最高,将覆盖其他相同变量的定义。web_server角色中的example_var变量的默认值将被覆盖为someone@。使用变量改变角色在Playbook的roles关键字中定义变量-name:Exampleplaybookhosts:allroles:-role:web_serversystem_owner:someone@在上述示例中,变量system_owner会被定义并传递给web_server角色,以便在角色中使用,这个变量仅适用于当前角色,不会影响其他角色或全局变量。谢谢角色和集合任务4:AnsibleGalaxy部署角色目录/Contents01020304AnsibleGalaxy简介AnsibleGalaxy命令行工具使用ansible-galaxy命令管理角色使用requirements.yml文件安装角色01AnsibleGalaxy简介AnsibleGalaxy简介AnsibleGalaxy是Ansible社区维护的开源平台,用户可访问平台网站来搜索、评估、下载和共享Ansible角色和集合等内容,从而更快速地启动自动化项目。通过AnsibleGalaxy主页上的“Documentation”,可以进入描述如何使用AnsibleGalaxy的页面,其中包含如何从AnsibleGalaxy下载和使用角色和集合的内容,该页面也提供关于如何开发角色和集合并上传到AnsibleGalaxy的说明。AnsibleGalaxy主页如图所示。AnsibleGalaxy简介在AnsibleGalaxy主页上可以找到各种用于基础设施部署、应用程序部署以及日常任务管理的角色或集合,这些内容通常由社区成员创建、共享和维护。通过AnsibleGalaxy主页上左侧的“Search”,用户可以查看在AnsibleGalaxy上发布的内容。以角色为例,通过角色的名称或通过其他角色属性来搜索Ansible角色,搜索结果会按照BestMatch分数降序排列,此分数会依据角色质量、角色受欢迎程度、搜索条件进行计算,用户可以按照不同的标签、作者、星级和下载量等来筛选和排序搜索结果。AnsibleGalaxy会统计各个角色和集合的下载次数,以及它们的GitHub存储库拥有的watchers、forks和stars的数量。用户可以根据这些信息来确定角色或者集合的开发活跃程度,以及Ansible角色或集合在社区中的受欢迎程度。使用AnsibleGalaxy的搜索页面可以找到适用于用户项目的Ansible角色或者集合,然后按照说明文档将它们下载到Ansible管理主机上。同时,用户也可以通过AnsibleGalaxy来共享自己创建的Ansible内容,从而为整个社区做出贡献,帮助其他用户更好地利用Ansible实现自动化。AnsibleGalaxy简介AnsibleGalaxy还提供了一些扩展功能,比如评级、评论和标签等,可以帮助用户更好地了解和选择适用于自己项目的内容。通过搜索框右侧的“Filters”下拉菜单,可以按照Collection、Role、ContentName、DownloadCount、NamespaceName、Tags、Platforms等来搜索。如图显示了在执行docker关键字搜索并按照下载量排序后,AnsibleGalaxy显示的搜索结果。02AnsibleGalaxy命令行工具AnsibleGalaxy命令行工具ansible-galaxy命令是管理Ansible角色和集合的重要工具,可以用于创建、下载、发布、安装、删除、打包、搜索角色和集合等操作。ansible-galaxy命令的基本语法如下:ansible-galaxy<subcommand>[options][arguments]其中,subcommand表示要执行的子命令,可以是collection或role;options表示可选的命令选项,用于指定一些特定的行为或配置信息;arguments表示子命令需要的参数,用于执行特定的操作。ansible-galaxy命令中与role子命令相关的选项如表所示。序号选项描述1roleinit用于初始化新的Ansible角色。该命令会生成角色基本文件和目录结构,以便用户构建角色内容。比如ansible-galaxyroleinitmyrole命令会在当前目录下创建一个名为myrole的角色,参数-init-path可以指定角色创建的路径(默认为当前工作目录)2rolelist列出所有已经安装的角色,以及它们的名称、作者和版本号,比如ansible-galaxyrolelist命令会列出所有已经安装的角色AnsibleGalaxy命令行工具序号选项描述3rolesearch在AnsibleGalaxy上搜索角色,可以根据名称、作者、标签等进行搜索。比如ansible-galaxyrolesearchnginx将搜索名称包含nginx的角色,ansible-galaxyrolesearch--galaxy-tagsweb,nginx将按web、nginx标签搜索角色4roleimport将一个已经存在于GitHub上的角色导入AnsibleGalaxy。该命令需要GitHub用户名和仓库名称作为参数,并通过GitHubAPI获取角色代码,然后将其上传到AnsibleGalaxy上。比如执行ansible-galaxyroleimportgithub_usernamemyrole--role-namemynewrole
命令后,AnsibleGalaxy将会创建一个名为mynewrole的新角色,并将GitHub仓库github_username/myrole中的代码上传到该角色中5rolesetup用于在AnsibleGalaxy中设置GitHub集成。通过设置GitHub集成,可以将GitHub存储库与AnsibleGalaxy角色关联起来,以便在GitHub上进行代码更改时,自动更新AnsibleGalaxy角色。在执行ansible-galaxyrolesetup命令时,需要提供以下参数:source用于指定GitHub集成的源,可以是github或gitlab;github_user用于指定GitHub用户名;github_repo用于指定要与AnsibleGalaxy角色关联的GitHub仓库名称;secret用于指定用于验证Webhook的密钥6roleinfo用于获取角色的详细信息,包括作者、依赖项、标签、许可证、支持的平台等,比如执行ansible-galaxyroleinforhel-system-roles.podman命令,显示结果如下:Role:rhel-system-roles.podmandescription:Roleformanagingpodmandependencies:[]galaxy_info:author:RichardMegginsonrmeggins@company:RedHat,Inc.galaxy_tags:['podman','containers']license:MITmin_ansible_version:2.9platforms:[{'name':'Fedora','versions':['all']},{'name':'EL','versions':['8','9']}]path:('/home/rhce/.ansible/roles','/usr/share/ansible/roles','/etc/ansible/roles')其中包括角色的详细信息,包括作者为RichardMegginson,公司为RedHat,Inc.,标签为podman和containers,许可证为MIT,Ansible最低版本为2.9,支持的平台为Fedora和EL8、EL9。同时,还列出了Ansible角色搜索路径列表7roleinstall用于从AnsibleGalaxy或其他源安装Ansible角色,执行该命令可以将角色下载到本地,并安装到指定的Ansible角色路径中,以便在AnsiblePlaybook中使用。比如执行ansible-galaxyroleinstallgeerlingguy.apache命令将从AnsibleGalaxy安装geerlingguy.apache角色。如果默认情况下未指定角色路径,则该角色被安装在/etc/ansible/roles目录中。如果需要将其安装在其他位置,可以通过-p或--roles-path参数指定,比如ansible-galaxyroleinstall-p/path/to/rolesgeerlingguy.apache。如果指定的角色已经存在,但想要覆盖它,则可以使用-f或--force参数强制覆盖,比如ansible-galaxyroleinstall-fgeerlingguy.apache。执行ansible-galaxyroleinstall--role-filerequirements.yml命令将从requirements.yml文件中读取角色列表,并将其安装在默认的Ansible角色路径中8roleremove用于从本地系统中删除一个或多个Ansible角色。该命令可以接收一个或多个角色名称作为参数,并将这些角色从指定的Ansible角色路径中删除。比如执行命令ansible-galaxyroleremoveapachemysql将删除名为apache和mysql的两个角色9roledelete用于从AnsibleGalaxy上删除一个指定的角色。该命令需要指定要删除角色的GitHub用户名和存储库名称,以及可选的一些参数来设置操作。比如执行ansible-galaxyroledeletegeerlingguyapache将从AnsibleGalaxy上删除geerlingguy.apache角色,该角色的存储库位于GitHub上的geerlingguy/ansible-role-apache。删除角色是一个不可逆的操作。在执行此命令之前,请确保真正需要删除该角色,并且已经备份了该角色的相关文件ansible-galaxy命令中与role子命令相关的选项如表所示。03ansible-galaxy命令管理角色使用ansible-galaxy命令管理角色ansible-galaxy命令是Ansible自带的工具,可用于从AnsibleGalaxy或直接从基于Git的SCM(源代码管理)安装角色。还可以使用它创建新角色、删除角色或在AnsibleGalaxy网站上执行任务。默认情况下,该命令行工具使用作为服务器地址与AnsibleGalaxy网站API通信。如果用户在企业内部部署了私有AnsibleGalaxy服务器,可以使用--server选项指定它的地址或者使用ansible.cfg文件永久地设置AnsibleGalaxy服务器选项。安装角色前,可以在AnsibleGalaxy搜索需要安装的角色,或者通过命令搜索角色。[rhce@controlproject-roles]$ansible-galaxysearchgeerlingguy.mysqlFound1rolesmatchingyoursearch:NameDescription---------------geerlingguy.mysqlMySQLServer-InstallandconfigureMySQLserveronRHEL/CentOSandDebian/Ubuntu.使用ansible-galaxy命令管理角色使用ansible-galaxyinstall<role_name>安装角色。使用list选项显示安装在roles_path中的每个角色的名称和版本信息。[rhce@controlproject-roles]$ansible-galaxyrolelist#/home/rhce/ansible/project-roles/roles-apache,(unknownversion)-haproxy,(unknownversion)-phpinfo,(unknownversion)-geerlingguy.mysql,4.3.2[rhce@controlproject-roles]$ansible-galaxyinstallgeerlingguy.mysql-downloadingrole'mysql',ownedbygeerlingguy-downloadingrolefrom/api/v2/roles/8341-extractinggeerlingguy.mysqlto/etc/ansible/roles/geerlingguy.mysql-geerlingguy.mysql(1.9.10)wasinstalledsuccessfully使用ansible-galaxy命令管理角色在Playbook文件中,通过roles关键字来指定使用geerlingguy.mysql角色。使用remove选项从roles_path中删除角色。[rhce@controlproject-roles]$ansible-galaxyremovegeerlingguy.mysql-successfullyremovedgeerlingguy.mysql[rhce@controlproject-roles]$ansible-galaxyrolelist#/home/rhce/ansible/project-roles/roles-apache,(unknownversion)-haproxy,(unknownversion)-phpinfo,(unknownversion)-name:InstallandconfigureMySQLserverhosts:db_serverbecome:trueroles:-geerlingguy.mysql04使用requirements.yml文件安装角色使用requirements.yml文件安装角色为了方便地管理和部署多个角色及其依赖项,可以在requirements.yml文件中定义角色及其版本号来自动下载并安装这些角色及其依赖项。requirements.yml是一个YAML格式的文件,其中包含一个或多个角色及其版本号,文件中的角色可以设定一个或多个属性。其主要属性如表所示。序号属性描述1src角色的来源,如果从AnsibleGalaxy下载,格式为namespace.role_name,或者提供指向基于Git的SCM存储库的URL2scm指定版本控制系统,默认为Git方式。如果角色托管在AnsibleGalaxy中,或者以tar归档形式托管在Web服务器上,则省略scm属性3version指定下载的角色的版本,可以提供发布的标签值、提交的哈希值或分支名称。如果仓库中没有设置默认分支,则默认为master分支4name将用指定的名称下载角色。从AnsibleGalaxy下载时默认为AnsibleGalaxy名称,否则,默认为存储库的名称使用requirements.yml文件安装角色在requirements.yml文件中,每个角色至少需要指定src属性,表示角色的来源,其他属性,比如version、scm和name是可选的,可以根据需要进行指定。以下是requirements.yml文件的具体示例。-name:nginxsrc:geerlingguy.nginxversion:2.5.0-name:mysqlsrc:/ansible/mysql.gitscm:gitversion:1.0.0-name:apachesrc:geerlingguy.apache-name:nginxsrc:git+file:///home/bennojoy/nginx#fromawebserver,wheretheroleispackagedinatar.gz-name:http-role-gzsrc:/files/main.tar.gz#fromGitLaborothergit-basedscm,usinggit+ssh-src:git@:mygroup/ansible-core.gitscm:gitversion:"0.1"在示例中包含6个要安装的角色。第1个角色名为nginx,来自AnsibleGalaxy平台,指定为2.5.0版本。第2个角色名为mysql,来自GitHub上的MySQL仓库,指定为1.0.0版本。第3个角色名为apache,来自AnsibleGalaxy平台,没有指定版本号。第4个角色来自本地克隆的Git仓库,使用了git+file://协议,指定了本地仓库的完整路径。第5个角色http-role-gz,以tar.gz格式打包,可以通过HTTPURL下载。第6个角色来自GitLab或其他基于Git的SCM,使用了git+ssh协议,指定了GitLab上的URL和特定的版本号。使用requirements.yml文件安装角色使用以下命令安装包含在requirements.yml中的角色,并将它们下载到默认的角色路径中。ansible-galaxyinstall-rrequirements.yml如果不想使用默认的角色路径,可以使用--roles-path选项指定一个自定义路径。ansible-galaxyinstall-rrequirements.yml--roles-path/path/to/custom/roles谢谢角色和集合任务5:集合简介目录/Contents01020304集合的基本概念集合路径集合的目录结构安装集合05在Playbook中使用集合01集合基本概念集合基本概念Ansible自动化内容通常以Playbook或者角色的形式进行组织和共享。随着Ansible的发展和应用场景的增多,这种方式已经变得不够灵活,也不便于扩展。Ansible集合提供了一种新的打包和分发Ansible内容的格式以及组织和共享Ansible内容的方法。一个集合可以包含多个Ansible角色、模块、插件、Playbook等,这些内容可以组合在一起,形成一个单一的打包文件。集合提供了更好的版本控制和依赖管理功能,使用户可以更轻松地构建、共享和重复使用自动化任务和解决方案。Ansible2.9及之后的版本支持Ansible集合。在AnsibleBase2.10和AnsibleCore2.11中,上游Ansible将大多数模块从核心Ansible代码中拆分出来,并将它们放入集合。红帽AnsibleAutomationPlatform(AAP)2.2基于AnsibleCore2.13提供自动化执行环境,继承了集合这一功能。集合可以由任何人创建,可以是公共的或私有的,并通过发行服务器(如AnsibleGalaxy服务器)进行共享和分发。公共集合可以在AnsibleGalaxy上找到并安装,而私有集合可以通过私有AutomationHub实例进行分发。集合还可以在红帽自动化中心(RedHatAutomationHub)上进行认证。经过红帽测试和认证后的集合,可作为企业级自动化解决方案的一部分。02集合路径集合路径在Ansible中,集合路径用于指定Ansible应该在哪些目录中查找集合。默认情况下,Ansible会在以下目录中查找集合。/usr/share/ansible/collections~/.ansible/collections./collections其中,/usr/share/ansible/collections目录是系统级别的集合目录;~/.ansible/collections目录是用户级别的集合目录;./collections目录是当前工作目录中的集合目录。如果要将额外的集合路径添加到搜索路径中,则可以在ansible.cfg文件中指定collections_path选项来添加,它可以包含一个或多个以冒号分隔的目录路径。在查找集合时,Ansible将按照指定的顺序搜索这些目录,并加载找到的第一个匹配的集合。如果未指定此选项,则使用默认的集合路径。[defaults]collections_path=/path/to/extra/collections:/another/path/to/collections上述示例将添加/path/to/extra/collections和/another/path/to/collections两个目录到集合路径中。在搜索集合时,Ansible将按照指定的顺序查找这些目录。集合路径collections_scan_sys_path选项用于设置是否在系统路径中扫描集合。如果将其设置为False,则Ansible不会在系统路径中扫描集合。如果未指定此选项,则默认为True。以下示例禁用了在系统路径中扫描集合。[defaults]collections_scan_sys_path=False需要注意的是,如果禁用了在系统路径中扫描集合,则必须将所有需要使用的集合都添加到collections_path中,否则Ansible将无法找到这些集合。在使用AnsibleGalaxy安装集合时,可以使用-p或--collections-path参数指定集合安装路径。ansible-galaxycollectioninstallcommunity.general-p/path/to/collections03集合目录结构集合目录结构集合是一种可重用的Ansible内容,它包含模块、插件、角色和其他相关内容。在集合的根目录下有一个名为galaxy.yml的文件,这个文件包含AnsibleGalaxy和其他工具打包、构建及发布集合所需的所有元数据。常见的Ansible集合目录结构如下。collection/├──docs/├──galaxy.yml├──meta/│└──runtime.yml├──plugins/│├──modules/││└──module1.py│├──inventory/│└──.../├──README.md├──roles/│├──role1/│├──role2/│└──.../├──playbooks/│├──files/│├──vars/│├──templates/│└──tasks/└──tests/集合目录结构集合的主要目录和文件。序号主要目录和文件描述1galaxy.ymlgalaxy.yml文件必须包含在集合的根目录下,用于定义集合的元数据信息,如名称、版
本、作者、许可证等2docsdocs目录包含集合的文档及示例3pluginsplugins目录包含集合的插件,如模块、过滤器、动态发现脚本等4rolesroles目录包含集合内的所有角色,每个角色都有一个独立的目录,包含该角色的所有文件和目录,如任务、变量、模板等5playbooksplaybooks目录包含集合的Playbook,每个Playbook都是一个独立的YAML文件6teststests目录包含集合的测试文件,测试文件可以用于单元测试、集成测试等7metameta目录包含关于集合的元数据信息,如依赖、支持的平台等8runtime.ymlruntime.yml文件包含运行时配置信息,如要求的Ansible版本、依赖关系等04安装集合安装集合默认情况下,ansible-galaxycollectioninstall使用
作为AnsibleGalaxy服务器。如果使用非默认的AnsibleGalaxy服务器,则需要在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程项目变更课件
- 工程销售培训课件
- 工程造价工程审计课件下载
- 工程课件结语
- 广告位投放合同协议
- 疖的护理课件
- 含山中学高二数学试卷
- 哈三二模数学试卷
- 贵阳市分班考数学试卷
- 贵溪市联考初中数学试卷
- 肺功能检查与临床应用
- 施工停工复工安全生产培训
- DBJ51T 021-2013 四川省建筑反射隔热涂料应用技术规程
- 2025年专四语法题
- 《橡胶沥青应力吸收层应用技术指南》
- 2025年广西林业局直属事业单位招聘考试笔试高频重点提升(共500题)附带答案详解
- 2025年中国华能集团公司招聘笔试参考题库含答案解析
- DGTJ 08-2176-2024 沥青路面预防养护技术标准(正式版含条文说明)
- 2025年浙江广电集团招聘笔试参考题库含答案解析
- 《ECMO安装及预充》课件
- 高教版2023年中职教科书《语文》(基础模块)上册教案全册
评论
0/150
提交评论