Contents
角色的安装获取
rhel-system-roles
安装红帽工程师写的系统相关角色
yum -y install rhel-system-roles
查看有哪些角色
ls /usr/share/ansible/roles/
从社区获取角色
从社区获取角色https://galaxy.ansible.com/
命令行使用galaxy角色
搜索角色
可以根据--author(用户)、--platforms(平台)、--galaxy-tags(标记)进行搜索角色。
1.根据用户名搜索角色
ansible-galaxy search –author geerlingguy
2.根据平台搜索角色
EL是企业Linux平台
ansible-galaxy search –platforms EL
查看角色信息
1.查看角色具体信息
ansible-galaxy info geerlingguy.redis
2.列出所有角色
只会列出配置文件中指定位置的角色
roles_path={{ ANSIBLE_HOME ~ "/roles:/usr/share/ansible/roles:/etc/ansible/roles" }}
ansible-galaxy list
下载删除角色
1.下载单个角色
默认下载到~/.ansible/roles目录下,–ignore-errors参数表示忽略错误下载。
ansible-galaxy install geerlingguy.redis --ignore-errors
2.指定下载的路径
使用-p参数指定下载路径。
3.从指定文件批量下载角色
通过-r指定下载文件。
下载角色以-src指定
- src: geerlingguy.redis
- src: geerlingguy.apache
4.删除角色
默认删除~/.ansible/roles下的角色,要删除其他位置的角色需要-p指定
ansible-galaxy remove geerlingguy.redis -p ./
角色的四种用法
- 在play级别使用角色选项:这是在play中使用角色的经典方式。
- 在task别使用 include_role:您可以使用 include_role 在戏剧的任务部分中的任何位置动态重用角色。
- 在task级别使用 import_role:您可以使用 import_role 在戏剧的任务部分中的任何位置静态地重用角色。
- 作为另一个角色的依赖项(使用 meta/main.yml 中的依赖项关键字)。
自定义角色
查找角色目录优先级
- playbook文件会在同级目录中寻找与调用的角色同名的roles。
- 最先从当前的playbook所在的同级目录下的roles子目录里查找角色。
- 再按照配置文件中的roles_path指定的角色目录查找,可以使用冒号写多个路径。
roles_path={{ ANSIBLE_HOME ~ "/roles:/usr/share/ansible/roles:/etc/ansible/roles" }}
初始化自定义的角色myrole
ansible-galaxy init myrole
查看角色目录结构
[root@eab5aec2df6c roles]# tree myrole/
myrole/
├── README.md
├── defaults 该目录存放此Role的设定默认变量,在该目录下,也必须存在一个main.yml文件。
│ └── main.yml
├── files 用来存放copy模块的文件,或者是script模块的脚本文件。
├── handlers 该目录下用于存放Role中触发条件后执行的动作,在该目录下,也必须存在一个main.yml文件。
│ └── main.yml
├── meta 该目录通常存放此Role的特殊设定及其依赖关系,在该目录下,也必须存在一个main.yml文件。
│ └── main.yml
├── tasks 用于存放一系列任务文件,在该目录下,必须存在一个main.yml文件,该文件会通过include调用其他的文件。
│ └── main.yml
├── templates 此目录下用于存放此Role需要使用的jinjia2模板文件。
├── tests
│ ├── inventory
│ └── test.yml
└── vars 该目录下存放一系列的变量,在该目录下,必须存在一个main.yml文件,该文件会通过include调用其他的文件。
└── main.yml
[root@eab5aec2df6c roles]# cat myrole/vars/main.yml
---
# vars file for myrole
PORT: 8088 #指定nginx监听的端口
USERNAME: www #指定nginx运行用户
GROUPNAME: www #指定nginx运行组
[root@eab5aec2df6c roles]# cat myrole/tasks/main.yml
---
# tasks file for myrole
- import_tasks: group.yml
- import_tasks: user.yml
- import_tasks: install.yml
- import_tasks: config.yml
- import_tasks: start.yml
[root@eab5aec2df6c roles]# cat myrole/tasks/group.yml
- name: Create a Startup Group
group: name={{ GROUPNAME }} gid=60 system=yes
[root@eab5aec2df6c roles]# cat myrole/tasks/user.yml
- name: Create Startup Users
user: name={{ USERNAME }} uid=60 system=yes shell=/sbin/nologin
[root@eab5aec2df6c roles]# cat myrole/tasks/install.yml
- name: Install Package Nginx
yum: name=nginx state=installed
[root@eab5aec2df6c roles]# cat myrole/tasks/config.yml
- name: Copy Nginx Template File
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: Restart Nginx
[root@eab5aec2df6c roles]# cat myrole/tasks/start.yml
- name: Start Nginx Service
service: name=httpd state=started enabled=yes
[root@eab5aec2df6c roles]# cat myrole/handlers/main.yml
---
# handlers file for myrole
- name: Restart Nginx
service: name=nginx state=restarted
[root@eab5aec2df6c roles]# cat myrole/templates/nginx.conf.j2
user {{ USERNAME }} {{ GROUPNAME }};
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen {{ PORT }};
listen [::]:{{ PORT }};
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
[root@eab5aec2df6c palybook]# cat roletest.yml
---
- hosts: centos70
remote_user: root
roles:
- role: myrole #指定角色名称
ansible-playbook roletest.yml
一些特殊用法
依赖角色使用
role如果依赖其他role,则必须在meta/main.yml中定义依赖,运行之前先运行依赖角色
dependencies: [dep,dep2]
或者
dependencies:
- { role: nginx }
- { role: php-fpm }
跨项目调用文件
src:roles/nginx/files/index.html #跨项目调用路径要写roles的名称
dest: /var/www/nginx/html/
使用其他角色的task
- name: include apt tasks
include_role:
name: package_manager_bootstrap
tasks_from: apt.yml
when: ansible_facts['os_family'] == 'Debian'
使用标签实现playbook角色的调用
roles:
- {role: nginx,tags: ["nginx","test"]}
- {role: mysql,tags: db}
ansible-playbook --tags nginx test_roles.yaml
根据条件导入角色task
# roles/example/tasks/main.yml
- name: Install the correct web server for RHEL
import_tasks: redhat.yml
when: ansible_facts['os_family']|lower == 'redhat'
- name: Install the correct web server for Debian
import_tasks: debian.yml
when: ansible_facts['os_family']|lower == 'debian'
# roles/example/tasks/redhat.yml
- name: Install web server
ansible.builtin.yum:
name: "httpd"
state: present
# roles/example/tasks/debian.yml
- name: Install web server
ansible.builtin.apt:
name: "apache2"
state: present
参考
Ansible进阶2——角色管理_ansible 使用进阶-CSDN博客