目錄將多種不同的tasks的檔案集中儲存在某個目錄下,則該目錄就是角色,角色一般存放在/etc/ansible/roles/目錄下,可通過ansible的配置檔案來調整預設的角色目錄,/etc/ansible/roles/目錄下有很多子目錄,其中每乙個子目錄對應乙個角色,每個角色也有自己的目錄結構,如圖:
每個角色的定義,以特定的層級目錄結構進行組織。比如:
上述目錄中,tasks、handlers、vars、meta、default至少應該包含乙個main.yaml檔案,該目錄下也可由其他.yaml檔案,但是需要在main.yml檔案中用include指令將其他.yml檔案包含起來。
$ mkdir roles
#建立乙個目錄,名稱為roles。官方推薦在/etc/ansible/roles/這個目錄,不過在**都是可以的
$ mkdir roles/nginx
$ cd roles/nginx/
$ mkdir tasks templates
$ cd tasks/
$ cat user.yaml
- name: create user
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
$ cat group.yaml
- name: create group
group: name=nginx gid=80
$ cat yum.yaml
- name: install package
yum: name=nginx
$ cat templ.yaml
- name: copy conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
$ cat stservice.yaml
- name: start service
service: name=nginx state=started enabled=yes
$ cat main.yaml
- include: group.yaml
- include: user.yaml
- include: yum.yaml
- include: templ.yaml
- include: stservice.yaml
#如果需要呼叫別的角色的yaml檔案,也可以這樣寫,比如:- include:roles/httpd/tasks/copyfile.yaml
注意:copyfiile.yaml檔案中的源路徑必須是絕對路徑
$ ls
nginx.conf.j2
#該檔案就是nginx的配置檔案改名了而已
$ cd ../../../
$ cat nginx.yaml
- hosts: webservers
remote_user: root
roles:
- role: nginx
#定義了多個角色,也可在接著寫,每行呼叫乙個角色
#也可以定義tags標籤,比如:- 或- 都可以
$ ls
nginx.yaml roles
#確保呼叫nginx的yaml檔案是和roles是在同一目錄下的
$ tree
.├── nginx.yaml
└── roles
└── nginx
├── tasks
│ ├── group.yaml
│ ├── main.yaml
│ ├── reservice.yaml
│ ├── stservice.yaml
│ ├── templ.yaml
│ ├── user.yaml
│ └── yum.yaml
└── templates
└── nginx.conf.j2
#確保目錄的層次效果是這樣的
$ ansible-playbook nginx.yaml
#如果定義了標籤,就可對標籤進行操作(比如:web或httpd)
$ ansible webservers -m shell -a 'ss -lntp | grep nginx'
#確認被控端的主機nginx已經啟動
乙個簡單的nginx的roles已經編寫完成了!
#空檔案用於測試
#httpd的配置檔案
#目錄結構
#確保與roles目錄在同一目錄下
//根據配置檔案中修改的內容自行進行修改
Ansible之roles(角色)詳解
角色 roles 是ansible自1.2版本開始引入的新特性,用於層次性,結構化地組織playbook。roles能夠根據層次型結構自動裝載變數檔案 tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單的說,roles就是通過分別將變數 檔案...
Ansible高階之roles詳解
迭 法 with items 迭代 當需要重複性執行的任務時,可以使用迭代機制 對迭代選項的引用,固定變數名為 item 要在task中使用with items給定要迭代的元素列表 列 式 字串 浮點使用字串 host webservs remote user root tasks name cre...
ansible程式roles角色
劇本編寫完問題 1.目錄結構不夠規範 ok 2.編寫好的任務如何重複呼叫 3.服務端配置檔案改動,客戶端引數資訊也自動變化 4.彙總劇本中沒有顯示主機角色資訊 5.乙個劇本內容資訊過多,不容易進行閱讀,如何進行拆分 ok 第乙個歷程 規範目錄結構 cd etc ansible roles mkdir...