Automatización de despliegues en Openshift con Ansible Tower

54
AUTOMATIZACIÓN DE DESPLIEGUES EN OPENSHIFT CON ANSIBLE TOWER

Transcript of Automatización de despliegues en Openshift con Ansible Tower

Page 1: Automatización de despliegues en Openshift con Ansible Tower

AUTOMATIZACIÓN DE DESPLIEGUES EN

OPENSHIFT CON ANSIBLE TOWER

Page 2: Automatización de despliegues en Openshift con Ansible Tower

Ramón Román NissenSenior Middleware [email protected]@rromannissen

Page 3: Automatización de despliegues en Openshift con Ansible Tower

Ramón Román NissenSenior Middleware [email protected]@rromannissen

Page 4: Automatización de despliegues en Openshift con Ansible Tower

OJOCUIDAOEsta no es una charla oficial de Red Hat. Las

opiniones y enfoques técnicos son propios y no necesariamente están alineados con los de Red Hat

Page 5: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGECONFIGURE PROJECTS

TAG IMAGESCREATE

OBJECTS

Page 6: Automatización de despliegues en Openshift con Ansible Tower

ACTORES

Page 7: Automatización de despliegues en Openshift con Ansible Tower
Page 8: Automatización de despliegues en Openshift con Ansible Tower
Page 9: Automatización de despliegues en Openshift con Ansible Tower
Page 10: Automatización de despliegues en Openshift con Ansible Tower
Page 11: Automatización de despliegues en Openshift con Ansible Tower
Page 12: Automatización de despliegues en Openshift con Ansible Tower
Page 13: Automatización de despliegues en Openshift con Ansible Tower
Page 14: Automatización de despliegues en Openshift con Ansible Tower

ORGANIZATION

PROJECT 1 INVENTORY 1

INVENTORY N

INVENTORY SCRIPT 1

INVENTORY SCRIPT N

NOTIFICATION 1

NOTIFICATION N

CREDENTIAL 1

CREDENTIAL N

JOB TEMPLATE 1

JOB TEMPLATE N

Page 15: Automatización de despliegues en Openshift con Ansible Tower

JOB TEMPLATE

PLAYBOOK

INVENTORY

VARIABLE 1

VARIABLE N

VARIABLE N+1

VARIABLE M

SURVEY PROMPT 1

SURVEY PROMPT N

Page 16: Automatización de despliegues en Openshift con Ansible Tower

PROJECT

Repo \_ roles \_ check_availability \_ tasks \_ templates \_ download_artifacts \_ copy_modules \_ deploy_aftifacts \_ check_deployment \_ notify_mail\_ eap_deployment.yml

roles: - check_availability - download_artifacts - copy_modules - deploy_artifacts - check_deployment - notify_mail

JOB N

Version: 3.0.4JOB 2

Version: 3.0.4JOB 1

Version: 3.0.4

JOB TEMPLATE NInventory: Inventory 1Playbook: eap_deploymentVariables: - artifact_group: com.ins - artifact_id: webportal - nexus_url: ins.com/nexus - admin_mail: [email protected]: - version

JOB TEMPLATE 2Inventory: Inventory 1Playbook: eap_deploymentVariables: - artifact_group: com.ins - artifact_id: webportal - nexus_url: ins.com/nexus - admin_mail: [email protected]: - version

JOB TEMPLATE 1Inventory: Inventory 1Playbook: eap_deploymentVariables: - artifact_group: com.ins - artifact_id: webportal - nexus_url: ins.com/nexusSurveys: - version

INVENTORY N

[appserver]eap1.ins.comeap2.ins.com[webserver]httpd1.ins.com[db]posgres.ins.com

INVENTORY 2

[appserver]eap1.ins.comeap2.ins.com[webserver]httpd1.ins.com[db]posgres.ins.com

INVENTORY 1

[appserver]eap1.ins.comeap2.ins.com[webserver]httpd1.ins.com[db]posgres.ins.com

Page 17: Automatización de despliegues en Openshift con Ansible Tower
Page 18: Automatización de despliegues en Openshift con Ansible Tower
Page 19: Automatización de despliegues en Openshift con Ansible Tower
Page 20: Automatización de despliegues en Openshift con Ansible Tower

