在中国原生语言中完成以下的表述:创建角色并将其注册到Ansible Galaxy中的工作流程
首先
我在尝试创建一个角色并将其注册到Ansible Galaxy上,现在我将记录下操作步骤。注册到ansible-galaxy的过程是参考了@znz博客的指南,非常感谢。
在这里,我将介绍我注册的三个角色之一,即homebrew-packages角色的创建和将其上传到Ansible Galaxy的操作步骤。
创建角色
生成用于role的目录和文件
首先,创建一个工作目录,并在其中执行以下命令。
ansible-galaxy init homebrew-packages
然后会创建出以下这样的目录树和文件。
homebrew-packages/
README.md
defaults/
main.yml
handlers/
main.yml
meta/
.galaxy_install_info
main.yml
tasks/
main.yml
vars/
main.yml
实施角色
我们将编辑生成的文件并实现角色。为了进行操作确认,在工作目录下创建一个名为localhost.yaml的文件,内容如下。
- hosts: localhost
connection: local
gather_facts: no
sudo: no
vars:
homebrew_packages_taps:
- homebrew/binary
- homebrew/dupes
homebrew_packages_packages:
- { name: readline }
- { name: openssl, state: linked }
- { name: ansible }
- { name: cmake }
- { name: ctags }
- { name: direnv }
- { name: docker }
- { name: git }
- { name: jq }
- { name: hub }
- { name: imagemagick }
- { name: mercurial }
- { name: mysql }
- { name: packer }
- { name: pkg-config }
- { name: pwgen }
- { name: python }
- { name: reattach-to-user-namespace }
- { name: redis }
- { name: subversion }
- { name: the_silver_searcher }
- { name: tig }
- { name: tmux }
- { name: whois }
- { name: xz }
- { name: vim }
- { name: wget }
- { name: zsh, install_options: disable-etcdir }
roles:
- homebrew-packages
我們在tasks/main.yaml中編寫角色的處理,然後使用以下命令進行操作確認,並且重複執行以進行實現。
ansible-playbook localhost.yaml
在编写程序时,用于角色的变量命名规则。
在Ansible Galaxy的“关于”页面的“关于变量”的部分中,详细说明了用于角色的变量命名规则。我们应该在变量名称前加上${角色名称}_的前缀,而不是直接使用变量名称本身。这样做是为了避免与其他角色的变量名称冲突。
在上述例子中,由于角色名为homebrew-packages且变量名为packages,所以选择将其命名为homebrew_pacakges_packages。
如果要将自制的模块包含到角色中,请创建一个library目录。
如果想在role中包含自定义模块,只需在模块的目录中创建一个名为”library”的文件夹,并将模块放置其中即可。
例如,对于hnakamur/ansible-role-atom-packages这个角色来说,它在library目录中包含了apm文件。
顺便提一下,我只是复制粘贴了Ansible本身包含的npm源代码,然后在大约10分钟内草草地创建了这个文件。Ansible的魅力之一就是可以轻松地创建自定义模块!
写meta/main.yaml和README.md
实现完成后,我们会写meta/main.yaml和README.md。ansible-galaxy init生成的文件中有各种说明,我们会阅读并逐步撰写。
在GitHub上创建一个仓库并进行推送。
我在Github的网页界面上创建了一个仓库。在这个例子中,我创建了一个名为hnakamur/ansible-role-homebrew-packages的仓库。
在角色使用的 GitHub 存储库名称中,不要将其命名与角色名称相同。
如果将角色名称和存储库名称设置为相同,当 Ansible 角色处理上游软件存储库时,名称会发生冲突。例如,如果我们使用“nginx”作为名称创建一个 GitHub 存储库来存放 nginx 的角色,那么在fork nginx本身的存储库时会遇到问题。因此,我们决定在用于角色的 GitHub 存储库名称上添加前缀“ansible-role-”。
将role文件推送到存储库中
根据在github.com上创建存储库时显示的命令,借鉴其创建本地存储库并添加文件,进行提交,并推送到github.com的存储库。
将角色注册到Ansible Galaxy。
选择Ansible Galaxy的“添加角色”菜单来注册角色。
-
- Github Username/Account: hnakamur
-
- Github Repository: ansible-role-homebrew-packages
- Alternate Name: homebrew-packages
下载并验证在Ansible Galaxy上注册的角色的功能。
为了作业使用,在~/ansible-workspace中创建一个文件夹,并下载并尝试使用之前注册的role。名称部分将以${用户名}.${角色名}的格式指定。由于希望安装到当前目录,因此将指定为.。
mkdir ~/ansible-workspace
cd ~/ansible-workspace
ansible-galaxy install --roles-path=. hnakamur.homebrew-packages
就会在当前目录下创建一个名为hnakamur.homebrew-packages的目录。
我们将创建一个名为localhost.yaml的文件用于确认操作。
- hosts: localhost
connection: local
gather_facts: no
sudo: no
vars:
homebrew_packages_taps:
- homebrew/binary
- homebrew/dupes
homebrew_packages_packages:
- { name: readline }
- { name: openssl, state: linked }
- { name: ansible }
- { name: cmake }
- { name: ctags }
- { name: direnv }
- { name: docker }
- { name: git }
- { name: jq }
- { name: hub }
- { name: imagemagick }
- { name: mercurial }
- { name: mysql }
- { name: packer }
- { name: pkg-config }
- { name: pwgen }
- { name: python }
- { name: reattach-to-user-namespace }
- { name: redis }
- { name: subversion }
- { name: the_silver_searcher }
- { name: tig }
- { name: tmux }
- { name: whois }
- { name: xz }
- { name: vim }
- { name: wget }
- { name: zsh, install_options: disable-etcdir }
roles:
- hnakamur.homebrew-packages
在创建role时,请注意需要指定roles并在前面加上${用户名}的前缀。您可以使用以下命令来执行。
ansible-playbook localhost.yaml