设为首页 收藏本站
查看: 1098|回复: 0

[经验分享] ansible 角色定义及调用(nginx)

[复制链接]

尚未签到

发表于 2018-7-29 09:29:19 | 显示全部楼层 |阅读模式
  Roles的介绍
  Roles是ansible自1.2版本引入的新特性,用于层次性,结构化地组织playbook,roles能够根据层次型结构自动自动装在变量文件、tasks以及handlers等。
  
  创建roles的步骤

  •   创建以roles命名的目录:
  •   在roles目录中分别创建以各角色名称命名的目录,如webservers等:
  •   在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录:用不到的目录可以创建为空目录,也可以不创建
  •   在playbook文件中,调用各角色
  roles内各目录中可用的文件

  •   tasks目录:至少创建一个名为main.yml的文件,其定义了此角色的任务列表:此文件可以使用include包含其他的位于此目录中的tasks文件
  •   files目录:存放由copy或者script等模块调用的文件
  •   templates目录:templates模块会自动在此目录中寻找模板文件
  •   handlers目录:此目录中应当包含一个main
  •   yml文件:用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中
  •   vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量
  •   meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系:ansible 1.3及其以后的版本才支持
  •   default目录:为当前角色定义默认变量时使用此目录,应该包含一个main.yml文件
  实验环境:
  ansible:10.0.0.128
  client :10.0.0.131
  执行
  1.在服务器生成免密钥文件,推送到客户端
  [root@ansible ~]# ssh-keygen
  [root@ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.131
  2.安装ansible
  [root@ansible ~]# yum install -y ansible
  3.到/etc/ansible 有个可以自定义roles的目录
  [root@ansible ~]# cd /etc/ansible/
  [root@ansible ansible]# ls
  ansible.cfg  hosts  nginx.yaml  roles
  4.定义要执行的角色路径
  [root@ansible ~]# cat /etc/ansible/nginx.yaml
  - hosts: 10.0.0.131
  remote_user: root
  roles:
  - nginx
  5.定义掩码安装nginx,在roles目录下的目录及文件都要自己创建
  [root@ansible roles]# ls
  nginx
  [root@ansible roles]# cd nginx
  [root@ansible nginx]# ls
  files  handlers  tasks  templates  vars
  [root@ansible ansible]# cd roles/
  [root@ansible roles]# tree
  .
  └── nginx
  ├── files
  │   └── nginx-1.12.0.tar.gz
  ├── handlers
  │   └── main.yml
  ├── tasks
  │   └── main.yml
  ├── templates
  │   └── nginx.conf
  └── vars
  └── main.yml
  6 directories, 5 files
  6.进入tasks目录创建任务
  [root@ansible nginx]# cat tasks/main.yml
- name: copy nginx packup to remote host  
copy: src=nginx-1.12.0.tar.gz dest=/usr/local/src/nginx-1.12.0.tar.gz
  
tags: cppkg
  
- name: tar nginx
  
shell: cd /usr/local/src/; tar -xf nginx-1.12.0.tar.gz
  
- name: install packger
  
yum: name={{ item }} state=latest
  
with_items:
  
   - openssl-devel
  
   - pcre-devel
  
   - gcc
  
- name: useradd
  
shell: useradd nginx -s /sbin/nologin
  
- name: install nginx
  
shell: cd /usr/local/src/nginx-1.12.0;./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre;make && make install
  
- name: copy conf file nginx.conf
  
template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
  
notify: start nginx
  7.存放nginx压缩包目录
  [root@ansible nginx]# ls files/
  nginx-1.12.0.tar.gz    ##对应tasks第二行
  8.template这一行对应的是template这个目录和主服务端定义的变量
  [root@ansible nginx]# cat templates/nginx.conf
#user  nobody;  
worker_processes
  
{{ ansible_processor_vcpus }};
  
#pid        logs/nginx.pid;
  
events {
  
    worker_connections  65532;
  
}
  
http {
  
    include       mime.types;
  
    default_type  application/octet-stream;
  
    sendfile        on;
  
    #tcp_nopush     on;
  
    #keepalive_timeout  0;
  
    keepalive_timeout  65;
  
    #gzip  on;
  
    server {
  

  
     listen       {{ ngxport }};
  
        server_name  localhost;
  
        #charset koi8-r;
  
        #access_log  logs/host.access.log  main;
  
        location / {
  
            root   /web;
  
            index  index.html index.htm;
  
        }
  
        #error_page  404              /404.html;
  
        # redirect server error pages to the static page /50x.html
  
        #
  
        error_page   500 502 503 504  /50x.html;
  
        location = /50x.html {
  
            root   html;
  
        }
  
        #location ~ \.php$ {
  
        #    root           html;
  
        #    fastcgi_pass   127.0.0.1:9000;
  
        #    fastcgi_index  index.php;
  
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  
        #    include        fastcgi_params;
  
        #}
  
    }
  
    include vhosts/*.conf;
  
}
  9.查看我们定义的变量,在vars目录下
  [root@ansible nginx]# cat vars/main.yml
  ngxport: "8080"
  10.编辑触发器
  [root@ansible nginx]# cat handlers/main.yml
  - name: start nginx
  shell: /usr/local/nginx/sbin/nginx
  11.开始执行
  [root@ansible nginx]# ansible-playbook -C /etc/ansible/nginx.yaml(测试)
  [root@ansible nginx]# ansible-playbook  /etc/ansible/nginx.yaml
  PLAY [10.0.0.131] *************************************************************
  GATHERING FACTS ***************************************************************
  ok: [10.0.0.131]
  TASK: [nginx | copy nginx packup to remote host] ******************************
  changed: [10.0.0.131]
  TASK: [nginx | tar nginx] *****************************************************
  changed: [10.0.0.131]
  TASK: [nginx | install packger] ***********************************************
  ok: [10.0.0.131] => (item=openssl-devel,pcre-devel,gcc)
  TASK: [nginx | useradd] *******************************************************
  changed: [10.0.0.131]
  TASK: [nginx | install nginx] *************************************************
  changed: [10.0.0.131]
  TASK: [nginx | copy conf file nginx.conf] *************************************
  changed: [10.0.0.131]
  NOTIFIED: [nginx | start nginx] ***********************************************
  changed: [10.0.0.131]
  PLAY RECAP ********************************************************************
  10.0.0.131                 : ok=8    changed=6    unreachable=0    failed=0
  12.查看client客户端nginx服务已经启动
  [root@zxb4 ~]# ps -ef |grep nginx
root      34655      1  0 02:13 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx  
nginx     34656  34655  1 02:13 ?        00:00:01 nginx: worker process
  
root      34660  28130  0 02:16 pts/1    00:00:00 grep --color=auto nginx
  [root@zxb4 ~]# netstat -tulnp
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
  tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      34655/nginx: master
  ####附加
  假如我们经常要增加nginx站点,直接写好模板推送到vhos目录:
  [root@ansible templates]# cat temp_server.conf
  server
  {
  listen80;
  server_name` server_name `;
  indexindex.php index.html;
  root `root_dir `;
  }
  ##在vars定义变量:
  [root@ansible vars]# cat main.yml
  ngxport:"8080"
  server_name:"www.xxx.com"
  root_dir:"/web"
  重写tasks步骤:
  [root@ansible tasks]# cat main.yml
  - name:copy conf file nginx.conf          # 调用templates模块
  template: src=temp_server.conf dest=/usr/local/nginx/conf/vhosts/`server_name `.conf
  tags: ngxconf

  notify:>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-542847-1-1.html 上篇帖子: Ansible问题汇总 下篇帖子: ansible-12092929
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表