ansible角色调用

  • 本篇博客仅供学习,没有实际项目意义,仅供学习之用
  • 实验目的:
    配置中心服务器自动配置两台机器分别部署为nginx的反响为例服务和nginx的web服务。
  • 配置密钥连接:

    进入用户的ssh密钥路径
    cd /root/.ssh/
    生成公私钥
    ssh-keygen -t rsa -b 4096
    将公钥发送给远程目标主机
    ssh-copy-id -i id_rsa.pub [email protected]
    测试连接
    ssh [email protected]

    定义角色的路径:默认位置
    [[email protected] ~]# less /etc/ansible/ansible.cfg

    # additional paths to search for roles in, colon separated
    #roles_path    = /etc/ansible/roles

    创建相应的目录:

    ~]# cd /etc/ansible/roles/
    [[email protected] roles]#  mkdir -pv ./nginx/{files,templates,tasks,handlers,vars,meta,dafault}

    目录结构

    [[email protected] roles]# tree
    ├── memcached
                ├── dafault
                ├── files
                ├── handlers
                ├── meta
                ├── tasks
                ├── templates
                └── vars

    配置nginx思路:
    安装程序包,复制配置文件,启动服务。

    编辑/nginx/tasks/main.yml文件(设置任务列表)

    [[email protected] nginx]# vim tasks/main.yml
    - name: install epel-release package
        yum: name=epel-release state=installed
    - name: install nginx package
        yum: name=nginx state=installed
            #准备目录路径
    - name: create doc root
        file: path={{ docroot }} state=directory
    - name: install home page
        copy: src=index.html dest={{ docroot }}/
            #自动会去templates目录下找j2文件
            #复制带变量的文件需要使用templates来执行
    - name: install conf file
        template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
        notify: reload nginx
    - name: start nginx service
        service: name=nginx enabled=true state=started
    
         #使用templates复制文件时的路劲设置方式:
             相对于etc/ansible/roles/nginx的相对路径
             template: copy: src=templates/server.conf.j2  dest=/etc/nginx/conf.d/server.conf
             完全绝对路径
                template: copy: src=/etc/ansible/roles/nginx/templates/server.conf.j2  dest=/etc/nginx/conf.d/server.conf
                需要自动去templates目录下自动识别
             template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf

    nginx的模版配置文件(.j2文件)

    [[email protected] nginx]# vim templates/server.conf.j2
    server {
                    listen 80;
                    server_name {{ ansible_fqdn }} {{ ansible_hostname  }};
    
                    location / {
                                    root {{ docroot }};
                                    index index.jsp index.html;
                    }
    }

    触发器文件配置

    [[email protected] nginx]# vim handlers/main.yml
    - name: reload nginx
        server: name=nginx state=reloaded

    这个nginx wed服务,需要测试页,编辑网站的主页:

    [[email protected] nginx]# vim files/index.html
    <h1>Welcome to nginx </h1>

    定义变量:

    [[email protected] nginx]# vim vars/main.yml
    #定义网站主页的路径
    docroot: /data/nginx/

    ??

    [[email protected] ~]# cd ansible/
    [[email protected] ansible]# vim nginx.yml
    - hosts: all
        remote_user: root
        roles:
        - nginx

    进行语法检测:

    [[email protected] ansible]# ansible-playbook --syntax-check nginx.yml 

    进行测试执行:

    [[email protected] ansible]# ansible-playbook --check nginx.yml 
    
    PLAY [10.10.11.2] *************************************************************************************************
    
    TASK [Gathering Facts] ********************************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] ***********************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ******************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ************************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] **********************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install conf file] **********************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : start nginx service] ********************************************************************************
    ok: [10.10.11.2]
    
    PLAY RECAP ***********************************************************************************
    10.10.11.2                 : ok=7    changed=0    unreachable=0    failed=0   

    确认执行文件:

    [[email protected] ansible]# ansible-playbook  nginx.yml 
    
    PLAY [10.10.11.2] *******************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] *****************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ******************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install conf file] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : start nginx service] **************************************************************
    ok: [10.10.11.2]
    
    PLAY RECAP **************************************************************************************
    10.10.11.2                 : ok=7    changed=0    unreachable=0    failed=0   

    去执行命令的节点查看
    查看端口

    [[email protected] ~]# ss -ntlp |grep 80
    LISTEN ? ? 0 ? ? ?128 ? ? ? ?  *:80 ? ? ? ? ? ? ? ? ? ? ? *:* ? ? ? ? ? ? ? ? ? users:(("nginx",pid=11368,fd=6),("nginx",pid=11314,fd=6))

    查看配置文件

    [[email protected] ~]#  cat /etc/nginx/conf.d/server.conf
    server {
        listen 80;
        server_name localhost.localdomain localhost;
    
        location / {
            root /data/nginx/;
            index index.jsp index.html;
        }
    }

    上边实验的结果是实现nginx的web服务功能,而现在需要实现nginx做web和proxy,针对nginx的不同角色功能定位,来实现不同机器的分功能的配置

    修改前先进行备份

    [[email protected] roles]#  cp -a nginx/ /root/

    修改自定义变量

    [[email protected] nginx]# vim vars/main.yml
    #添加servertype变量值为web
    servertype: web ? ?
    docroot: /data/nginx/

    修改:/nginx/tasks/main.yml文件(设置任务列表)

    [[email protected] nginx]# vim tasks/main.yml
     - name: install epel-release package
        yum: name=epel-release state=installed
    - name: install nginx package
        yum: name=nginx state=installed
    - name: create doc root
        file: path={{ docroot }} state=directory
         #新添加类型为web
        when: servertype == ‘web‘
    - name: install home page
        copy: src=index.html dest={{ docroot }}/
         #新添加类型为web
        when: servertype == ‘web‘
    - name: install conf file
        template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
         #新添加类型为web
        when: servertype == ‘web‘
        notify: reload nginx
    - name: start nginx service
        service: name=nginx enabled=true state=started

    测试执行nging=web?(没有问题)

    [[email protected] ansible]# ansible-playbook --check nginx.yml 
    
    PLAY [10.10.11.2] *******************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] *****************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ******************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install conf file] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : start nginx service] **************************************************************
    changed: [10.10.11.2]
    
    PLAY RECAP **************************************************************************************
    10.10.11.2                 : ok=7    changed=1    unreachable=0    failed=0   

    ?配置代理

    设置变量

    [[email protected] nginx]# vim vars/main.yml
    servertype: web
    #设置变量,代理服务器的代理目标主机变量
    backendurl: ‘http://127.0.0.1:8080‘
    docroot: /data/nginx/

    创建proxy的模版文件

    [[email protected] nginx]# vim templates/proxy.conf.j2
    server {
                    listen 80;
                    server_name {{ ansible_fqdn }} {{ ansible_hostname }};
                    location / {
                                    proxy_pass {{ backendurl }};
                    }
    }

    yaml文件,play_books文件,
    修改:/nginx/tasks/main.yml文件(设置任务列表)

    [[email protected] nginx]# vim tasks/main.yml
    - name: install epel-release package
        yum: name=epel-release state=installed
    - name: install nginx package
        yum: name=nginx state=installed
    - name: create doc root
        file: path={{ docroot }} state=directory
        when: servertype == ‘web‘
    - name: install home page
        copy: src=index.html dest={{ docroot }}/
        when: servertype == ‘web‘
    - name: install web conf file
        template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
        when: servertype == ‘web‘
        notify: reload nginx
        #新加proxy部分配置段
    - name: install proxy conf file
        template: src=proxy.conf.j2 dest=/etc/nginx/conf.d/server.conf
        when: servertype == ‘proxy‘
        notify: reload nginx
    - name: start nginx service
        service: name=nginx enabled=true state=started
    /nginx/tasks/main.yml文件(设置任务列表)测试

    手动分别测试

    默认执行web

    使用:-e servertype=proxy 手动触发proxy

    自动实现(修改部分如下:)

    配置/etc/ansible/hosts

    [[email protected] nginx]# vim /etc/ansible/hosts
    [tomcat]
    10.10.11.133
    [web]
    10.10.11.2

    yaml文件play_books文件

    [[email protected] ansible]# cat nginx.yml
    - hosts: tomcat
    remote_user: root
    roles:
    - { role: nginx, servertype: proxy }
    
    - hosts: web
    remote_user: root
    roles:
    - nginx

    测试:

    [[email protected] ansible]# ansible-playbook --check nginx.yml 
    
    PLAY [tomcat] ***********************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.133]
    
    TASK [nginx : install epel-release package] *****************************************************
    changed: [10.10.11.133]
    
    TASK [nginx : install nginx package] ************************************************************
    changed: [10.10.11.133]
    
    TASK [nginx : create doc root] ******************************************************************
    skipping: [10.10.11.133]
    
    TASK [nginx : install home page] ****************************************************************
    skipping: [10.10.11.133]
    
    TASK [nginx : install web conf file] ************************************************************
    skipping: [10.10.11.133]
    
    TASK [nginx : install proxy conf file] **********************************************************
    changed: [10.10.11.133]
    
    TASK [nginx : start nginx service] **************************************************************
    changed: [10.10.11.133]
    
    RUNNING HANDLER [nginx : reload nginx] **********************************************************
    changed: [10.10.11.133]
    
    PLAY [web] **************************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] *****************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ******************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install web conf file] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install proxy conf file] **********************************************************
    skipping: [10.10.11.2]
    
    TASK [nginx : start nginx service] **************************************************************
    changed: [10.10.11.2]
    
    PLAY RECAP **************************************************************************************
    10.10.11.133               : ok=6    changed=5    unreachable=0    failed=0
    10.10.11.2                 : ok=7    changed=1    unreachable=0    failed=0   

    真正执行结果

    最后的目录结构如下:

    [[email protected] nginx]# tree
    .
    [[email protected] nginx]# tree

    .
    ├── dafault
    ├── files
    │?? └── index.html
    ├── handlers
    │?? └── main.yml
    ├── meta
    ├── tasks
    │?? └── main.yml
    ├── templates
    │?? ├── proxy.conf.j2
    │?? └── server.conf.j2
    └── vars
            └── main.yml

    原文地址:http://blog.51cto.com/12105235/2128557

    时间: 2024-10-09 11:18:57

    ansible角色调用的相关文章

    19,Ansible角色

    1,ansible角色 ansible官方指定的一套统一规范规则叫角色比如我们可以把配置nginx过程抽象成一个nginx角色 同理像redis也是一样可以理解为一个角色,它的配置过程有ansible固定模板 [[email protected] ~]# cd /etc/ansible/roles/ [[email protected] /etc/ansible/roles]# tree . ├── rsync #角色名称 │ ├── files #存放需要copy的文件 │ ├── handl

    掌握Ansible角色(Roles)自动化部署配置LAMP架构

    Roles简介: Ansible为了层次化.结构化地组织Playbook,使用了角色(roles).Roles能够根据层次型结构自动装载变量文件.task以及handlers等.简单来讲,roles就是通过分别将变量.文件.任务.模块及处理器放置于单独的目录中,并可以便捷地include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中.? 在一个playbook中创建使用Roles的步骤: 1.创建以roles命令的目录. * mkdir /etc/ansibl

    自动化运维工具ansible 角色Roles介绍(三)

    一.角色(roles)介绍角色定制:roles 对于以上所有的方式有个弊端就是无法实现复用假设在同时部署Web.db.ha 时或不同服务器组合不同的应用就需要写多个yml文件.很难实现灵活的调用. roles 用于层次性.结构化地组织playbook.roles 能够根据层次型结构自动装载变量文件.tasks以及handlers等.要使用 roles只需要在playbook中使用include指令即可.简单来讲,roles就是通过分别将变量(vars).文件(file).任务(tasks).模块

    Ansible角色管理-Roles(实例演示!!!)

    Roles的概述 Roles能够根据层次型结构自动装载变量文件.task以及handlers等. 简单来讲,Roles就是通过分别将变量.文件.任务.模块及处理器放置于单独的目录中,并可以便捷地include它们. Roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中. Roles的目录 目录名称 具体含义 files 用来存放由copy模块或script模块调用的文件 templates 用来存放j正则模板,template模块会自动在此目录中寻找正则模板文件 task

    ansible api调用

    例子: #!/usr/bin/python import json from collections import namedtuple from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager from ansible.inventory.manager import InventoryManager from ansible.playbook.play 

    Ansible 的角色定义及调用

    ansible 角色定义及调用 ==========================================================================  概述:    本章是上篇ansible的后续,将主要介绍ansible中角色的定义和调用,内容如下: 角色目录的定义方法 在playbook中调用角色的方法: 示例: ·定义nginx角色并调用: ·定义memcached角色并调用: ·定义mysql角色并调用: =========================

    Ansible自动化部署之ROLES

    一.ROLES 角色 1.目录层级结构 2.角色调用 3.层级结构展示 示例1:利用ansible角色安装nginx 示例2:变量调用 示例3:在playbook调用角色方法:传递变量给角色 示例4:条件测试角色调用 示例5:角色安装 示例6:角色变量调整memcached内存大小 一.ROLES 角色 对于以上所有的方式有个弊端就是无法实现复用假设在同时部署Web.db.ha 时或不同服务器组合不同的应用就需要写多个yml文件.很难实现灵活的调用.. roles 用于层次性.结构化地组织pla

    ansible轻量级运维工具使用

    Linux轻量级自动运维工具- Ansible 创始人 Michael DeHanan 2012-03-09 同类自动化工具: Ansible Saltstack Puppet Chef Fabric Ansible 特点 agentless (去中心化) 只要保存管理机的认证信息,那么任何一台机器都可以变成管理机 Stupied Simple SSH by default YAML no code 定制剧本 基于python 实现 模块化:调用特定模块,完成特定任务,支持自定义模块 冥等性 -

    自动化运维工具之ansible的简单应用

    ansible: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,例如shell,copy,ping等,ansible只是提供一种框架.ansible的主要特性: 模块化:调用特定的模块,完成特定任务 基于Python语言实现,由Pa