命令行工具
ansible-galaxy
命令與Ansible捆綁在一起,您可以使用它從Galaxy或直接從基於git的SCM安裝角色。 您還可以使用它在Galaxy網站上創建新角色,刪除角色或執行任務。
默認情況下,命令行工具使用服務器地址https://galaxy.ansible.com與Galaxy網站API通信。 由於Galaxy項目是一個開源項目,您可能會運行自己的內部Galaxy服務器,並希望覆蓋默認的服務器地址。 您可以使用-server選項或通過在ansible.cfg文件中設置Galaxy服務器值來執行此操作。 有關在ansible.cfg中設置值的信息,請訪問Galaxy設置 。
Installing Roles
使用ansible-galaxy
命令從Galaxy網站下載角色
$ ansible-galaxy install username.role_name
roles_path
請注意,默認情況下,Ansible將角色下載到由環境變量ANSIBLE_ROLES_PATH指定的路徑。 這可以設置為一系列目錄(即/etc/ansible/roles:~/.ansible/roles ),在這種情況下,將使用第一個可寫路徑。 首次安裝Ansible時,它默認為/ etc / ansible / roles ,這需要root權限。
您可以通過在會話中設置環境變量,在ansible.cfg文件中定義roles_path或使用-roles -path選項來覆蓋此方法。 以下提供了使用-roles-path將角色安裝到當前工作目錄中的示例:
$ ansible-galaxy install --roles-path . geerlingguy.apache
version
您可以通過附加一個逗號和一個GitHub發行標簽的值來從Galaxy安裝一個特定版本的角色。 例如:
$ ansible-galaxy install geerlingguy.apache,v1.0.0
也可以直接指向git存儲庫,並指定分支名稱或提交哈希作為版本。 例如,以下將安裝一個特定的提交:
$ ansible-galaxy install git+https://github.com/geerlingguy/ansible-role-apache.git,0b7cd353c0250e87a26e0499e59e7fd265cc2f25
從文件安裝多個角色
從Ansible 1.8開始,可以通過將roles放在require.yml文件中來安裝多個角色。 該文件的格式是YAML,文件擴展名必須是.yml或.yaml 。
使用以下命令安裝require.yml中包含的角色:
$ ansible-galaxy install -r requirements.yml
再次,擴展是重要的。 如果.yml擴展名被關閉,則ansible-galaxy
CLI假定該文件處於較舊的,現在已棄用的“基本”格式。
該文件中的每個角色將具有以下一個或多個屬性:
- src
- 角色的來源。 如果從Galaxy下載,請使用username.role_name格式; 否則,提供指向基於git的SCM中的存儲庫的URL。 參見下面的例子。 這是必需屬性。
- scm
- 指定SCM。 在撰寫本文時,只支持git或hg 。 參見下面的例子。 默認為git 。
- version:
- 該版本的角色要下載。 提供發布標簽值,提交散列或分支名稱。 默認為主 。
- name:
- 將角色下載到特定名稱。 從Galaxy下載時默認為Galaxy名稱,否則默認為存儲庫的名稱。
使用以下示例作為在require.yml中指定角色的指南:
# from galaxy - src: yatesr.timezone # from GitHub - src: https://github.com/bennojoy/nginx # from GitHub, overriding the name and specifying a specific tag - src: https://github.com/bennojoy/nginx version: master name: nginx_role # from a webserver, where the role is packaged in a tar.gz - src: https://some.webserver.example.com/files/master.tar.gz name: http-role # from Bitbucket - src: git+http://bitbucket.org/willthames/git-ansible-galaxy version: v1.4 # from Bitbucket, alternative syntax and caveats - src: http://bitbucket.org/willthames/hg-ansible-galaxy scm: hg # from GitLab or other git-based scm - src: git@gitlab.company.com:mygroup/ansible-base.git scm: git version: "0.1" # quoted, so YAML doesn't parse this as a floating-point value
依賴
角色也可以依賴於其他角色,當您安裝具有依賴關系的角色時,這些依賴項將自動安裝。
您可以通過提供角色列表來指定meta / main.yml文件中的角色依賴關系。 如果角色的來源是Galaxy,則可以使用username.role_name格式簡單地指定角色。 還支持require.yml中使用的更復雜的格式,允許您提供src,scm,version和name。
在Galaxy中找到的依賴關系可以指定如下:
dependencies: - geerlingguy.apache - geerlingguy.ansible
復合形式也可以如下使用:
dependencies: - src: geerlingguy.ansible - src: git+https://github.com/geerlingguy/ansible-role-composer.git version: 775396299f2da1f519f0d8885022ca2d6ee80ee8 name: composer
當ansible-galaxy
遇到依賴關系時,它會自動將每個依賴關系安裝到roles_path 。 要了解在play執行過程中如何處理依賴關系,請參閱“ Playbook角色和包含語句” 。
Create roles
使用init
命令初始化新角色的基本結構,節省創建各種目錄和main.yml文件的時間
$ ansible-galaxy init role_name
以上將在當前工作目錄中創建以下目錄結構:
README.md
.travis.yml defaults/ main.yml files/ handlers/ main.yml meta/ main.yml templates/ tests/ inventory test.yml vars/ main.yml
Force
如果當前工作目錄中存在與該角色名稱相匹配的目錄,則init命令將導致錯誤。 要忽略該錯誤,請使用-force選項。 Force將創建上述子目錄和文件,替換匹配的任何內容。
Container Enabled
如果要創建啟用Container的角色,請使用-container-enabled選項。 這將創建與上述相同的目錄結構,但使用適用於啟用Container的默認文件填充它。 例如,README.md具有稍微不同的結構, .travis.yml文件使用Ansible Container來測試角色,而meta目錄包含一個container.yml文件。
Using a Custom Role Skeleton
可以提供自定義角色骨架目錄,如下所示:
$ ansible-galaxy init --role-skeleton = / path / to / skeleton role_name
當提供骨架時,init將:
- 將所有文件和目錄從骨架復制到新角色
- 在模板文件夾之外找到的任何.j2文件將被渲染為模板。 目前唯一有用的變量是role_name
- .git文件夾和任何.git_keep文件將不被復制
或者,可以通過ansible.cfg配置role_skeleton和忽略文件
[galaxy]
role_skeleton = /path/to/skeleton
role_skeleton_ignore = ^.git$,^.*/.git_keep$
Search for Roles
通過標簽,平台,作者和多個關鍵字搜索Galaxy數據庫。 例如:
$ ansible-galaxy search elasticsearch --author geerlingguy
搜索命令將返回與您的搜索匹配的前1000個結果的列表:
Found 2 roles matching your search: Name Description ---- ----------- geerlingguy.elasticsearch Elasticsearch for Linux. geerlingguy.elasticsearch-curator Elasticsearch curator for Linux.
Get more information about a role
使用info
命令可查看有關特定角色的更多詳細信息:
$ ansible-galaxy info username.role_name
這將返回Galaxy中發現的所有角色:
Role: username.role_name description: Installs and configures a thing, a distributed, highly available NoSQL thing. active: True commit: c01947b7bc89ebc0b8a2e298b87ab416aed9dd57 commit_message: Adding travis commit_url: https://github.com/username/repo_name/commit/c01947b7bc89ebc0b8a2e298b87ab company: My Company, Inc. created: 2015-12-08T14:17:52.773Z download_count: 1 forks_count: 0 github_branch: github_repo: repo_name github_user: username id: 6381 is_valid: True issue_tracker_url: license: Apache min_ansible_version: 1.4 modified: 2015-12-08T18:43:49.085Z namespace: username open_issues_count: 0 path: /Users/username/projects/roles scm: None src: username.repo_name stargazers_count: 0 travis_status_url: https://travis-ci.org/username/repo_name.svg?branch=master version: watchers_count: 1
List installed roles
使用list
顯示在roles_path中安裝的每個角色的名稱和版本。
$ ansible-galaxy list
- chouseknecht.role-install_mongod, master - chouseknecht.test-role-1, v1.0.2 - chrismeyersfsu.role-iptables, master - chrismeyersfsu.role-required_vars, master
刪除已安裝的角色
使用remove
從roles_path刪除角色:
$ ansible-galaxy remove username.role_name
Authenticate with Galaxy
使用import
, delete
和setup
命令來管理Galaxy網站上的角色需要身份驗證,並且可以使用login
命令來執行此操作。 在您可以使用login
命令之前,您必須在Galaxy網站上創建一個帳戶。
login
命令需要使用您的GitHub憑據。 您可以使用您的用戶名和密碼,也可以創建個人訪問令牌 。 如果您選擇創建令牌,則授予對令牌的最小訪問權限,因為它僅用於驗證標識。
以下顯示使用GitHub用戶名和密碼與Galaxy網站進行身份驗證:
$ ansible-galaxy login
We need your GitHub login to identify you. This information will not be sent to Galaxy, only to api.github.com. The password will not be displayed. Use --github-token if you do not want to enter your password. Github Username: dsmith Password for dsmith: Successfully logged into Galaxy as dsmith
當您選擇使用您的用戶名和密碼時,您的密碼不會發送到Galaxy。 它用於使用GitHub進行身份驗證,並創建個人訪問令牌。 然后,它將令牌發送到Galaxy,該Galaxy又會驗證您的身份並返回Galaxy訪問令牌。 驗證完成后,GitHub令牌將被銷毀。
如果您不希望使用GitHub密碼,或者如果您使用GitHub啟用雙重身份驗證,請使用-github-token選項傳遞您創建的個人訪問令牌。
Import a role
import
命令要求您首先使用login
命令進行身份驗證。 一旦經過身份驗證,您可以導入您擁有或已被授予訪問權限的任何GitHub存儲庫。
使用以下內容導入角色:
$ ansible-galaxy import github_user github_repo
默認情況下,命令將等待Galaxy完成導入過程,並在導入進度時顯示結果:
Successfully submitted import request 41
Starting import 41: role_name=myrole repo=githubuser/ansible-role-repo ref= Retrieving GitHub repo githubuser/ansible-role-repo Accessing branch: master Parsing and validating meta/main.yml Parsing galaxy_tags Parsing platforms Adding dependencies Parsing and validating README.md Adding repo tags as role versions Import completed Status SUCCESS : warnings=0 errors=0
Branch
使用-branch選項導入特定的分支。 如果沒有指定,將使用repo的默認分支。
Role name
默認情況下,賦予角色的名稱將從GitHub存儲庫名稱派生。 但是,您可以使用-role-name選項來覆蓋此名稱並設置名稱。
No wait
如果存在-no-wait選項,則命令不會等待結果。 通過訪問我的導入,可以在Galaxy網站上查看任何角色的最新導入結果。
Delete a role
delete
命令要求您首先使用login
命令進行身份驗證。 通過身份驗證,您可以從Galaxy網站中刪除角色。 您只能刪除您可以訪問GitHub中的存儲庫的角色。
使用以下內容刪除角色:
$ ansible-galaxy delete github_user github_repo
這只會消除Galaxy的角色。 它不會刪除或更改實際的GitHub信息庫。
Travis集成
您可以在Galaxy和Travis中的角色之間創建集成或連接。 建立連接后,Travis中的版本將自動觸發Galaxy中的導入,並使用關於角色的最新信息更新搜索索引。
您可以使用setup
命令創建集成,但在創建集成之前,必須首先使用login
命令進行身份驗證; 您還需要在Travis的帳戶和您的Travis令牌。 准備好后,使用以下命令創建集成:
$ ansible-galaxy setup travis github_user github_repo xxx-travis-token-xxx
設置命令需要您的Travis令牌,但令牌不會存儲在Galaxy中。 它與GitHub用戶名和repo一起使用,以創建Travis文檔中所述的哈希。 散列存儲在Galaxy中,用於驗證從Travis收到的通知。
設置命令使Galaxy能夠響應通知。 要配置Travis在您的存儲庫上運行構建並發送通知,請遵循Travis入門指南 。
要指示Travis在構建完成時通知Galaxy,請將以下內容添加到.travis.yml文件中:
通知 : webhooks : https : //galaxy.ansible.com/api/v1/notifications/
列出Travis集成
使用-list選項顯示您的Travis集成:
$ ansible-galaxy setup --list ID來源報告 ---------- ---------- ---------- 2 travis github_user / github_repo 1 travis github_user / github_repo
刪除Travis集成
使用-remove選項禁用和刪除Travis集成:
$ ansible-galaxy setup --remove ID
提供要禁用的集成的ID。 您可以使用-list選項找到該ID。