Ansible——创建角色、galaxy的简单使用

高寒
2023-12-01

创建角色

角色内容开发

角色允许以模块化方式编写playbook。为了最大限度地提高新开发角色的效率,请考虑在角色开发中采用以下推荐做法:

  • 在角色自己的版本控制存储库中维护每个角色。Ansible很适合使用基于git的存储库。
  • 角色存储库中不应存储敏感信息,如密码或SSH密钥。敏感值应以变量的形式进行参数化,其默认值应不敏感。使用角色的playbook负责通过Ansible Vault变量文件、环境变量或其他ansible-playbook选项定义敏感变量。
  • 使用ansible-galaxy init启动角色,然后删除不需要的任何目录和文件。
  • 创建并维护README.md和meta/main.yml文件,以记录用户的角色的用途、作者和用法。
  • 让角色侧重于特定的用途或功能。可以编写多个角色,而不是让一个角色承担许多任务。
  • 经常重用和重构角色。避免为边缘配置创建新的角色。如果现有角色能够完成大部分的所需配置,请重构现有角色以集成新的配置方案。使用集成和回归测试技术来确保角色提供所需的新功能,并且不对现有的playbook造成问题。

定义角色依赖项

角色依赖项使得角色可以将其他角色作为依赖项包含在内。

dependencies:
  - role: httpd
    port: 88
  - role: postgres
    dbname: server
    admin_user: felix

默认情况下,角色仅作为依赖项添加到playbook中一次。若有其他角色也将它作为依赖项列出,它不会再次运行。此行为可以被覆盖,将meta/main.yml文件中的allow_duplicates变量设置为yes即可。

通过变量更改角色的行为

编写良好的角色利用默认变量来改变角色行为,使之与相关的配置场景相符。这有助于让角色变得更为通用,可在各种不同的上下文中重复利用。

如果通过以下方式定义了相同的变量,则角色的defaults目录中定义的变量的值将被覆盖:

  • 在清单文件中定义,作为主机变量或组变量
  • 在playbook项目的group_vars或host_vars目录下的YAML文件中定义
  • 作为变量嵌套在play的vars关键字中定义
  • 在play的roles关键字中包含该角色时作为变量定义

角色变量的优先级:

  • 角色内嵌参数、事实、通过include_vars加载的变量、注册的变量
  • vars/main.yml中定义的变量
  • playbook中vars部分定义的变量
  • 主机变量、主机组变量
  • defaults/main.yml中定义的变量

Ansible-galaxy的使用

介绍ansible galaxy

ansible galaxy是一个Ansible内容公共资源库,这些内容由许许多多Ansible管理员和用户编写。它包含数千个Ansible角色,具有可搜索的数据库,可帮助Ansible用户确定或许有助于他们完成管理任务的角色。Ansible Galaxy含有面向新的Ansible用户和角色开发人员的文档和视频链接。

ansible-galaxy链接: https://galaxy.ansible.com

ansible-galaxy命令行工具

ansible-galaxy search子命令在Ansible Galaxy中搜索角色。如果以参数形式指定了字符串,则可用于按照关键字在Ansible Galaxy中搜索角色。用户可以使用–author、–platforms和–galaxy-tags选项来缩小搜索结果的范围。也可以将这些选项用作主要的搜索键。例如,命令ansible-galaxy search --author geerlingguy将显示由用户geerlingguy提交的所有角色。

[root@client ansible]# ansible-galaxy search robertdebock.httpd

Found 13 roles matching your search:

 Name                       Description
 ----                       -----------
 robertdebock.ca            Install and configure a certificate authority on your system.
 robertdebock.certbot       Install and configure certbot on your system.
 robertdebock.haproxy       Install and configure haproxy on your system.
 robertdebock.httpd         Install and configure httpd on your system.
 robertdebock.mediawiki     Install and configure mediawiki on your system.
 robertdebock.moodle        Install and configure moodle on your system.
 robertdebock.nextcloud     Install and configure Nextcloud on your system.
 robertdebock.owncloud      Install and configure owncloud on your system.
 robertdebock.php           Install and configure php on your system.
 robertdebock.php_fpm       The purpose of this role is to install and configure php_fpm on your system.
 robertdebock.phpmyadmin    Install and configure phpmyadmin on your system.
 robertdebock.roundcubemail Install and configure roundcubemail on your system.
 robertdebock.zabbix_web    Install and configure zabbix_web on your system.

从ansible galaxy安装角色

ansible-galaxy install子命令从Ansible Galaxy下载角色,并将它安装到控制节点本地。

默认情况下,角色安装到用户的roles_path下的第一个可写目录中。根据为Ansible设置的默认roles_path,角色通常将安装到用户的~/.ansible/roles目录。默认的roles_path可能会被用户当前Ansible配置文件或环境变量ANSIBLE_ROLES_PATH覆盖,这将影响ansible-galaxy的行为。

用户可以通过使用-p DIRECTORY选项,指定具体的目录来安装角色。

[root@client playbook]# ansible-galaxy install  robertdebock.httpd -p roles/
- downloading role 'httpd', owned by robertdebock
- downloading role from https://github.com/robertdebock/ansible-role-httpd/archive/7.0.0.tar.gz
- extracting robertdebock.httpd to /etc/ansible/playbook/roles/robertdebock.httpd
- robertdebock.httpd (7.0.0) was installed successfully
[root@client roles]# ls
robertdebock.httpd

ansible-galaxy的应用

文件安装角色

可以使用ansible-galaxy,根据某一文本文件中的定义来安装一个角色列表。例如,如果用户的一个playbook需要安装特定的角色,可以在项目目录中创建一个roles/requirements.yml文件来指定所需的角色。此文件充当playbook项目的依赖项清单,使得playbook的开发和调试能与任何支持角色分开进行。

若要使用角色文件来安装角色,可使用-r REQUIREMENTS-FILE选项:

ansible-galaxy install -r roles/test.yml -p roles

管理下载的角色

nsible-galaxy命令也可管理本地的角色,如位于playbook项目的roles目录中的角色。ansible-galaxy list子命令列出本地找到的角色。

ansible-galaxy list

可以使用ansible-galaxy remove子命令本地删除角色。

ansible-galaxy remove httpd

 类似资料: