roles的用法


回顧

redirect 臨時重定向
ad-hoc:臨時執行
playbook:使用yml語法記錄了多條ad-hoc
roles:解耦

site里面寫了,依賴也寫了,不會執行兩遍

client 客戶端
server 服務端

yum:
	1.路徑(本地)
	2.包名(鏡像倉庫)
	3.url(網站中的)
	
cat /var/lib/nfs/etab  可以查看nfs配置文件是否生效(該結果只與配置文件是否生效有關)
防火牆如果是開着的話,那么在web上是不能看掛載點的(不能showmount -e),無論是否可以掛載
zabbix:
https://www.zabbix.com/documentation/4.0/manual/installation/install_from_packages/rhel_centos
jumpserver官網
https://docs.jumpserver.org/

Ansible Roles基本概述

  1. 角色(roles)是ansible自1.2版本開始引入的新特性,用於層次性,結構化地組織playbook。
  2. roles:不管是Ansible還是saltstack,都可以使用roles

roles目錄結構使用ansible-galaxy創建

[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 roles]# ansible-galaxy init nfs	#nfs目錄位置可以隨意創建
[root@m01 roles]# tree nfs
nfs/                #項目名稱
├── defaults        #低優先級變量
│   └── main.yml
├── files           #存放文件,存放由copy或script·解壓等模塊調用的文件
├── handlers        #觸發器文件
│   └── main.yml
├── meta            #依賴關系文件
│   └── main.yml
├── README.md		#項目目錄用法
├── tasks           #工作任務文件,使用include的時候不需要指明文件的路徑
│   └── main.yml
├── templates       #jinja2模板文件(Python變量)
├── tests           #測試文件(與-C類似)
│   ├── inventory	#測試用的主機清單
│   └── test.yml
└── vars            #高優先級變量文件
    └── main.yml

[root@m01 roles]# vim site.yml

