角色允许以模块化方式编写playbook。为了最大限度地提高新开发角色的效率,请考虑在角色开发中采用以下推荐做法:
角色依赖项使得角色可以将其他角色作为依赖项包含在内。
dependencies:
- role: httpd
port: 88
- role: postgres
dbname: server
admin_user: felix
默认情况下,角色仅作为依赖项添加到playbook中一次。若有其他角色也将它作为依赖项列出,它不会再次运行。此行为可以被覆盖,将meta/main.yml文件中的allow_duplicates变量设置为yes即可。
编写良好的角色利用默认变量来改变角色行为,使之与相关的配置场景相符。这有助于让角色变得更为通用,可在各种不同的上下文中重复利用。
如果通过以下方式定义了相同的变量,则角色的defaults目录中定义的变量的值将被覆盖:
ansible galaxy是一个Ansible内容公共资源库,这些内容由许许多多Ansible管理员和用户编写。它包含数千个Ansible角色,具有可搜索的数据库,可帮助Ansible用户确定或许有助于他们完成管理任务的角色。Ansible Galaxy含有面向新的Ansible用户和角色开发人员的文档和视频链接。
ansible-galaxy链接: https://galaxy.ansible.com
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 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,根据某一文本文件中的定义来安装一个角色列表。例如,如果用户的一个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