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    启动文件   

 

这样就调用成功

 

posted @ 2019-05-08 20:23  QV  阅读(304)  评论(0编辑  收藏  举报