• ansible-roles


    创建roles文件夹,并在文件夹下创建服务文件夹

    [root@node1 opt]# mkdir roles
    [root@node1 opt]# cd roles/
    [root@node1 roles]#  mkdir {nginx,uwsgi,redis,mariadb}
    [root@node1 roles]# ll
    total 0
    drwxr-xr-x 2 root root 6 Apr 10 23:00 mariadb
    drwxr-xr-x 2 root root 6 Apr 10 23:00 nginx
    drwxr-xr-x 2 root root 6 Apr 10 23:00 redis
    drwxr-xr-x 2 root root 6 Apr 10 23:00 uwsgi

    进入服务目录,创建文件夹

    [root@localhost roles]# cd nginx/
    [root@localhost nginx]# mkdir tasks   #必须要有tasks目录,任务目录

    在tasks中创建yml文件,安装nginx

    [root@node1 tasks]# cat install.yml 
    - name: installnginx
      yum: name=nginx

    创建copyfile.yml,用来复制文件

    [root@node1 tasks]# cat copyfile.yml 
    - name: copyfile
      template: dest=/etc/nginx/nginx.conf src=nginx.conf

    创建启动文件

    [root@node1 tasks]# cat start.yml 
    - name: start
      service: name=nginx state=started

    将三个目录关联起来,创建main.yml文件

    [root@node1 tasks]# cat main.yml 
    - import_tasks: install.yml     #导入文件,注意顺序
    - import_tasks: copyfile.yml
    - import_tasks: start.yml

    在服务目录中创建templates,要与tasks目录同级

    [root@node1 nginx]# mkdir templates
    [root@node1 nginx]# ll
    total 0
    drwxr-xr-x 2 root root 74 Apr 10 23:15 tasks
    drwxr-xr-x 2 root root  6 Apr 10 23:18 templates

    将nginx.conf文件copy到templates目录下

    [root@node1 nginx]# cd templates/
    [root@node1 templates]# cp /etc/nginx/nginx.conf .

    更改配置文件

    [root@node1 templates]# cat nginx.conf 
    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user nginx; #启动用户
    worker_processes {{ansible_processor_vcpus}}; #默认工作进程,一般设置为CPU的个数或CPU个数的两倍
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    include /usr/share/nginx/modules/*.conf;
    
    events {
        worker_connections 102400; #每一个进程可以提供多少个线程
    }
    
    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 2048;
    
        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}} default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    
    # Settings for a TLS enabled server.
    #
    #    server {
    #        listen       443 ssl http2 default_server;
    #        listen       [::]:443 ssl http2 default_server;
    #        server_name  _;
    #        root         /usr/share/nginx/html;
    #
    #        ssl_certificate "/etc/pki/nginx/server.crt";
    #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
    #        ssl_session_cache shared:SSL:1m;
    #        ssl_session_timeout  10m;
    #        ssl_ciphers HIGH:!aNULL:!MD5;
    #        ssl_prefer_server_ciphers on;
    #
    #        # Load configuration files for the default server block.
    #        include /etc/nginx/default.d/*.conf;
    #
    #        location / {
    #        }
    #
    #        error_page 404 /404.html;
    #            location = /40x.html {
    #        }
    #
    #        error_page 500 502 503 504 /50x.html;
    #            location = /50x.html {
    #        }
    #    }
    
    }
    nginx.conf

    查看CPU的个数

    [root@node1 opt]# ansible localhost -m setup -a "filter=*vcpus*"
    localhost | SUCCESS => {
        "ansible_facts": {
            "ansible_processor_vcpus": 1  #cpu的个数
        }, 
        "changed": false
    }

    在与roles同级的目录下创建启动文件

    [root@node1 data]# cat nginx.yml 
    - hosts: web
      remote_user: root
      roles:
      - nginx

    检查语法并执行

    [root@node1 data]# ansible-playbook --syntax-check nginx.yml
    [root@node1 data]# ansible-playbook  nginx.yml

    创建handlers,设置触发任务

    [root@node1 nginx]# ll
    total 0
    drwxr-xr-x 2 root root 21 Apr 10 23:55 handlers
    drwxr-xr-x 2 root root 74 Apr 10 23:15 tasks
    drwxr-xr-x 2 root root 23 Apr 10 23:37 templates
    
    [root@node1 nginx]# mkdir handlers
    [root@node1 nginx]# cd handlers/
    [root@node1 handlers]# vim main.yml
    
    [root@node1 handlers]# cat main.yml 
    - name : restart
      service: name=nginx state=restarted

    更改nginx的copyfile.yml文件

    [root@node1 handlers]# cd ../
    [root@node1 nginx]#  cd tasks/
    [root@node1 tasks]# cat copyfile.yml 
    - name: copyfile
      template: dest=/etc/nginx/nginx.conf src=nginx.conf
      tags: copy
      notify: restart

    执行nginx.yml文件

    [root@node1 templates]# ansible-playbook -t copy nginx.yml

    创建变量目录vars

    [root@node1 nginx]# mkdir vars
    [root@node1 nginx]# cd vars/
    [root@node1 vars]# vim main.yml
    [root@node1 vars]# cat main.yml 
    {port: 90}  #定义了一个端口为90的变量

    在模板文件中使用

    [root@node1 nginx]# vim templates/nginx.conf

    server { listen {{port}} default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html;

    执行

    [root@node1 data]# ansible-playbook -t copy nginx.yml 

    查看端口

    [root@node1 opt]# netstat -tunlp 

    创建静态配置文件files

    [root@node1 nginx]# mkdir files

    将静态文件copy到files目录下

    [root@node1 files]# cp /etc/fstab .

    配置静态文件

    [root@node1 tasks]# cat main.yml 
    - import_tasks: install.yml
    - import_tasks: copyfile.yml
    - import_tasks: start.yml
    - name: fstab
      copy: dest=/tmp/test.txt src=fstab
    tags: fstab

    如果机器的版本不一致,既有centos7也有centos6

    copy并更改nginx.conf文件

    [root@localhost templates]# cat centos6.conf 
    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user nginx; #启动用户
    worker_processes {{ansible_processor_vcpus}}; #默认工作进程,一般设置为CPU的个数或CPU个数的两倍
    error_log /var/log/nginx/error.log;
    pid /var/run/nginx.pid; #centos6 中nginx.pid默认目录
    
    # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    include /usr/share/nginx/modules/*.conf;
    
    events {
        worker_connections 102400; #每一个进程可以提供多少个线程
    }
    
    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 2048;
    
        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       80; #centos6更改,只写端口
            server_name  localhosts; #centos6更改server_name
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    
    # Settings for a TLS enabled server.
    #
    #    server {
    #        listen       443 ssl http2 default_server;
    #        listen       [::]:443 ssl http2 default_server;
    #        server_name  _;
    #        root         /usr/share/nginx/html;
    #
    #        ssl_certificate "/etc/pki/nginx/server.crt";
    #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
    #        ssl_session_cache shared:SSL:1m;
    #        ssl_session_timeout  10m;
    #        ssl_ciphers HIGH:!aNULL:!MD5;
    #        ssl_prefer_server_ciphers on;
    #
    #        # Load configuration files for the default server block.
    #        include /etc/nginx/default.d/*.conf;
    #
    #        location / {
    #        }
    #
    #        error_page 404 /404.html;
    #            location = /40x.html {
    #        }
    #
    #        error_page 500 502 503 504 /50x.html;
    #            location = /50x.html {
    #        }
    #    }
    
    }
    centos6.conf
    [root@node1 templates]# ll
    total 8
    -rw-r--r-- 1 root root 2646 Apr 11 00:30 centos6.conf
    -rw-r--r-- 1 root root 2619 Apr 11 00:20 nginx.conf

    更改copyfile.yml

    [root@localhost tasks]# cat copyfile.yml 
    - name: copyfile
      template: dest=/etc/nginx/nginx.conf src=nginx.conf
      tags: copy
      notify: restart
      when: ansible_distribution_major_version=="7" 
    - name: centos6
      template: dest=/etc/nginx/nginx.conf src=centos6.conf
      tags: centos6
      notify: restart
      when: ansible_distribution_major_version=="6"

    执行nginx.yml文件

    [root@node1 templates]# ansible-playbook -t copy,contos6 nginx.yml

    查看版本号

    [root@node1 opt]# ansible localhost -m setup -a "filter=*ansible_distribution_major_version*"
    localhost | SUCCESS => {
        "ansible_facts": {
            "ansible_distribution_major_version": "7"  #版本号
        }, 
        "changed": false
    }

     目录结构

    nginx/
    ├── files  存放静态的文件
    │   └── fstab
    ├── handlers  存放需要触发的任务,里面必须main.yml文件
    │   └── main.yml
    ├── tasks   存放的执行的任务 ,里面必须main.yml文件
    │   ├── copyfile.yml
    │   ├── install.yml
    │   ├── main.yml
    │   └── start.yml
    ├── templates 存放的模板文件
    │   ├── centos6.conf
    │   └── nginx.conf
    └── vars 存放的是参数,里面必须main.yml文件
        └── main.yml

    入口文件

    [root@node1 data]# cat nginx.yml 
    - hosts: web
      remote_user: root
      roles:
      - nginx

    查找顺序

    • 先查找当前目录下roles目录里面指定的对应文件夹

    • 找tasks目录下面的main.yml文件,如果import_tasks 就导入

    • 如果遇到了templates,去找templates文件夹下面的对应文件

    • 如果遇到了notify,去找handlers里面的main.yml文件

    • 如果遇到了copy,去找files里面的对应文件

    • 如果看到了变量,如果是setup收集的变量就去setup,如果不是就去vars里面的main.yml文件查找

  • 相关阅读:
    Retrieve Excel Workbook Sheet Names
    总股本和流通股本
    Net序列化与数据压缩类
    HTTP Compression 速用方法
    市净率
    兼容FF,IE,Chrome的js离开或刷新页面检测
    【转】不能执行已释放的Script 代码
    三款在线css3样式生成工具
    不固定个数的子元素自适应居中
    收集几个浏览器好用插件工具
  • 原文地址:https://www.cnblogs.com/wanglan/p/10706358.html
Copyright © 2020-2023  润新知