精华内容
下载资源
问答
  • site.yml webservers.yml ...roles/ common/ files/ templates/ tasks/ handlers/ vars/ defaults/ meta/ webservers/ files/ templates/ tasks/ handlers/ vars/ defaults/ meta/.
    site.yml
    webservers.yml
    fooservers.yml
    roles/
       common/
         files/
         templates/
         tasks/
         handlers/
         vars/
         defaults/
         meta/
       webservers/
         files/
         templates/
         tasks/
         handlers/
         vars/
         defaults/
         meta/

    这个 playbook 为一个角色 ‘x’ 指定了如下的行为:

    • 如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
    • 如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
    • 如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
    • 如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
    • 所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
    • 所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
    • 所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
    • 所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。

    角色默认变量允许你为 included roles 或者 dependent roles(见下) 设置默认变量。要创建默认变量,只需在 roles 目录下添加 defaults/main.yml 文件。这些变量在所有可用变量中拥有最低优先级,可能被其他地方定义的变量(包括 inventory 中的变量)所覆盖。

     

     

    展开全文
  • cat > site.yml特定角色下的文件夹下的入口文件main.yml cat > roles/common/tasks/main.yml< cat > roles/common/tasks/shell-pwd.yml< roles/common/tasks/redhat.yml初步测试: ansible-playbook -i prod-servers...

    1. 测试简单临时命令

    # 新建 清单文件 prod.yml
    ---
    
    all:
      hosts:
      children:
        harbor:
          hosts:
            10.10.10.76:
            10.10.10.77:
        dbpg:
          hosts:
            10.10.10.74:
            10.10.10.75:
        geode:
          hosts:
            10.10.10.72:
            10.10.10.73:
        apps:
          hosts:
            10.10.10.70:
            10.10.10.71:
        webs:
          hosts:
            192.168.100.16:
            192.168.100.17:
        proxy:
          hosts:
            10.10.10.20:
      vars:
        ansible_ssh_port: 1046
    
    master:
      hosts:
        10.10.10.75:
      children:
        harbor:
        apps:
    
    worker:
      hosts:
        10.10.10.74:
      children:
        geode:
        apps:
        webs:
        proxy:
    
    temp:
      hosts:
        10.10.10.76:
    ---
    
    # 测试简单命令
    
    ansible harbor -i prod.yml --list-hosts
    
    ansible harbor -i prod.yml -m 'shell' -a 'pwd'

    2. 临时命令测试模块 

    Ansible支持的模块可以从https://docs.ansible.com/ansible/latest/collections/index.html 查看,

    这里简单测试 ansible的内建模块https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin

    选择gather_facts模块

    ansible harbor -i prod-servers.yml -m gather_facts --tree /tmp/facts

     3. 建立角色目录结构

    touch site.yml
    touch prod-servers.yml
    mkdir -p roles/common/{tasks,handlers,files,templates,vars,defaults,meta}
    mkdir -p roles/swarm/{tasks,handlers,files,templates,vars,defaults,meta}

    注:prod-servers.yml 与上面的prod.yml 内容一样。

     Ansible执行的入口文件

    cat > site.yml<<EOF
    - name: role test 001
      hosts:
        - harbor        # 清单文件中的 主机分组
      roles:
        - common
        - swarm
    EOF

    特定角色下的文件夹下的入口文件main.yml

    cat > roles/common/tasks/main.yml<<EOF
    - name: default import tasks example
      import_tasks: shell-pwd.yml
    - name: condition import tasks example
      import_tasks: redhat.yml
      when: ansible_facts['os_family']|lower == 'redhat'
    EOF
    
    cat > roles/common/tasks/shell-pwd.yml<<EOF
    - name: cat path
      shell: pwd
    EOF
    
    cat > roles/common/tasks/redhat.yml<<EOF
    - name: cat os
      shell: "cat /etc/redhat-release"
    EOF
    

    初步测试:

    ansible-playbook -i prod-servers.yml  site.yml

     总结:

    ansible-playbook 通过 -i 指定清单文件, 最后参数指定要执行的 play 文件 site.yml(可以是其它名字),site 文件中hosts 指定task 执行的范围

    ansible-playbook常用选项:
    --check  or -C    #只检测可能会发生的改变,但不真正执行操作
    --list-hosts      #列出运行任务的主机
    --list-tags       #列出playbook文件中定义所有的tags
    --list-tasks      #列出playbook文件中定义的所以任务集
    --limit           #主机列表 只针对主机列表中的某个主机或者某个组执行
    -f                #指定并发数,默认为5个
    -t                #指定tags运行,运行某一个或者多个tags。(前提playbook中有定义tags)
    -v                #显示过程  -vv 详细  -vvv 更详细

    展开全文
  • 角色是ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbookroles能够根据层次型结 构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即 可。简单来讲,roles...

    roles角色简介

    角色是ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结
    构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即
    可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便
    捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进
    程等场景中
    运维复杂的场景:建议使用roles,代码复用度高

    roles:多个角色的集合, 可以将多个的role,分别放至roles目录下的独立子目录中
    roles/
    mysql/
    httpd/
    nginx/
    redis/

    每个角色,以特定的层级目录结构进行组织
    roles目录结构:
    playbook.yml
    roles/
    project/
    tasks/
    files/
    vars/
    templates/
    handlers/
    default/
    meta/

    roles各目录作用
    /roles/project/ :项目名称,有以下子目录
    files/ :存放由copy或script模块等调用的文件
    templates/:template模块查找所需要模板文件的目录
    tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件
    中通过include进行包含
    handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
    vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进
    行包含
    meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需
    在此文件中通过include进行包含
    default/:设定默认变量时使用此目录中的main.yml文件

    创建 role
    创建role的步骤
    (1) 创建以roles命名的目录
    (2) 在roles目录中分别创建以各角色名称命名的目录,如webservers等
    (3) 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到
    的目录可以创建为空目录,也可以不创建
    (4) 在playbook文件中,调用各角色
    针对大型项目使用Roles进行编排

    nginx-role.yml    #和roles同级 用于调用roles
    roles/
    └── nginx
    ├── files
    │ └── main.yml
    ├── tasks
    │ ├── groupadd.yml
    │ ├── install.yml
    │ ├── main.yml
    │ ├── restart.yml
    │ └── useradd.yml
    └── vars
    └── main.yml
    

    roles 中 tags 使用

    #nginx-role.yml
    ---
    - hosts: websrvs
    remote_user: root
    roles:
    - { role: nginx ,tags: [ 'nginx', 'web' ] ,when:
    ansible_distribution_major_version == "7“ }
    - { role: httpd ,tags: [ 'httpd', 'web' ] }
    - { role: mysql ,tags: [ 'mysql', 'db' ] }
    - { role: mariadb ,tags: [ 'mariadb', 'db' ] }
    ansible-playbook --tags="nginx,httpd,mysql" nginx-role.yml
    

    基础实验

    使用 roles 方式完成 httpd 服务安装 ( * )

    实验准备

    准备一台 CentOS7服务器,安装好 ansible,并配置一台被远程管理的服务器.前提关闭防火墙和selinux。
    这里用到centos7 absible1主机作为ansible机器。IP:192.168.32.7
    被控制机器为centos8 ansible2 主机。IP:192.168.32.8

    [root@ansible1 ansible]#ansible --version
    ansible 2.9.1
      config file = /etc/ansible/ansible.cfg
      configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python2.7/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    [root@ansible1 ansible]#ansible all -m ping
    192.168.32.8 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    [root@ansible1 ansible]#
    
    

    编写playbook

    编写 httpd 的 ansible playbook roles

    [root@ansible1 ~]#cd /data/ansible/
    
    [root@ansible1 ansible]#mkdir -pv roles/httpd
    mkdir: created directory ‘roles’
    mkdir: created directory ‘roles/httpd’
    
    [root@ansible1 ansible]#cd roles/httpd/
    [root@ansible1 httpd]#mkdir {files,tasks,templates,handlers,vars}   #创建子文件夹
    [root@ansible1 httpd]#ll
    total 0
    drwxr-xr-x 2 root root 6 Dec  7 14:31 files
    drwxr-xr-x 2 root root 6 Dec  7 14:31 handlers
    drwxr-xr-x 2 root root 6 Dec  7 14:31 tasks
    drwxr-xr-x 2 root root 6 Dec  7 14:31 templates
    drwxr-xr-x 2 root root 6 Dec  7 14:31 vars
    [root@ansible1 httpd]#vim files/index.html             #编辑页面访问内容
    
    [root@ansible1 httpd]#cat files/index.html
    <h1>This is a ansible-playbook test for roles!  --kaivi</h1>
    
    [root@ansible1 httpd]#
    [root@ansible1 httpd]#vim handlers/main.yml            #编辑出发handlers
    [root@ansible1 httpd]#
    [root@ansible1 httpd]#cat handlers/main.yml
    ---
    - name: restart httpd service
      service: name=httpd state=restarted
    
    [root@ansible1 httpd]#vim tasks/main.yml              #主文件入口程序 表示角色执行顺序
    [root@ansible1 httpd]#
    [root@ansible1 httpd]#cat tasks/main.yml
    - include: install.yml
    - include: config.yml
    - include: index.yml
    - include: service.yml
    
    
    [root@ansible1 httpd]#vim tasks/install.yml         
    
    [root@ansible1 httpd]#cat tasks/install.yml
    ---
    - name: install
      yum: name=httpd
      
    [root@ansible1 httpd]#vim tasks/config.yml
    
    [root@ansible1 httpd]#cat tasks/config.yml
    ---
    - name: create config file for remote server
      template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify: restart httpd service
      
    [root@ansible1 httpd]#vim tasks/index.yml
    
    [root@ansible1 httpd]#cat tasks/index.yml
    ---
    - name: create default index.html page for remote server
      copy: src=index.html dest=/usr/share/httpd/noindex/index.html
    
    [root@ansible1 httpd]#vim tasks/service.yml
    
    [root@ansible1 httpd]#cat tasks/service.yml
    ---
    - name: start httpd service
      service: name=httpd state=started enabled=yes
    
    [root@ansible1 ~]#cp /etc/httpd/conf/httpd.conf /data/ansible/roles/httpd/templates/   #找到模板文件
    
    [root@ansible1 httpd]#mv templates/httpd.conf templates/httpd.conf.j2           #修改模板文件名称 一般以 .j2 后缀结尾
    
    [root@ansible1 httpd]#vim templates/httpd.conf.j2 
    
    [root@ansible1 httpd]#cat templates/httpd.conf.j2 |grep "Listen"
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # Change this to Listen on specific IP addresses as shown below to 
    #Listen 12.34.56.78:80
    Listen 9527                        #修改默认的80端口为9527
    Listen {{ httpd_port }}            #增加一个变量端口 配合vars/main.yml中的变量使用
    [root@ansible1 httpd]#vim vars/main.yml
    
    [root@ansible1 httpd]#cat vars/main.yml
    httpd_prot: 8080
    
    [root@ansible1 httpd]#cd /data/ansible/
    
    [root@ansible1 ansible]#vim httpd-role.yml       #创建角色调用文件
    
    [root@ansible1 ansible]#cat httpd-role.yml
    ---
    - hosts: all
    
      roles:
        - httpd
    
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#tree
    .
    ├── httpd-role.yml
    └── roles
        └── httpd
            ├── files
            │   └── index.html
            ├── handlers
            │   └── main.yml
            ├── tasks
            │   ├── config.yml
            │   ├── index.yml
            │   ├── install.yml
            │   ├── main.yml
            │   └── service.yml
            ├── templates
            │   └── httpd.conf.j2
            └── vars
                └── main.yml
    
    7 directories, 10 files
    [root@ansible1 ansible]# 
    [root@ansible1 ansible]#ansible-playbook -C httpd-role.yml    #语法检测
    
    PLAY [all] ********************************************************************************************************
    
    TASK [Gathering Facts] ********************************************************************************************
    ok: [192.168.32.8]
    
    TASK [httpd : install] ********************************************************************************************
    changed: [192.168.32.8]
    
    TASK [httpd : create config file for remote server] ***************************************************************
    changed: [192.168.32.8]
    
    TASK [httpd : create default index.html page for remote server] ***************************************************
    changed: [192.168.32.8]
    
    TASK [httpd : start httpd service] ********************************************************************************
    changed: [192.168.32.8]
    
    RUNNING HANDLER [httpd : restart httpd service] *******************************************************************
    changed: [192.168.32.8]
    
    PLAY RECAP ********************************************************************************************************
    192.168.32.8               : ok=6    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    [root@ansible1 ansible]#ansible-playbook httpd-role.yml         #调用执行角色剧本
    
    PLAY [all] ********************************************************************************************************
    
    TASK [Gathering Facts] ********************************************************************************************
    ok: [192.168.32.8]
    
    TASK [httpd : install] ********************************************************************************************
    changed: [192.168.32.8]
    
    TASK [httpd : create config file for remote server] ***************************************************************
    changed: [192.168.32.8]
    
    TASK [httpd : create default index.html page for remote server] ***************************************************
    changed: [192.168.32.8]
    
    TASK [httpd : start httpd service] ********************************************************************************
    changed: [192.168.32.8]
    
    RUNNING HANDLER [httpd : restart httpd service] *******************************************************************
    changed: [192.168.32.8]
    
    PLAY RECAP ********************************************************************************************************
    192.168.32.8               : ok=6    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    [root@ansible1 ansible]#ansible all -a 'ss -ntl'         #查看被控制远程主机端口 9527以及8080
    192.168.32.8 | CHANGED | rc=0 >>
    State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port    
    LISTEN   0         32            192.168.122.1:53               0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:9527             0.0.0.0:*       
    LISTEN   0         5                 127.0.0.1:631              0.0.0.0:*       
    LISTEN   0         128               127.0.0.1:6010             0.0.0.0:*       
    LISTEN   0         128               127.0.0.1:6011             0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:45475            0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:111              0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:8080             0.0.0.0:*       
    
    

    在页面中访问是否成功:
    在这里插入图片描述在这里插入图片描述

    语法when

    在 roles 的配置文件中可以定义变量,使用 when 等语法
    在另外加一台被控制机器为centos6 ansible3 主机。IP:192.168.32.6

    [root@ansible1 ~]#ansible all -m ping
    192.168.32.6 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    192.168.32.8 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    [root@ansible1 ~]#
    
    
    [root@ansible1 ~]#cd /data/ansible/
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#cat /etc/ansible/hosts | grep -Ev "^#|^$"
    [appsrvs]
    192.168.32.8 
    192.168.32.6
    
    [root@ansible1 ansible]#vim roles/httpd/templates/httpd.conf.j2 
    
    [root@ansible1 ansible]#cat roles/httpd/templates/httpd.conf.j2| grep "Listen"
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # Change this to Listen on specific IP addresses as shown below to 
    #Listen 12.34.56.78:80
    #Listen 9527
    Listen {{ httpd_port }}
    
    [root@ansible1 ansible]#cat httpd-role.yml
    ---
    - hosts: all
    
      roles:
        - {role: httpd, httpd_port: 666, when: ansible_distribution_major_version=="6"}
    
        - {role: httpd, httpd_port: 888, when: ansible_distribution_major_version=="8"}
    
    [root@ansible1 ansible]#cat roles/httpd/files/index.html
    
    <h1>This is a ansible-playbook test for roles!  --kaivi</h1>
    <h1>This is a ansible-playbook WHEN_TEST</h1>
    
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#ansible-playbook  httpd-role.yml 
    
    PLAY [all] ********************************************************************************************************
    
    TASK [Gathering Facts] ********************************************************************************************
    ok: [192.168.32.6]
    ok: [192.168.32.8]
    
    TASK [httpd : install] ********************************************************************************************
    skipping: [192.168.32.8]
    ok: [192.168.32.6]
    
    TASK [httpd : create config file for remote server] ***************************************************************
    skipping: [192.168.32.8]
    changed: [192.168.32.6]
    
    TASK [httpd : create default index.html page for remote server] ***************************************************
    skipping: [192.168.32.8]
    changed: [192.168.32.6]
    
    TASK [httpd : start httpd service] ********************************************************************************
    skipping: [192.168.32.8]
    changed: [192.168.32.6]
    
    TASK [httpd : install] ********************************************************************************************
    skipping: [192.168.32.6]
    changed: [192.168.32.8]
    
    TASK [httpd : create config file for remote server] ***************************************************************
    skipping: [192.168.32.6]
    changed: [192.168.32.8]
    
    TASK [httpd : create default index.html page for remote server] ***************************************************
    skipping: [192.168.32.6]
    changed: [192.168.32.8]
    
    TASK [httpd : start httpd service] ********************************************************************************
    skipping: [192.168.32.6]
    changed: [192.168.32.8]
    
    RUNNING HANDLER [httpd : restart httpd service] *******************************************************************
    skipping: [192.168.32.6]
    changed: [192.168.32.8]
    
    PLAY RECAP ********************************************************************************************************
    192.168.32.6               : ok=5    changed=3    unreachable=0    failed=0    skipped=5    rescued=0    ignored=0   
    192.168.32.8               : ok=6    changed=5    unreachable=0    failed=0    skipped=4    rescued=0    ignored=0   
    
    查看对应的端口centos6中是端口666   centos8中对应端口为888:
    [root@ansible1 ansible]#ansible all -a "ss -ntl"
    192.168.32.6 | CHANGED | rc=0 >>
    State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port 
    LISTEN     0      128                      :::666                     :::*     
    LISTEN     0      128               127.0.0.1:6010                     *:*     
    LISTEN     0      128                     ::1:6010                    :::*     
    LISTEN     0      128               127.0.0.1:6011                     *:*     
    LISTEN     0      128                     ::1:6011                    :::*     
    LISTEN     0      128                      :::40411                   :::*     
    LISTEN     0      100               127.0.0.1:25                       *:*     
    
    192.168.32.8 | CHANGED | rc=0 >>
    State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port    
    LISTEN   0         32            192.168.122.1:53               0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*       
    LISTEN   0         5                 127.0.0.1:631              0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:888              0.0.0.0:*       
    LISTEN   0         128               127.0.0.1:6010             0.0.0.0:*       
    LISTEN   0         128                 0.0.0.0:45475            0.0.0.0:*       
    LISTEN   0         128                    [::]:111                 [::]:*       
    
    [root@ansible1 ansible]#
    
    

    注意:一般生产中被控主机都需要分组控制。有些配置文件在不同版本的机器上是不通用的,这时候可以用when语句进行判断:
    不同的版本使用的版本配置文件做选择

    [root@ansible1 ansible]#cat roles/httpd/tasks/config.yml 
    ---
    - name: create config file for remote server
      template: src=httpd6.conf.j2 dest=/etc/httpd/conf/httpd.conf
      when: ansible_distribution_major_version=="6"
    
      notify: restart httpd service
    - name: create config file for remote server
      template: src=httpd8.conf.j2 dest=/etc/httpd/conf/httpd.conf
      when: ansible_distribution_major_version=="8"
      notify: restart httpd service
    [root@ansible1 ansible]#ll roles/httpd/templates/
    total 52
    -rw-r--r-- 1 root root 34433 Dec  7 15:52 httpd6.conf.j2
    -rw-r--r-- 1 root root 11780 Dec  7 15:14 httpd8.conf.j2
    
    

    如果这里的网页显示文件index.html在files文件中,一般表现出是静态文件,但是也可以把index.html放在templates中,则在index.html中可以使用变量。

    [root@ansible1 ansible]#tree
    .
    ├── httpd-role.yml
    └── roles
        └── httpd
            ├── files
            ├── handlers
            │   └── main.yml
            ├── tasks
            │   ├── config.yml
            │   ├── index.yml
            │   ├── install.yml
            │   ├── main.yml
            │   └── service.yml
            ├── templates
            │   ├── httpd6.conf.j2
            │   ├── httpd8.conf.j2
            │   └── index.html.j2
            └── vars
                └── main.yml
    
    7 directories, 11 files
    
    

    ansible playbook 高级功能

    加密解密

    使用 ansible-vault 加解密 playbook 文件

    [root@ansible1 ansible]#cat httpd-role.yml 
    ---
    - hosts: all
    
      roles:
        - {role: httpd, httpd_port: 666, when: ansible_distribution_major_version=="6"}
    
        - {role: httpd, httpd_port: 888, when: ansible_distribution_major_version=="8"}
    
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#ansible-vault encrypt httpd-role.yml 
    New Vault password: 
    Confirm New Vault password: 
    Encryption successful
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#cat httpd-role.yml 
    $ANSIBLE_VAULT;1.1;AES256
    66306666376435373431623733383662363636376334633939663335333766623930633664333163
    3966663633356430666233343063386133353536373934660a363633666536663535376436393338
    63663465636434323334306438353232396632316365333663666432303535333462643466383064
    6637656632396262360a323131376630326666316238343533323337313562363961376333323034
    66616262623130656364396437356633386438623735323337646461613534363632343937343139
    65303866316364396532373832376366613131376234386130663762303033303061353638653264
    39643537653138636236333762336464313961656664383039326533656433396136323430386534
    35386336333130326264646630346630366262333766616262316661313339633361636538346163
    34613832656363626536646531363534663462626333316261333035653130376530623462343831
    62373062333565353764396266303337663934326535326265383461306161353532306666353930
    64366561353764366131303437383030306530633263343364366563333935306131303661356135
    32653232343930653661373135316665656536396336613934383534383261353262666636363964
    37366430343039353338373438626161343565633534326166613239336261343031313035633633
    3664363139623631653266363430656336623864666535356562
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#ansible-vault decrypt httpd-role.yml 
    Vault password: 
    Decryption successful
    [root@ansible1 ansible]#cat httpd-role.yml 
    ---
    - hosts: all
    
      roles:
        - {role: httpd, httpd_port: 666, when: ansible_distribution_major_version=="6"}
    
        - {role: httpd, httpd_port: 888, when: ansible_distribution_major_version=="8"}
    
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#
    
    

    查看和修改密码

    修改加密的密码和不解密临时查看文件:

    [root@ansible1 ansible]#ansible-vault encrypt httpd-role.yml 
    New Vault password: 
    Confirm New Vault password: 
    Encryption successful
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#ansible-vault rekey httpd-role.yml 
    Vault password: 
    New Vault password: 
    Confirm New Vault password: 
    Rekey successful
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#ansible-vault view httpd-role.yml  #临时查看文件
    Vault password: 
    ---
    - hosts: all
    
      roles:
        - {role: httpd, httpd_port: 666, when: ansible_distribution_major_version=="6"}
    
        - {role: httpd, httpd_port: 888, when: ansible_distribution_major_version=="8"}
    
    [root@ansible1 ansible]#cat httpd-role.yml 
    $ANSIBLE_VAULT;1.1;AES256
    33323939633562303634343535313536306338373262633135363136343732303762623765363235
    6564653333336535353732323965643363616438386539350a373534313832633661323733613663
    30303839653332306335333434373939346436363136633932386661363261306634373164353635
    3964383333313932300a633662613931393732393463336664313738646436343566366338366661
    35303134303034626566346230316235383133643135346461646634653761613035626266653161
    30356335333065663439336662333761353664626639343164313333656638613764663834653363
    39343461613366666166656464333561336361613536656331616262343139626230343338613364
    65623534643936303963376266623032363938303936323062353664323565333261383737323664
    31656363326462366664666635656232646231663337323239643538323931343664396164303933
    32336436316539643535346661313566343138616562636131326633666464326434633336366264
    32356435656161643638613237343733666666643764623834323137333764643834653736383438
    62643031663939323435373133666337373266643564386634656431396534323765373736356364
    33363039303037636335346536643630303437363034306535656631313861316436393035383135
    3735643533333536396138346562363965333931393737633235
    [root@ansible1 ansible]#
    
    

    编辑加密文件:

    [root@ansible1 ansible]#
    [root@ansible1 ansible]#ansible-vault edit httpd-role.yml 
    Vault password: 
    [root@ansible1 ansible]#
    

    创建加密文件

    [root@ansible1 ansible]#ansible-vault create newplaybook.yum
    New Vault password: 
    Confirm New Vault password: 
    [root@ansible1 ansible]#
    [root@ansible1 ansible]#cat newplaybook.yum 
    $ANSIBLE_VAULT;1.1;AES256
    35663330613661643332343437626630646561613462646164633438343565373837383165326564
    6438323166646231613138306361376437393964613365610a313437633836663265326432663765
    34666334643533663334363739656461623535353933613363316632663933376666306166613536
    3866353161646636340a313363643436343430366363663039633432636430303133346564333339
    3633
    [root@ansible1 ansible]#
    
    
    展开全文
  • Ansible playbook roles

    2019-03-21 15:35:00
    但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色,建议把角色放在固定的目录下,目录可以ansible的配置文件中的roles_path来定义。...

     

    1  概述

    角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色,建议把角色放在固定的目录下,目录可以ansible的配置文件中的roles_path来定义。

    • 目录结构清晰

    • 可以重复使用

    参考: http://www.ansible.com.cn/docs/playbooks_roles.html 

            https://blog.51cto.com/ghbsunny/2047084

     

    2  配置介绍

    以层级结构组织Playbook的核心元素,成为roles。

    核心元素包括以下几点:

            Hosts:主机

            Tasks:任务列表

            Variables:变量

            Templates:包含了模板语法的文本文件;

            Handlers:由特定条件触发的任务;

    在roles目录下,分别创建不同的目录,每个目录就是不同的角色,roles目录下是角色的集合:

    如roles/创建如下的目录

    mysql/

    httpd/

    nginx/

    memcached/

    roles模块的路径可以在配置文件/etc/ansible/ansible.cfg里roles_path定义.

     

    每个角色,以特定的层级目录结构进行组织,例子如下:

    /roles/mysql/

    • files/ :存放由copy或script模块等调用的文件;
    • templates/:template模块查找所需要模板文件的目录;
    • tasks/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
    • handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
    • vars/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
    • meta/:至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要在此文件中通过include进行包含;注意,角色和角色之间有依赖关系,如安装NT,先装nginx后装tomcat,一般不需定义,执行我们自己定义好安装顺序即可
    • default/:设定默认变量时使用此目录中的main.yml文件;
    nginx/
    ├── files   静态文件
    ├── tasks   任务列表
    │   ├── copyfile.yml
    │   ├── installnginx.yml
    │   ├── main.yml   入口文件
    │   └── start.yml
    ├── templates 模板文件
    │   └── nginx.conf
    └── vars  变量
    └── handlers  被触发的动作

     

    3  playbook调用角色

    playbook调用角色有三个方法:

    方法1:

    - hosts: websrvs
      remote_user: root
      roles:
      - mysql
      - memcached
      - nginx

    方法2:传递变量给角色,调用角色时,注意依赖关系,可以自己先考虑好先后顺序

    - hosts: 
      remote_user:
      roles:
      - { role: nginx, username: nginx }  #键role用于指定角色名称;后续的k/v用于传递变量给角色;

    方法3:基于条件测试实现角色调用;

    roles:
    - { role: nginx, when: "ansible_distribution_major_version == '7' " }

    查找顺序

    roles目录,对应的文件夹

    tasks:先找tasks目录里面的main.yml文件,看到import_tasks来导入别的yml文件,这个是必须的

    templates: 找这个目录里面的模板文件,在tasks里面是可以用相对路径来写

    vars:先找main.yml文件,如果找到就找变量替换

    hanlers:先找main.yml文件,如果找到,则在tasks里面通过notify来触发

    files: 放的是静态文件

    相互调用

    通过import_tasks 来相互调用,roles/role/tasks/taskfile.yml

    怎么使用

    跟roles同级目录下,写nginx。yml文件

    - hosts: web
      roles:
      - nginx

     

     

     

    4  例子

     

    创建roles文件夹

    mkdir roles

    创建nginx, mysql, redis, uwsgi 四个角色

    进入一个角色 cd nginx,

    创建目录 mkdir -v {tasks,files,templates,handlers,vars}

    nginx/
    ├──files  静态文件
    ├──tasks  任务列表
    │   ├──copyfile.yml
    │   ├──installnginx.yml
    │   ├──main.yml  入口文件
    │   └──start.yml
    ├──templates模板文件
    │   └──nginx.conf
    └──vars 变量
    └──handlers 被触发的动作

     

    进入tasks cd tasks

    1.创建安装nginx任务 vim installnginx.yaml

    -name:installnginx
     yum:name=nginx

    2.创建拷贝文件任务 vim copyfile.yaml

    -name:copyfile
     template:src=nginx.confdest=/etc/nginx/nginx.conf

    3.创建启动任务 vim startnginx.yaml

    -name:starnginx
     service:name=nginxstate=started

    4.创建入口文件 vim main.yaml

    -import_tasks:installnginx.yaml
    -import_tasks:copyfile.yaml
    -import_tasks:startnginx.yaml

    5.创建触发handlers文件 (每次修改配置文件后触发 需要notify ) cd handler

    创建入口文件 vim main.yaml

    -name:restart
     service:name=niginstate=restarted

    5.1去tasks目录中的 拷贝文件任务中 添加notify cd nginx/tasks/ vim copyfile.yaml

    -name:copyfile
     template:src=nginx.confdest=/etc/nginx/nginx.conf
     tags:copyfile
     notify:restart

    5.2把本机上的nginx配置文件copy到templates中

    我的nginx在/opt/nginx1-12/conf/nginx.conf

    cp/opt/nginx1-12/conf/nginx.confnginx.conf

    6.配置nginx配置文件, (修改核心数,可选) vim nginx.conf

    worker_processes{{ansible_processor_vcpus}};

    7.跟roles同级的目录中创建 主role文件 vim nginx.yaml

    -hosts:all
     roles:
     -nginx

    8.检查一下

    ansible-playbook--syntax-checknginx.yaml

    9.运行

     
     

    nginx +uwsgi配置方式

    第一种

    uwsgi配置文件里面是http= 0.0.0.0:8000

    nginx配置文件是proxy_pass http://127.0.0.1:8000;

    第二种方式

    uwsgi配置文件里面是socket= 0.0.0.0:8000

    nginx配置文件是

    include /etc/nginx/uwsgi.conf

    uwsgi_pass 127.0.0.1:8000;

    第三种方式

    uwsgi配置文件里面是socket=/data/mysite/mysite.socket

    nginx配置文件是

    include /etc/nginx/uwsgi.conf

    uwsgi_pass unix:/data/mysite/mysite.socket;

     
     

     

    转载于:https://www.cnblogs.com/niuli1987/p/10572051.html

    展开全文
  • ansible playbook使用说明及测试demo

    千次阅读 2020-04-14 15:23:41
    Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc和playbook: (一)ad-hoc模式(点对点模式) 使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令...
  • ansible-playbook playbook.yml -f 10 3 inventory https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html 例1 同一功能的主机可以写在同一组 #方括号[ ]中是组名,用于对系统...
  • ansible-playbook剧本进阶篇templates模块(模板)jinjia2模板tags模块roles模块(角色管理) templates模块(模板) jinjia2模板 jinjia模板是在ansible中建立的一类模板文件,通常以 “ .j2 ” 结尾标识。模板的...
  • page_type 语言 产品 描述 样本 yaml ...pip install -r ~ /.ansible/roles/azure.azure_preview_modules/files/requirements-azure.txt 怎么跑 要在您的本地环境中运行样本, git clone https://
  • http://blog.51cto.com/dl528888/1440775
  • 新建入口文件site.yml 在/root/ansible_test/tomcat中新建site... 新建/root/ansible_test/tomcat/roles/tomcat目录,对应上面的入口文件,在该目录下新建tasts目录,并在其中新建main.yml文件。 --- - name: inst..
  • 文章目录1.ansible-playbook yml文件部署zabbix实现步骤:2.ansible-playbook roles角色部署zabbix实现步骤 1.ansible-playbook yml文件部署zabbix 实现步骤: (1)基础配置 [devops@server1 ansible]$ pwd /...
  • 在前面的两篇文章中已经分别创建了nginx和httpd这两个role,这里想要实现一下对多个role的操作。 使用playbook role创建httpd服务_QYHuiiQ-...[root@localhost ansible]# cat roles_test.yml - hosts: wyh-test re
  • playbookroles介绍一、前言二、playbook详解1、playbook的基本组成2、playbook各基础组件说明3、条件测试4、迭代和迭代嵌套5、tags(标签)6、运行playbook7、案例:使用ansible对websrvs组的两台主机做httpd的高...
  • 文章目录1、hosts文件添加主机组2、创建roles目录3、下载安装包4、创建mysql的配置模板文件5、创建调用rolesplaybook作业 (注意host的角色分组是哪个)6、创建变量vars定义文件7、创建文件分发作业8、创建mysql...
  • 使用role,就是把之前的Playbook进行分门别类,所以我们要先在roles目录下创建几个目录方便管理: [root@localhost ansible]# mkdir roles/{nginx,httpd,mysql,memcache} -pv mkdir: 已创建目录 "roles/nginx" ...
  • 1、ansible安装mysql的相关信息: 2、common安装需要的组件。mysql_install中,files放mysql压缩包,vars存放参数,templates里放安装脚本、配置文件、初始化脚本、service启动配置文件,tasks里执行复制...
  • 操作系统特定变量在 /vars/{{ ansible_os_family }}.yml 文件中定义。 默认变量在 /defaults/main.yml 中定义您可以通过在 /defaults/main.yml 中输入端口值来打开 IPTABLES 的各个端口 依赖关系 没有任何 示例手册 ...
  • AnsibleRoles详解

    千次阅读 2020-05-08 20:55:41
    Ansible Roles 详解与实战案例
  • linux运维学习之ansibleplaybookroles的使用 - 51CTO博客 nginx 基于uwsgi部署Django - 51CTO博客 一、playbook相关模块 1、setup $ ansible cache -m setup | more ansible_all_ipv4_ad...
  • cd /etc/ansible/ mkdir roles/install_docker/{tasks,handlers,vars} -pv mkdir roles/install_compose/{tasks,handlers,vars} -pv 2)安装docker的任务文件 # cat roles/install_docker/tasks/main.yml - ...
  • Ansible Roles 详解示例

    2019-10-18 11:15:53
    Ansible Roles 详解示例组网及具体配置1、组网拓扑2、进行 Ansible 基本配置(添加 hosts)2.1 添加组名为 webservers ,并进行主机添加2.2 创建密钥,用于免认证登陆 hosts 主机2.3 添加主机 Tang-1(172.16.141....
  • 文章目录1、hosts文件添加主机组2、创建roles目录3、移动安装到到4、创建redis的配置模板文件5、创建调用rolesplaybook作业 (注意host的角色分组是哪个)6、创建变量vars定义文件7、创建tasks的main.yml文件8、...
  • 1、相关redis参数: 2、/templates/redis.conf配置相关参数: daemonize yes pidfile /var/run/redis_{{ redis_port }}.pid port {{ redis_port }} bind {{ ansible_default_...
  • 1、nginx包相关信息: ... ...nginx_port: 80 nginx监听端口 ...nginx_web_dir: /data/web... 解压后:ansible-playbook /你的路径/nginx_install.yml --extra-vars "host=你的群组 user=你的账号"
  • Ansible Playbook 专为运行 Golang 应用程序的环境而设计。 它可以安装和配置这些在生产 Go 部署中常用的应用程序: 高朗 PostgreSQL 导师 默认设置存储在roles/role_name/vars/main.yml 。 特定于环境的设置位于...
  • 文章目录1.YAML语言1.1基本语法规则1.2 YAML支持的数据结构2.ansible的脚本---playbook剧本 1.YAML语言 playbook采用YAML格式配置文件 YAML是一种非标记语言。是用来写配置文件的语言,非常简洁和强大 YAML语法和...
  • 能够使用service模块控制服务的启动,关闭,开机自启动 能够使用script模块在远程机器上执行本地脚本 能够使用command与shell模块远程执行命令 能够编写playbook实现httpd 能够使用roles实现lamp 一、认识自动化运维 ...
  • 对于Playbook来讲是由:Inventory、Modules、Ad Hoc Commands、Playbooks【Tasks、Variables、Templates、Handlers、Roles】组成的,想要了解Playbooks,我们需要先了解下YAML语法 一、YAML语法简介 YAML是一个...
  • Ansible playbook进阶

    2020-03-15 23:11:04
    playbook进阶语法进阶变量errorhandlerswhenregisterwith_itemswith_nestedtagsinclude-and-roles调试debug playbook进阶 语法进阶 变量 添加用户 给所有主机添加用户srv ,设置默认密码123456 要求第次登录修改...
  • ansible roles meta

    千次阅读 2018-08-20 23:14:31
    roles中meta目录main.yml定义的playbook,会被首先运行   出处:https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html?highlight=meta 参考:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,327
精华内容 2,530
关键字:

ansibleplaybookroles