• ansible通过role进行管理的demo


    前置工作:

    1.在管理机中,已安装好ansible(操作系统是Centos7.5)

    2.管理机和目标机已做ssh配置。本例子中,目标机有2台:localhost、john

    /etc/ansible/hosts内容如何:

    [john]
    ansible-john ansible_ssh_host=主机ip地址 ansible_ssh_user="root" ansible_ssh_pass="密码" ansible_ssh_port=22
    
    [local]
    localhost ansible_connection=local
    

      

    3.目标机器已经安装docker

    本例,将通过ansible的role模块,基于docker部署一个最简单的springboot 容器。

    以下所有操作,都是在管理机(ansible)中执行

     1.ansible默认安装位置位于/etc/ansible,我将在此处创建roles和playbook两个文件夹

    mkdir /etc/ansible/playbook
    
    mkdir /etc/ansible/roles
    

    在/etc/ansible/ansible.cfg配置文件中,可以通过配置项roles_path指定roles的位置,默认位于/etc/ansible/roles

    2.进入roles目录,初始化角色springdemo

    cd /etc/ansible/roles
    
    ansible-galaxy init springdemo
    

    初始化执行完成后,在springdemo目录会自动生成如下子目录和默认文件

    roles:          <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles
      springdemo:      <---具体的角色项目名称,比如nginx、tomcat、php
        files:     <--用来存放由copy模块或script模块调用的文件。
        templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
        tasks:     <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。
          main.yml
        handlers:  <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
          main.yml
        vars:      <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
          main.yml
        defaults:  <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
          main.yml
        meta:      <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。
          main.yml
    

      

    3.将springdemo.jar包复制到/etc/ansible/roles/springdemo/files路径下

     justspringdemo-1.0-SNAPSHOT.jar包:因jar包过大,无法上传。请自行换成自身的项目包

    4.上传springdemo_dockerfile文件到/etc/ansible/roles/springdemo/templates目录,用于build docker镜像

    springdemo_dockerfile内容如下:

    # 版本信息
    FROM openjdk:8-alpine
    MAINTAINER danny
    
    LABEL version="lable1.0"
    
    WORKDIR /home
    #打包项目并拷贝到tomcat webapps目录
    COPY justspringdemo-1.0-SNAPSHOT.jar /home
    
    #开启内部服务端口
    EXPOSE {{http_port}}
    
    #启动tomcat服务器
    CMD java -jar justspringdemo-1.0-SNAPSHOT.jar
    

    5.编辑/etc/ansible/roles/springdemo/vars/main.yml,定义安装过程中使用的变量

    ---
    # vars file for springdemo
    
      memory: 512m
      http_port: 8081
      author: danny
    

    6编辑/etc/ansible/roles/springdemo/tasks/main.yml,定义任务内容

    ---
    # tasks file for springdemo
      - name: create folder /home/ansible
        file:
          path: /home/ansible
          state: directory
    
      - name: copy spring docker file
        template: src=springdemo_dockerfile dest="/home/ansible/springdemo_dockerfile"
    
      - name: copy spring demo jar
        copy:
          src: justspringdemo-1.0-SNAPSHOT.jar
          dest: /home/ansible
          owner: root
          mode: 0644
          backup: no
    
      - name: build docker image
        command: docker build -f /home/ansible/springdemo_dockerfile -t springdemo /home/ansible
    
      - name: wait 10s after build image
        command: sleep 10
    
      - name: stop demo container if exist
        command: docker stop springdemo
    
      - name: wait 10s after stop container
        command: sleep 10
    
      - name: rm demo container if exist
        command: docker rm springdemo
    
      - name: run springdemo demo
        command: docker run -d -p 10002:{{http_port}} --name springdemo springdemo 

    中间有sleep 10秒的操作,目的是保证docker build,docker stop成功执行,便于往下继续操作

    7.创建playbook剧本

    touch /etc/ansible/playbook/springdemo.yml

    springdemo.yml 剧本内容:
    ---
      # 演示通过role管理playbook
      - hosts: all
        remote_user: root
        strategy: free
        roles:
          - springdemo
    
        post_tasks:
          - shell: echo 'demo manage playbook by role'
            register: ret
          - debug: var=ret.stdout
    

      

    8.运行playbook剧本

    ansible-playbook springdemo.yml
    

      

    运行结果:

     

    9.切换到目标机器,进一步验证playbook任务是否正常启动成功

  • 相关阅读:
    java生成json字符串的方法
    JSON的三种解析方式
    Android Studio你不知道的调试技巧
    Android 打开URL
    build.gradle中引入jar
    Spark RDD/Core 编程 API入门系列之map、filter、textFile、cache、对Job输出结果进行升和降序、union、groupByKey、join、reduce、lookup(一)
    NovaMind *的安装、和谐破解到永久使用
    小Q书桌的下载、安装和使用
    作业提交过程分析(源码)
    SparkContext的初始化过程分析(源码)
  • 原文地址:https://www.cnblogs.com/danny-djy/p/14512296.html
Copyright © 2020-2023  润新知