From 20718b18c18c850736e2562a589ddefe66743a72 Mon Sep 17 00:00:00 2001 From: "Ketelsen, Sven" Date: Wed, 26 Oct 2022 13:08:37 +0000 Subject: [PATCH] MOB-367 added script for pull/tag/push images between stages --- scripts/update-docker-image.sh | 0 scripts/upgrade-docker-image.sh | 17 +++++ update-docker-image.yml | 109 ++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) mode change 100644 => 100755 scripts/update-docker-image.sh create mode 100755 scripts/upgrade-docker-image.sh create mode 100644 update-docker-image.yml diff --git a/scripts/update-docker-image.sh b/scripts/update-docker-image.sh old mode 100644 new mode 100755 diff --git a/scripts/upgrade-docker-image.sh b/scripts/upgrade-docker-image.sh new file mode 100755 index 0000000..49ee88c --- /dev/null +++ b/scripts/upgrade-docker-image.sh @@ -0,0 +1,17 @@ +# update a docker image with remote docker deamon (ssh) (pull/tag/push) +########################################################################### +# update-docker-image.sh +########################################################################### +# upgrade-docker-image.sh qa smardigo smardigo keycloak 14.0.0.2 +# upgrade-docker-image.sh prodnso smardigo smardigo connect-whitelabel-app latest + +FROM="dev-harbor-01.smardigo.digital/$2/$4:$5" +TO="$1-harbor-01.smardigo.digital/$3/$4:$5" + +echo +echo updating $TO with image from $FROM +echo + +docker pull $FROM +docker tag $FROM $TO +docker push $TO diff --git a/update-docker-image.yml b/update-docker-image.yml new file mode 100644 index 0000000..cea96b8 --- /dev/null +++ b/update-docker-image.yml @@ -0,0 +1,109 @@ +--- + +# Parameters: +# playbook inventory +# stage := the name of the stage (e.g. dev, int, qa, prod) +# source_project := project to use in source regoistry +# source_image_name := image name to pull from source regoistry +# source_image_version := image version to pull from source regoistry +# destination_project := project to use in destination regoistry, default source_project +# destination_image_name := (optional) image name for push to destination regoistry, default source_image_name +# destination_image_version := (optional) image version for push to destination regoistry, source_image_version +# smardigo message callback +# scope_id := (scope id of the management process) +# process_instance_id := (process instance id of the management process) +# smardigo_management_action := (smardigo management action anme of the management process) + +############################################################# +# Creating inventory dynamically for given parameters +############################################################# + +- hosts: localhost + gather_facts: false + connection: local + + pre_tasks: + - name: "Check if ansible version is at least 2.10.x" + assert: + that: + - ansible_version.major >= 2 + - ansible_version.minor >= 10 + msg: "The ansible version has to be at least ({{ ansible_version.full }})" + +# add virtual server to load stage specific variables as context + - name: "Add <{{ stage }}-virtual-host-to-read-groups-vars> to hosts" + add_host: + name: "{{ stage }}-virtual-host-to-read-groups-vars" + groups: + - "stage_{{ stage }}" + changed_when: False + +############################################################# +# Creating inventory dynamically for given parameters +############################################################# + +- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" + serial: "{{ serial_number | default(1) }}" + gather_facts: false + connection: local + + pre_tasks: + - name: "Import autodiscover pre-tasks" + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always + + tasks: + - name: "Add all servers for stage {{ stage }} to inventory" + add_host: + name: "{{ item.name }}" + groups: + - "stage_{{ stage }}" + - "{{ item.service }}" + stage_server_infos: "{{ stage_server_infos }}" + changed_when: False + with_items: "{{ stage_server_infos }}" + +############################################################# +# +############################################################# + +- hosts: "{{ stage }}-harbor-01" + serial: "{{ serial_number | default(1) }}" + vars: + ansible_ssh_host: "{{ stage_server_domain }}" + + tasks: + - fail: + msg: "Variable '{{ item }}' is not defined" + when: + item not in hostvars[inventory_hostname] + with_items: + - source_project + - source_image_name + - source_image_version + + - name: "Pull/Tag/Push image <{{ source_project }}/{{ source_image_name }}:{{ source_image_version }}>" + community.docker.docker_image: + name: "dev-harbor-01.smardigo.digital/{{ source_project }}/{{ source_image_name }}:{{ source_image_version }}" + repository: "{{ shared_service_harbor_hostname }}/{{ destination_project | default(source_project) }}/{{ destination_image_name | default(source_image_name) }}:{{ destination_image_version | default(source_image_version) }}" + force_tag: true + source: pull + push: true + +############################################################# +# Sending smardigo management message to process +############################################################# + +- hosts: "{{ stage }}-virtual-host-to-read-groups-vars" + serial: "{{ serial_number | default(1) }}" + gather_facts: false + connection: local + run_once: true + vars: + connect_jwt_username: "{{ management_admin_username }}" + + tasks: + - name: "Sending smardigo management message to <{{ smardigo_management_url }}>" + include_tasks: tasks/smardigo_management_message.yml