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任务是否正常启动成功

原文地址:https://www.cnblogs.com/danny-djy/p/14512296.html