ARQUITECTURA

Page 21: Automatización de despliegues en Openshift con Ansible Tower

INTERNAL DOCKER REGISTRYDOCKER DAEMON

TOWER CLI

OPENSHIFT CLI OPENSHIFT API

Page 22: Automatización de despliegues en Openshift con Ansible Tower

INTERNAL DOCKER REGISTRYDOCKER DAEMON

TOWER CLI

OPENSHIFT CLI OPENSHIFT API

HOST

Page 23: Automatización de despliegues en Openshift con Ansible Tower

APLICACIÓN

Page 24: Automatización de despliegues en Openshift con Ansible Tower

https://github.com/gshipley/openshift3mlbparks

Page 25: Automatización de despliegues en Openshift con Ansible Tower

https://github.com/gshipley/openshift3mlbparks

Page 26: Automatización de despliegues en Openshift con Ansible Tower

https://www.openshift.com/promotions/for-developers.html

Page 27: Automatización de despliegues en Openshift con Ansible Tower

POD

POD

Page 28: Automatización de despliegues en Openshift con Ansible Tower

POD

SECRET VOLUME

USERNAME PASSWORD

/tmp/secret

Page 29: Automatización de despliegues en Openshift con Ansible Tower

STAGES

Page 30: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGE

CONFIGURE PROJECTS

TAG IMAGES

CREATE OBJECTS

Page 31: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGE

CONFIGURE PROJECTS

TAG IMAGES

CREATE OBJECTS

Page 32: Automatización de despliegues en Openshift con Ansible Tower

---- name: '[Global] Create projects' hosts: bastion become: false roles:

- role: ocp_login- role: create_projects

Page 33: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Create Projects] Create DEV project' command: "{{ OC_CLIENT_PATH }}/oc new-project {{ SERVICE_NAME }}-dev" register: result ignore_errors: True

...

Page 34: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGE

CONFIGURE PROJECTS

TAG IMAGES

CREATE OBJECTS

Page 35: Automatización de despliegues en Openshift con Ansible Tower

---- name: '[Global] Build Image' hosts: bastion become: false roles:

- role: ocp_login- role: create-clean-workspace- role: build_image

Page 36: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Build Image] Get user token' command: "{{ OC_CLIENT_PATH }}/oc whoami -t" register: whoami_result

- name: '[Build Image] Login to OCP registry' command: "docker login -u {{ OCP_USER }} -p {{ whoami_result.stdout }} {{ OC_REGISTRY_URL }}" register: login_result until: login_result.stderr == "" retries: 10 delay: 3

Page 37: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Build Image] Build image from Dockerfile' command: "docker build -t {{ OC_REGISTRY_URL }}/ {{ SERVICE_NAME }}-dev/{{ SERVICE_NAME }} {{ DOWNLOAD_PATH }} /{{ SERVICE_NAME }}"

- name: '[Build Image] Push image to the OCP registry' command: "docker push {{ OC_REGISTRY_URL }}/{{ SERVICE_NAME}} -dev/{{ SERVICE_NAME }}" register: push_result until: push_result.stderr == "" retries: 10 delay: 3

Page 38: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGE

CONFIGURE PROJECTS

TAG IMAGES

CREATE OBJECTS

Page 39: Automatización de despliegues en Openshift con Ansible Tower

---- name: '[Global] Configure projects' hosts: bastion become: false roles:

- role: ocp_login- role: create-clean-workspace- role: config_project

Page 40: Automatización de despliegues en Openshift con Ansible Tower

SECRET VOLUME

USERNAME PASSWORD

POD

Page 41: Automatización de despliegues en Openshift con Ansible Tower

SECRET VOLUME

USERNAME PASSWORD

POD

/tmp/secret

Page 42: Automatización de despliegues en Openshift con Ansible Tower

{ "apiVersion": "v1", "kind": "Secret", "metadata": { "name": "db-secret" }, "namespace": "{{ SERVICE_NAME }}", "data": { "username": "{{ item.user| b64encode }}", "password": "{{ item.pass | b64encode }}" }}