1.項目目錄里,第一個加載的是meta目錄,查看該項目是否有依賴,有的話先執行該項目的依賴,沒有的話
2.執行tasks目錄下的main.yml文件,如果有copy模塊
3.執行files目錄中找src指定的文件名(#不需要指明路徑)
4.執行tasks中的template模塊,去找template目錄找src指定的文件名(#不需要指明路徑)
5.如果有變量,去找vars目錄main.yml
			去找defaults目錄下的main.yml
6.如果有觸發器,在所有的tasks執行完之后,去找handlers目錄下的main.yml

Ansible Roles依賴關系

  1. ansible 1.3及其以后的版本才支持
  2. roles允許你再使用roles時自動引入其他的roles。role依賴關系存儲在roles目錄中meta/main.yml文件中。

例如:推送wordpress並解壓,前提條件,必須要安裝nginx和php,把服務跑起來,才能運行wordpress的頁面,此時我們就可以在wordpress的roles中定義依賴nginx和php的roles

[root@m01 roles]# vim /etc/ansible/roles/wordpress/meta/main.yml
dependencies:
  - { role: nginx }
  - { role: php }
  
  #nginx·php,項目名稱,先執行依賴,再執行該項目

使用Ansible Roles對rsync劇本解耦

1.使用ansible-galaxy創建'任務角色'
[root@m01 rsync]# cd /etc/ansible/roles/
[root@m01 roles]# ansible-galaxy init rsync
- rsync was created successfully
[root@m01 roles]# tree
.
└── rsync
    ├── defaults	---------------------------- 5.低級變量
    │   └── main.yml
    ├── files	-------------------- 3.src指定文件名(不含j2變量)
    ├── handlers	------------------------------------ 6.觸發器
    │   └── main.yml
    ├── meta	--------- 1.項目的依賴目錄
    │   └── main.yml	--如果有的話,先執行
    ├── README.md
    ├── tasks	---------------- 2.任務(include include_tasks)
    │   └── main.yml
    ├── templates	------------------------ 4.python變量,j2模板
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars	--------------------------------- 5.高級變量
        └── main.yml
        
#以組名為文件名        
mkdir /etc/ansible/roles/group_vars		
2.編輯'主機清單'(選做)
[root@m01 roles]# vim /etc/ansible/roles/hosts 
...
3.編輯site.yml,指定roles(可以在這里指定變量),'site.yml是入口文件'(名字隨意)。可以寫多個site,site和tasks的關系類似於包含
[root@m01 roles]# vim /etc/ansible/roles/site.yml 
1>列表
- hosts: all
  vars:
    - user_group: www
    - uid_gid: 666
  roles:
    - rsync  #指定的這個角色名是galaxy創建的目錄名,可以指定多個

2>判斷
- hosts: all
  roles:
    - role: rsync
      when: ansible_fqdn is match 'backup*'

3>字典
- hosts: all
  roles:
    - { role: rsync , when: ansible_fqdn == 'backup' }
4>字典+變量
  roles:
  - { role: nginx, http_port: 8080, web_root: /data/ }
5>為roles設置觸發條件
- hosts: all
  roles:
    - { role: some_role, when: "ansible_os_family == 'RedHat'" }
6>為roles設置標簽
- hosts: all
  roles:
    - { role: nfs, tags: ["bar", "baz"],when: ansible_fqdn is match 'web*' }
    - { role: nfs, tags: ["bar", "baz"],when: ansible_fqdn is match 'nfs*' }   
      
4.編輯rsync角色的tasks'任務' (不要寫路徑,路徑無效)
#不要用include_tasks
#直接寫注釋·模塊·動作
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/install_rsync.yml
- name: install rsync
  yum:
    name: rsync
    state: present
    
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/config_rsync.yml
- name: config rsync
  template:
    src: rsyncd.j2
    dest: /etc/rsyncd.conf
  notify: restart rsyncd
  
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/start_rsync.yml
- name: start rsyncd
  service: rsyncd
    state: started
    
[root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/main.yml 
- include: install_rsync.yml
- include: config_rsync.yml
- include: start_rsync.yml

5.編輯rsync角色的'handlers'
[root@m01 roles]# vim /etc/ansible/roles/rsync/handlers/main.yml 
- name: restart rsyncd
  service:
    name: rsyncd
    state: restarted
    
6.編輯rsync角色的'files目錄'
[root@m01 roles]# vim /etc/ansible/roles/rsync/files/

7.編輯rsync角色的'template目錄'
[root@m01 roles]# vim /etc/ansible/roles/rsync/template/rsyncd.j2

8.編輯handlers
- name: restart rsyncd
  service:
    name: rcyncd
    state: restarted

9.編輯'變量文件'(vars defaults)
[root@m01 roles]# vim /etc/ansible/roles/rsync/defaults
use_dir_mk: backup

10.'執行roles'
[root@m01 roles]# ansible-playbook rsync site.yml 

測試yml語法是否正確
[root@ansible roles]# ansible-playbook -C site.yml 

Ansible-galaxy命令格式

ansible-galaxy [init|info|install|list|remove] [--help] [options] ...

init: 初始化本地roles配置
info: 指定roles詳細信息
install: 下載並安裝Galaxy上指定的roles
list: 列出本地已下載的roles
remove: 刪除本地已下載的roles

#查看選項幫助
ansible-galaxy init -–help

ansible-vault

[root@m01 ~]# rpm -ql ansible |egrep -v 'share|lib'
/etc/ansible/ansible.cfg		#配置文件
/etc/ansible/hosts				#主機清單
/etc/ansible/roles				#解耦目錄
/usr/bin/ansible			ad-hoc的使用命令
/usr/bin/ansible-2
/usr/bin/ansible-2.7
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-console-2
/usr/bin/ansible-console-2.7
/usr/bin/ansible-doc			#查看幫助
/usr/bin/ansible-doc-2
/usr/bin/ansible-doc-2.7
/usr/bin/ansible-galaxy			#roles目錄的創建和刪除
/usr/bin/ansible-galaxy-2
/usr/bin/ansible-galaxy-2.7
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook		#yml文件的執行命令
/usr/bin/ansible-playbook-2
/usr/bin/ansible-playbook-2.7
/usr/bin/ansible-pull
/usr/bin/ansible-pull-2
/usr/bin/ansible-pull-2.7
/usr/bin/ansible-test
/usr/bin/ansible-vault			#加密命令
/usr/bin/ansible-vault-2
/usr/bin/ansible-vault-2.7

[root@m01 tasks]# ansible-vault --help
usage: ansible-vault [-h] [--version] [-v]
                     {create,decrypt,edit,view,encrypt,encrypt_string,rekey}

1.使用'ansible-vault'加密文件或目錄
[root@m01 tasks]# ansible-vault encrypt main.yml 
2.使用'view'查看加密文件的內容
[root@m01 tasks]# ansible-vault view main.yml 
Vault password: 
---
# tasks file for rsync
- include: install.yml
- include: config_rsync.yml
3.使用'edit'編輯加密文件
[root@m01 tasks]# ansible-vault edit main.yml 
4.使用'rekey'更換加密密碼
[root@m01 tasks]# ansible-vault rekey main.yml 
5.執行加密的playbook
ansible-playbook include.yml  --vault-password-file=ansible.pass
6.創建一個新的加密的目錄或文件
ansible-vault create hello.yml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM