From 1d72f7743be4bd851e0c7cd6fec1b92e2ee31e7b Mon Sep 17 00:00:00 2001 From: Rustam Tagaev Date: Wed, 18 Sep 2024 13:07:58 +0300 Subject: [PATCH] [DO-1026] create_license (!34) Reviewed-on: https://git.avroid.tech/DevOps/jenkins-pipelines/pulls/34 Reviewed-by: Aleksandr Vodyanov --- jobs-dsl/folders/License_server.groovy | 4 + .../jobs/License-server/create_license.groovy | 78 ++++++++++++++ .../License-server/create-license.groovy | 102 ++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 jobs-dsl/folders/License_server.groovy create mode 100644 jobs-dsl/jobs/License-server/create_license.groovy create mode 100644 pipelines/License-server/create-license.groovy diff --git a/jobs-dsl/folders/License_server.groovy b/jobs-dsl/folders/License_server.groovy new file mode 100644 index 0000000..d3bf6dd --- /dev/null +++ b/jobs-dsl/folders/License_server.groovy @@ -0,0 +1,4 @@ +folder('License-server') { + displayName('License-server') + description('Jobs for License-server') +} diff --git a/jobs-dsl/jobs/License-server/create_license.groovy b/jobs-dsl/jobs/License-server/create_license.groovy new file mode 100644 index 0000000..f2c5423 --- /dev/null +++ b/jobs-dsl/jobs/License-server/create_license.groovy @@ -0,0 +1,78 @@ +pipelineJob('License-server/create-license') { + description("Создание лицензии на тест окружении") + definition { + cpsScm { + scm { + git { + remote { + url("${JENKINS_GIT_REPOSITORY_URL}/DevOps/jenkins-pipelines.git") + credentials("${JENKINS_GIT_CREDENTIALS_HTTP}") + } + branch('master') + } + } + scriptPath('pipelines/License-server/create-license.groovy') + } + } + + properties { + disableConcurrentBuilds() + } + + parameters { + string { name('LICENSE_COUNT') + defaultValue('') + description('Количество лицензии') + } + string { name('PRODUCT_ID') + defaultValue('') + description('Идентификатор продукта к которому будут привязаны лицензии') + } + choice { + name('LICENSE_KIND') + choices(["SINGLE","MULTIPLE"]) + description('Eдиничная или множественная лицензия') + } + choice { + name('LICENSE_TYPE') + choices(["TRIAL","COMMERCIAL","UNLIMITED"]) + description('Коммерческая, Триальная или Бессрочная') + } + string { name('LICENSE_DURATION') + defaultValue('') + description('Валидный период лицензии в месяцах') + } + string { name('OWNER_TITLE') + defaultValue('') + description('Название новой компании') + } + string { name('OWNER_ID') + defaultValue('') + description('Идентификатор существующего Владельца') + } + string { name('INSTALLATION_LIMIT') + defaultValue('1') + description('Количество возможных созданных инсталляции') + } + string { name('KEY_LIMIT') + defaultValue('1') + description('Максимальное количество созданных ключей') + } + string { name('VALIDATION_PERIOD') + defaultValue('1') + description('Проверка в часах') + } + string { name('ADMIN_EMAIL') + defaultValue('') + description('Почта администратора') + } + string { name('OPERATOR_LOGIN') + defaultValue('') + description('Логин оператора') + } + string { name('COMMENT') + defaultValue('') + description('Комментарий') + } + } +} diff --git a/pipelines/License-server/create-license.groovy b/pipelines/License-server/create-license.groovy new file mode 100644 index 0000000..625940f --- /dev/null +++ b/pipelines/License-server/create-license.groovy @@ -0,0 +1,102 @@ +@Library('shared-lib') _ + +properties([ + buildDiscarder(logRotator(artifactNumToKeepStr: '10', + numToKeepStr: '10')), + disableConcurrentBuilds(), + parameters([ + string(name: 'LICENSE_COUNT', defaultValue: '', description: 'Количество лицензии'), + string(name: 'PRODUCT_ID', defaultValue: '', description: 'Идентификатор продукта к которому будут привязаны лицензии'), + choice( + name: 'LICENSE_KIND', + choices: ["SINGLE","MULTIPLE"], + description: 'Eдиничная или множественная лицензия' + ), + choice( + name: 'LICENSE_TYPE', + choices: ["TRIAL","COMMERCIAL","UNLIMITED"], + description: 'Коммерческая, Триальная или Бессрочная' + ), + string(name: 'LICENSE_DURATION', defaultValue: '', description: 'Валидный период лицензии в месяцах'), + string(name: 'OWNER_TITLE', defaultValue: '', description: 'Название новой компании'), + string(name: 'OWNER_ID', defaultValue: '', description: 'Идентификатор существующего Владельца'), + string(name: 'INSTALLATION_LIMIT', defaultValue: '1', description: 'Количество возможных созданных инсталляции'), + string(name: 'KEY_LIMIT', defaultValue: '1', description: 'Максимальное количество созданных ключей'), + string(name: 'VALIDATION_PERIOD', defaultValue: '1', description: 'Проверка в часах'), + string(name: 'ADMIN_EMAIL', defaultValue: '', description: 'Почта администратора'), + string(name: 'OPERATOR_LOGIN', defaultValue: '', description: 'Логин оператор'), + string(name: 'COMMENT', defaultValue: '', description: 'Комментарий (необязательно)'), + ]), +]) + +if (params.LICENSE_COUNT == '' || + params.LICENSE_DURATION == '' || + (params.OWNER_TITLE == '' && params.OWNER_ID == '') || + params.INSTALLATION_LIMIT == '' || + params.KEY_LIMIT == '' || + params.VALIDATION_PERIOD == '' || + params.ADMIN_EMAIL == '' || + params.OPERATOR_LOGIN == ''){ + + print "Все обязательные параметры должны быть заполнены" + currentBuild.result = 'FAILURE' + + return +} + +String licApiServer = 'h-license-manager-api-test.avroid.cloud' + +Map configuration = [ + vaultUrl: 'https://vault.avroid.tech', + vaultCredentialId: 'vault-role', + engineVersion: 2 +] + +List sshPassword = [ + [path: 'team-devops/accounts/ldap/service_accounts/svc_jenkins', engineVersion: 2, secretValues: + [ + [vaultKey: 'password'], + ] + ] +] + +String cmd = "docker exec license_server-api-1 python manage.py avl_mass_license_operator_create" + + " --license-count ${params.LICENSE_COUNT}" + + " --product-id ${params.PRODUCT_ID}" + + " --license-kind ${params.LICENSE_KIND}" + + " --license-type ${params.LICENSE_TYPE}" + + " --license-duration ${params.LICENSE_DURATION}" + + " --installation-limit ${params.INSTALLATION_LIMIT}" + + " --key-limit ${params.KEY_LIMIT}" + + " --validation-period ${params.VALIDATION_PERIOD}" + + " --admin-email ${params.ADMIN_EMAIL}" + + " --operator-login ${params.OPERATOR_LOGIN}" + +if (params.OWNER_ID != '' && params.OWNER_TITLE != '') { + print "Только один из этих параметров должен быть передан (OWNER_ID, OWNER_TITLE)" + currentBuild.result = 'FAILURE' + return +} + +if (params.OWNER_TITLE != '') { + cmd = cmd + " --owner-title \'${params.OWNER_TITLE}\'" +} + +if (params.OWNER_ID != '') { + cmd = cmd + " --owner-id ${params.OWNER_ID}" +} + +if (params.COMMENT != '') { + cmd = cmd + " --comment \'${params.COMMENT}\'" +} + +node('slave01') { + stage('Create license') { + print cmd + withVault([configuration: configuration, vaultSecrets: sshPassword]) { + sh """ + sshpass -p $password ssh jenkins@${licApiServer} \"${cmd}\" + """ + } + } +}