一、介紹Anisble galaxy
1、介紹Ansibleu galaxy
1️⃣:Ansible Galaxy (官網:https://galaxy.ansible.com)是一個Ansible內容公共資源庫,這些內容由許許多多Ansible管理員和用戶編寫。
2️⃣:它包含數千個Ansible角色,具有可搜索的數據庫,可幫助Ansible用戶確定或許有助於他們完成管理任務的角色
3️⃣:Ansible Galaxy含有面向新的Ansible用戶和角色開發人員的文檔和視頻鏈接
2、獲取Ansible galaxy幫助
1️⃣:通過Ansible Galaxy網站主頁上的Documenttaion標簽,可以進入描述如何使用Ansible Galaxy的頁面
2️⃣:其中包含了介紹如何從Ansible Galaxy下載和使用角色的內容。該頁面也提供關於如何開發角色並上傳到Ansible Galaxy的說明。
3、瀏覽Ansible galaxy中的角色
1️⃣:通過Ansible Galaxy網站主頁上左側的Search標簽,用戶可以訪問關於Ansible Galaxy上發布的角色的信息
2️⃣:用戶可以使用標記通過角色的名稱或通過其他角色屬性來搜索Ansible角色。
3️⃣:結果按照Best Match分數降序排列,此分數依據角色質量、角色受歡迎程度和搜索條件計算而得。
二、Ansible Galaxy命令行工具
1、從命令行搜索角色
1️⃣:ansible-galaxy search子命令在Ansible Galaxy中搜索角色
2️⃣:如果以參數形式指定了字符串,則可用於按照關鍵字在Ansible Galaxy中搜索角色
3️⃣:用戶可以使用--author、--platforms和--galaxy-tags選項來縮小搜索結果的范圍
4️⃣:例如,命令ansible-galaxy search --author geerlingguy將顯示由用戶geerlingguy提交的所有角色
[root@localhost ~]# ansible-galaxy search 'redis' --author geerlingguy Found 3 roles matching your search: Name Description ---- ----------- geerlingguy.php-pecl PHP PECL extension installation. geerlingguy.php-redis PhpRedis support for Linux geerlingguy.redis Redis for Linux
5️⃣:ansible-galaxy info子命令顯示與角色相關的更多詳細信息
6️⃣:Ansible Galaxy從多個位置獲取這一信息,包括角色的meta/main.yml文件及其GigHub存儲庫
[root@localhost ~]# ansible-galaxy info geerlingguy.redis Role: geerlingguy.redis description: Redis for Linux active: True commit: 4f6fbdff6b566a596b2eaac168f88be820d4bbc5 commit_message: Ignore the tyranny of ansible-lint rule 106. commit_url: https://api.github.com/repos/geerlingguy/ansible-role-redis/git/commits/4f6fbdff6b566a596b2eaac168f88be820d4bbc5 company: Midwestern Mac, LLC created: 2014-03-06T16:48:12.451903Z download_count: 374535 forks_count: 131 github_branch: master github_repo: ansible-role-redis github_user: geerlingguy id: 468 imported: 2020-09-11T15:06:16.909297-04:00 is_valid: True issue_tracker_url: https://github.com/geerlingguy/ansible-role-redis/issues license: license (BSD, MIT) min_ansible_version: 2.4 modified: 2020-09-11T19:06:16.916742Z open_issues_count: 6 path: ('/root/.ansible/roles', '/usr/share/ansible/roles', '/etc/ansible/roles') role_type: ANS stargazers_count: 161 travis_status_url: https://travis-ci.org/geerlingguy/ansible-role-redis.svg?branch=master
以上命令顯示了Ansible Galaxy提供的geerlingguy.redis角色的相關信息。
2、從Ansibel galaxy安裝角色
1️⃣:ansible-galaxy install子命令從Ansible Galaxy下載角色,並將它安裝到控制節點本地
2️⃣:默認情況下,角色安裝到用戶的roles_path下的第一個可寫目錄中。根據為Ansible設置的默認roles_path,角色通常將安裝到用戶的~/.ansible/roles目錄
3️⃣:默認的roles_path可能會被用戶當前Ansible配置文件或環境變量ANSIBLE_ROLES_PATH覆蓋,這將影響ansible-galaxy的行為
4️⃣:用戶可以通過使用-p DIRECTORY選項,指定具體的目錄來安裝角色
[root@localhost ~]# ls project/ playbook.yaml [root@localhost ~]# ansible-galaxy install robertdebock.httpd -p project/ //-p 指定安裝目錄 - downloading role 'httpd', owned by robertdebock - downloading role from https://github.com/robertdebock/ansible-role-httpd/archive/5.3.0.tar.gz - extracting robertdebock.httpd to /root/project/robertdebock.httpd - robertdebock.httpd (5.3.0) was installed successfully [root@localhost ~]# ls project/ playbook.yaml robertdebock.httpd
3、使用要求安裝文件安裝角色
1️⃣:可以使用ansible-galaxy,根據某一文本文件中的定義來安裝一個角色列表
2️⃣:例如,如果用戶的一個playbook需要安裝特定的角色,需要在項目目錄中創建一個roles/requirements.yml文件來指定所需的角色
3️⃣:src屬性指定角色的來源,本例中為來自Ansible Galaxy的robertdebock.httpd角色
4️⃣:重要:
- 應當在requirements.yml文件中指定角色版本,特別是生產環境中的playbook
- 如果不指定版本,將會獲取角色的最新版本。如果作者對角色做出了更改,並與用戶的playbook不兼容,這可能會造成自動化失敗或其他問題。
5️⃣:若要使用角色文件來安裝角色,可使用-r REQUIREMENTS-FILE選項
[root@localhost project]# cat roles/requirements.yml --- - src: robertdebock.httpd [root@localhost project]# ansible-galaxy install -r roles/requirements.yml -p ./ - downloading role 'httpd', owned by robertdebock - downloading role from https://github.com/robertdebock/ansible-role-httpd/archive/5.3.0.tar.gz - extracting robertdebock.httpd to /root/project/robertdebock.httpd - robertdebock.httpd (5.3.0) was installed successfully [root@localhost project]# ls playbook.yaml robertdebock.httpd roles
6️⃣:用戶可以使用ansible-galaxy來安裝不在Ansible Galaxy中的角色。可以在私有的Git存儲庫或Web服務器上托管自有的專用或內部角色
- 實例:
[root@localhost project]# cat roles/requirements.yml --- - src: geerlingguy.redis - src: geerlingguy.redis version: "1.5.0" name: redis_prod - src: https://gitlab.com/guardianproject-ops/ansible-nginx-acme.git scm: git version: 56e00a54 name: nginx-acme - src: git@gitlab.com:guardianproject-ops/ansible-nginx-acme.git scm: git version: master name: nginx-acme-ssh - src: file:///opt/local/roles/myrole.tar name: myrole
src關鍵字指定Ansible Galaxy角色名稱。如果角色沒有托管在Ansible Galaxy中,則src關鍵字將指明角色的URL。
4、管理下載角色
1️⃣:ansible-galaxy命令也可管理本地的角色,如位於playbook項目的roles目錄中的角色。ansible-galaxy list子命令列出本地找到的角色
[root@localhost ]# ansible-galaxy list # /usr/share/ansible/roles - linux-system-roles.kdump, (unknown version) - linux-system-roles.network, (unknown version) - linux-system-roles.postfix, (unknown version) - linux-system-roles.selinux, (unknown version) - linux-system-roles.storage, (unknown version) - linux-system-roles.timesync, (unknown version) - rhel-system-roles.kdump, (unknown version) - rhel-system-roles.network, (unknown version) - rhel-system-roles.postfix, (unknown version) - rhel-system-roles.selinux, (unknown version) - rhel-system-roles.storage, (unknown version) - rhel-system-roles.timesync, (unknown version) # /etc/ansible/roles - robertdebock.httpd, 5.3.0
2️⃣:可以使用ansible-galaxy remove子命令本地刪除角色。
- 實例:刪除robertdebock.httpd, 5.3.0
[root@localhost roles]# ansible-galaxy remove robertdebock.httpd [root@localhost ~]# ansible-galaxy list # /usr/share/ansible/roles - linux-system-roles.kdump, (unknown version) - linux-system-roles.network, (unknown version) - linux-system-roles.postfix, (unknown version) - linux-system-roles.selinux, (unknown version) - linux-system-roles.storage, (unknown version) - linux-system-roles.timesync, (unknown version) - rhel-system-roles.kdump, (unknown version) - rhel-system-roles.network, (unknown version) - rhel-system-roles.postfix, (unknown version) - rhel-system-roles.selinux, (unknown version) - rhel-system-roles.storage, (unknown version) - rhel-system-roles.timesync, (unknown version) # /etc/ansible/roles
3️⃣:在playbook中使用下載並安裝的角色的方式與任何其他角色都一樣
- 在roles部分中利用其下載的角色名稱來加以引用。如果角色不在項目的roles目錄中,則將檢查roles_path來查看角色是否安裝在了其中一個目錄中,將使用第一個匹配項