在中国原生语言中完成以下的表述:创建角色并将其注册到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
bannerAds