ansible的roles使用
1.创建roles文件夹
mkdir roles
2.在roles文件夹里面创建文件夹
cd roles/
mkdir {nginx,uwsgi,redis,mysql}
3.cd nginx
4.mkdir tasks/
5.cd tasks/
6.vi install.yml
- name: install
yun:name=nginx
vi copyfile.yml
- name : copyfile
template:src=nginx.conf dest=/etc/nginx/nginx.conf
vi start.yml
- name: start
service:name=nginx state=started enabled=yes
vi main.yml
- import_tasks: install.yml - import_tasks: copyfile.yml - import_tasks: start.yml
7.在nginx目录下安装nginx yum install -y nginx
8. 创建一个templates目录,和tasks目录同级 mkdir templates
9.cd templates/
10.cp /etc/nginx/nginx.conf . 将nginx配置文件拷贝到templtes文件夹下
ansible 127.0.0.1 -m setup -a "filter=*process*" #查询cpu个数
11.vi nginx.conf
#改变两个参数 worker_processes {{ansible_processor_vapus*2}} #这里设置为cpu的个数或者cpu个数的两倍 events{ worker_connections 102400; #这是连接数,可以调大 } server{ #介绍 listen# 第一个监听ipv4 listen #第二个监听ipv6 }
12.如果不需要传变量需要创建一个files的目录,和tasks在同一级目录下
mkdir files
以下是实例
cd files/
echo "test">>c.txt
cd ..
vi tasks/main.yml
- name :file
copy:dest=/tmp/aaa.txt src=c.txt
13.如果要是传变量的话,在tasks的同级目录下创建一个vars的目录
mkdir vars
vi vars/main.yml
{"user":alex}
vi tasks/main.yml
- name:createuser
user: name={{user}}
14.使用handler同样需要在tasks的同级目录下创建handlers目录
mkdir handlers
vi handlers/main.yml
- name: restartngnx
service: name=nginx state=restarted
vi tasks/main.yml
notify:restart #用来触发handlers
15.在roles平级的目录下
vi nginx.yml
- hosts : web
roles:
- nginx
#web是一个ip组的名称相当于一个ip
16.ansible-playbook --syntax-chek nginx.yml 测试代码没有问题
17.ansible-playbook nginx.yml 启动代码
18. vi roles/nginx/templates/nginx.conf
server{ listen 80; listen [::]:80; #改这两个参数 }
roles - 目录结构清晰 - 可以相互调用 - import_tasks: roles/nginx/tasks/install.yml - 备份方便 解耦 ``` roles/nginx/ ├── files -- 静态文件 │ └── c.txt ├── handlers -- 触发的任务 │ └── main.yml ├── tasks -- 任务(必须的) │ ├── copyfile.yml │ ├── install.yml │ ├── main.yml │ └── start.yml ├── templates -- 动态文件,需要传递参数 │ └── nginx.conf └── vars -- 变量 └── main.yml ``` 查找顺序 - 主文件看到roles,就回去roles目录下面找对应的目录 - 先去tasks目录里面找main.yml文件,如果遇到import_task则加载任务 - 如果遇到了template,则去templates目录里面找文件 - 如果遇到了copy,则去files目录里面找文件 - 如果遇到了变量,则去vars目录里面找main.yml文件 - 如果遇到了notify,则去handlers目录里面找main.yml文件
互相调用(uwsgi调用nginx的安装程序nginx.yml)
1.cd roles/uwsgi/
2.vi tasks/main.yml
- import_tasks:roles/nginx/tasks/install.yml
3.在roles同级目录下
vi uwsgi.yml
-hosts:web roles: - uwsgi #web是一个ip组的名称相当于一个ip
4.ansible-playbook uwsgi.yml 启动文件
这样就调用成功