Page 43: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Configure Projects] Create secret file from template' template:

src: db-secret.json.j2dest: "{{ DOWNLOAD_PATH }}/{{ SERVICE_NAME

}}/db-secret-{{item.env}}.json" with_items: - { env: "dev", user: "{{ DB_USER_DEV }}", pass: "{{ DB_PASS_DEV }}"} - { env: "pre", user: "{{ DB_USER_PRE }}", pass: "{{ DB_PASS_PRE }}"} - { env: "pro", user: "{{ DB_USER_PRO }}", pass: "{{ DB_PASS_PRO }}"}

Page 44: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Configure Projects] Create DEV secret' command: "{{ OC_CLIENT_PATH }}/oc create -f {{ DOWNLOAD_PATH }}/{{ SERVICE_NAME }}/db-secret-dev.json"

Page 45: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Configure Projects] Create DEV template' command: "{{ OC_CLIENT_PATH }}/oc create -f {{ DOWNLOAD_PATH }}/{{ SERVICE_NAME }}/template.json"

Page 46: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Configure Projects] Enable image pulling from DEV' command: "{{ OC_CLIENT_PATH }}/oc policy add-role-to-group system:image-puller system:serviceaccounts:{{ SERVICE_NAME }}-{{ item.env }} --namespace={{ SERVICE_NAME }}-dev" with_items:

- { env: "pre"}- { env: "pro"}

when: result|succeeded

Page 47: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGE

CONFIGURE PROJECTS

TAG IMAGES

CREATE OBJECTS

Page 48: Automatización de despliegues en Openshift con Ansible Tower

---- name: '[Global] Tag Images' hosts: bastion become: false roles:

- role: ocp_login- role: tag_images

Page 49: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Tag Images] Tag DEV image' command: "{{ OC_CLIENT_PATH }}/oc tag {{ SERVICE_NAME }} :latest {{ SERVICE_NAME }}:{{ SERVICE_NAME }}-dev"

- name: '[Tag Images] Tag PRE image' command: "{{ OC_CLIENT_PATH }}/oc tag {{ SERVICE_NAME }} :latest {{ SERVICE_NAME }}:{{ SERVICE_NAME }}-pre" when: (TARGET_ENVIRONMENT == "PRE") or (TARGET_ENVIRONMENT == "PRO")

- name: '[Tag Images] Tag PRO image' command: "{{ OC_CLIENT_PATH }}/oc tag {{ SERVICE_NAME }} :latest {{ SERVICE_NAME }}:{{ SERVICE_NAME }}-pro" when: (TARGET_ENVIRONMENT == "PRO")

Page 50: Automatización de despliegues en Openshift con Ansible Tower

JENKINS PIPELINE

CREATE PROJECTS

BUILD IMAGE

CONFIGURE PROJECTS

TAG IMAGES

CREATE OBJECTS

Page 51: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Create Objects] Process template' command: "{{ OC_CLIENT_PATH }}/oc process {{ TEMPLATE_NAME }} -v APPLICATION_NAME={{ SERVICE_NAME }} ,ENV={{ ENV }},MONGODB_USER={{ MONGODB_USER }} ,MONGODB_PASSWORD={{ MONGODB_PASSWORD }} ,MONGODB_DATABASE={{ MONGODB_DATABASE }} ,MONGODB_ADMIN_PASSWORD={{ MONGODB_ADMIN_PASSWORD }} ,CONTEXT={{ ARTIFACT_ID }}-{{ ARTIFACT_VERSION }}" register: output

Page 52: Automatización de despliegues en Openshift con Ansible Tower

- name: '[Create Objects] Create objects file' copy:

content: "{{ output.stdout }}"dest: "{{ DOWNLOAD_PATH }}/{{ SERVICE_NAME }}

/objects.json"

- name: '[Create Objects] Create objects from file' command: "{{ OC_CLIENT_PATH }}/oc create -f {{ DOWNLOAD_PATH }}/{{ SERVICE_NAME }}/objects.json" ignore_errors: True

Page 53: Automatización de despliegues en Openshift con Ansible Tower

DEMO

Page 54: Automatización de despliegues en Openshift con Ansible Tower

GRACIAS!!