From 34aafa918ca43489ac49c34ece041b38443b687f Mon Sep 17 00:00:00 2001 From: Maurizio Vitale Date: Mon, 15 Jul 2019 11:16:35 +0100 Subject: [PATCH] AdfCli - Add the kubectl-image to the adf-cli (#4932) * Add the kubectl-image to the adf-cli * fix ts lint * remove the " from the image name --- lib/cli/README.md | 8 +++ lib/cli/scripts/kubectl-image.ts | 91 ++++++++++++++++++++++++++++++++ scripts/README.md | 20 ------- scripts/docker-publish.sh | 55 ------------------- 4 files changed, 99 insertions(+), 75 deletions(-) create mode 100644 lib/cli/scripts/kubectl-image.ts delete mode 100755 scripts/docker-publish.sh diff --git a/lib/cli/README.md b/lib/cli/README.md index 050a55acb9..cd97ed9fbc 100644 --- a/lib/cli/README.md +++ b/lib/cli/README.md @@ -44,3 +44,11 @@ If you want to specify a different docker registry you can run ```bash --loginCheck --loginUsername "username" --loginPassword "password" --loginRepo "quay.io"--dockerRepo "${docker_repository}" --dockerTags "${TAGS}" --pathProject "$(pwd)" ``` + +### Kubectl update pod image + +This command allows you to update a specific service on the rancher env with a specifig tag + +```bash +adf-cli kubectl-image --clusterEnv ${clusterEnv} --clusterUrl ${clusterUrl} --username ${username} --token ${token} --deployName ${deployName} --dockerRepo ${dockerRepo} --tag ${tag} +``` diff --git a/lib/cli/scripts/kubectl-image.ts b/lib/cli/scripts/kubectl-image.ts new file mode 100644 index 0000000000..447b253864 --- /dev/null +++ b/lib/cli/scripts/kubectl-image.ts @@ -0,0 +1,91 @@ +#!/usr/bin/env node + +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { logging } from '@angular-devkit/core'; +import { spawnSync } from 'child_process'; + +export interface KubeArgs { + tag?: string; + username?: string; + token?: string; + clusterEnv?: string; + clusterUrl?: string; + dockerRepo?: string; + dockerTag?: string; + deployName?: string; +} + +function _exec(command: string, args: string[], opts: { cwd?: string }, logger: logging.Logger) { + if (process.platform.startsWith('win')) { + args.unshift('/c', command); + command = 'cmd.exe'; + } + + const { status, error, stderr, stdout } = spawnSync(command, args, { ...opts }); + + if (status !== 0) { + logger.error(`Command failed: ${command} ${args.map((x) => JSON.stringify(x)).join(', ')}`); + if (error) { + logger.error('Error: ' + (error ? error.message : 'undefined')); + } else { + logger.error(`STDERR:\n${stderr}`); + } + throw error; + } else { + return stdout.toString(); + } +} + +function _setCluster(args: KubeArgs, logger: logging.Logger) { + logger.info('Perform set-cluster...'); + const response = _exec('kubectl', [`config`, `set-cluster`, `${args.clusterEnv}`, `--server=${args.clusterUrl}`], {}, logger); + logger.info(response); +} + +function _setCredentials(args: KubeArgs, logger: logging.Logger) { + logger.info('Perform set-credentials...'); + const response = _exec('kubectl', [`config`, `set-credentials`, `${args.username}`, `--token=${args.token}`], {}, logger); + logger.info(response); +} + +function _setContext(args: KubeArgs, logger: logging.Logger) { + logger.info('Perform set-context...'); + const response = _exec('kubectl', [`config`, `set-context`, `${args.clusterEnv}`, `--cluster=${args.clusterEnv}`, `--user=${args.username}`], {}, logger); + logger.info(response); +} + +function _useContext(args: KubeArgs, logger: logging.Logger) { + logger.info('Perform use-context...'); + const response = _exec('kubectl', [`config`, `use-context`, `${args.clusterEnv}`], {}, logger); + logger.info(response); +} + +function _setImage(args: KubeArgs, logger: logging.Logger) { + logger.info('Perform set image...'); + const response = _exec('kubectl', [`set`, `image`, `deployment/${args.deployName}`, `alfresco-adf-app=${args.dockerRepo}:${args.tag}`], {}, logger); + logger.info(response); +} + +export default async function (args: KubeArgs, logger: logging.Logger) { + _setCluster(args, logger); + _setCredentials(args, logger); + _setContext(args, logger); + _useContext(args, logger); + _setImage(args, logger); +} diff --git a/scripts/README.md b/scripts/README.md index 0d982331ee..384fe85d54 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -259,26 +259,6 @@ Extract the i18n files from the repo and create a zip ./extract-langs.sh ``` -# docker-publish.sh - -***docker-publish.sh*** - -publish doker images in the selected repository - -## Options - -| Option | Description | -| --- | --- | -| -u or --username | username | -| -p or --password | password | -| -t or --tags | tags | - -## Examples - -```sh -./docker-publish.sh -``` - # test-e2e-bc.sh ***test-e2e-bc.sh*** diff --git a/scripts/docker-publish.sh b/scripts/docker-publish.sh deleted file mode 100755 index 3af7c864eb..0000000000 --- a/scripts/docker-publish.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -set -e -eval EXEC_LOGIN=false - -show_help() { - echo "Usage: docker_publish.sh" - echo "" - echo "-u or --username username docker repo" - echo "-p or --passwor password docker repo" - echo "-t or --tags tags comma separated" -} - -username_set() { - USERNAME=$1 -} - -password_set() { - PASSWORD=$1 - EXEC_LOGIN=true -} - - -tags_set() { - TAGS=$1 -} - -while [[ $1 == -* ]]; do - case "$1" in - -h|--help|-\?) show_help; exit 0;; - -u|--username) username_set $2; shift 2;; - -p|--password) password_set $2; shift 2;; - -t|--tags) tags_set $2; shift 2;; - -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; - esac -done - -# Tag and push image for each additional tag -for current_tag in $(echo $TAGS | sed "s/,/ /g") -do - -echo "====== PUBLISH DOCKER IMAGE TAG ${current_tag} =====" - -docker build -t alfresco/demo-shell:${current_tag} . -docker tag alfresco/demo-shell:${current_tag} alfresco/demo-shell:${current_tag} - -if $EXEC_LOGIN == true; then - echo "====== LOGIN =====" - docker login -u "${USERNAME}" -p "${PASSWORD}" -fi - -docker push "alfresco/demo-shell" -echo "====== CLEAN LOCAL IMAGE TAG ${current_tag} =====" -docker rmi -f alfresco/demo-shell:${current_tag} -done