ci-cd-pipeline-app-murano/murano-apps/Gerrit/package/Classes/Gerrit.yaml

230 lines
8.4 KiB
YAML

Namespaces:
=: org.openstack.ci_cd_pipeline_murano_app
std: io.murano
sys: io.murano.system
ci_cd_pipeline_murano_app: org.openstack.ci_cd_pipeline_murano_app
puppet: org.openstack.ci_cd_pipeline_murano_app.puppet
conf: io.murano.configuration
Name: Gerrit
Extends: std:Application
Properties:
instance:
Contract: $.class(puppet:PuppetInstance).notNull()
name:
Contract: $.string().notNull()
warUrl:
Contract: $.string()
Default: 'http://tarballs.openstack.org/ci/test/gerrit-v2.11.9.3.eb6e48d.war'
ldap:
Contract: $.class(ci_cd_pipeline_murano_app:OpenLDAP)
userSSH:
Contract: $.string()
systemConfigRepo:
Contract: $.class(puppet:SystemConfig)
Methods:
initialize:
Body:
- $._environment: $.find(std:Environment).require()
deploy:
Body:
- super($this, $.deploy())
- If: $.getAttr(deployed, false)
Then:
Return:
- $securityGroupIngress:
- ToPort: 80
FromPort: 80
IpProtocol: tcp
External: true
- ToPort: 443
FromPort: 443
IpProtocol: tcp
External: true
- ToPort: 8081
FromPort: 8081
IpProtocol: tcp
External: true
- ToPort: 29418
FromPort: 29418
IpProtocol: tcp
External: true
- $._environment.securityGroupManager.addGroupIngress($securityGroupIngress)
- $._environment.reporter.report($this, 'Creating VM for Gerrit "{0}"'.format($.instance.name))
- $.instance.deploy()
- $._environment.reporter.report($this, 'Gerrit VM "{0}" with id {1} created'.format($.instance.name, $.instance.openstackId))
- $._environment.reporter.report($this, 'Installing puppet modules...')
# initialize System Config
- If: $.systemConfigRepo = null
Then:
- $this.systemConfig: new(puppet:SystemConfig)
Else:
- $this.systemConfig: $.systemConfigRepo
- $this.systemConfig.installOnTheNode($this.instance)
- If: $.ldap != null
Then:
- $._environment.reporter.report($this, 'Waiting while LDAP is being deployed...')
- $.ldap.deploy()
- $.createConfiguration()
- $._deployGerrit()
- $._environment.reporter.report($this, 'Switching Gerrit to a local project-config')
- $._switchProjectConfig()
- If: $.ldap != null and not $.userSSH in [null, ''] and not $.ldap.ldapUser in [null, '']
Then:
- $._environment.reporter.report($this, "Adding user's SSH public key to Gerrit.")
- $.createAccount('', $.ldap.ldapUser, $.ldap.ldapEmail, $.userSSH, $.ldap.ldapUser)
- $._environment.reporter.report($this, 'Gerrit is deployed.')
- $linux: new(conf:Linux)
- $gerritHost: $linux.runCommand($.instance.agent, 'hostname -f').stdout
- If: $.instance.assignFloatingIp
Then:
- $gerritIP: $.instance.floatingIpAddress
Else:
- $gerritIP: $.instance.ipAddresses[0]
- $._environment.reporter.report($this, format('Gerrit service is launched on host {0} accessing by IP {1}.', $gerritHost, $gerritIP))
- $._environment.reporter.report($this, format('Gerrit is available at http://{0}:80 or http://{0}:8081', $gerritIP))
- $.setAttr(deployed, true)
_deployGerrit:
Body:
- $._environment.reporter.report($this, 'Deploying Gerrit...')
- $resources: new(sys:Resources)
- $template: $resources.yaml('DeployGerrit.template')
- $.instance.agent.call($template, $resources)
#
# Project-config local repo
#
getProjectConfigRepo:
Body:
- Return: format('https://{0}/open-paas/project-config', $this.instance.ipAddresses[0])
#
# Switch to newly created project-config repo
#
_switchProjectConfig:
Body:
- $.instance.putHieraData({'project_config_repo' => $.getProjectConfigRepo()})
_createLdapConfiguration:
Body:
- $ldapInstance: $.ldap.instance
- If: $ldapInstance.assignFloatingIp
Then:
- $ldapHost: $ldapInstance.floatingIpAddress
Else:
- $ldapHost: $ldapInstance.ipAddresses[0]
- $data:
ldap_ip: $ldapHost
ldap_domain: $.ldap.domain
ldap_root_user: $.ldap.ldapRootUser
ldap_root_password: $.ldap.ldapRootPass
ldap_user: $.ldap.ldapUser
ldap_password: $.ldap.ldapPass
- $this.instance.putHieraData($data)
createConfiguration:
Body:
- If: $this.ldap != null
Then:
- $._createLdapConfiguration()
- $data:
gerrit_war_url: $this.warUrl
gerrit_github_token: ''
github_project_username: 'mirademo'
gerrit_mysql_host: 'localhost'
gerritbot_password: 'P@ssw0rd'
gerrit_db_user: 'gerrit2'
gerrit_db_password: '12345'
gerrit_db_root_password: 'P@ssw0rd'
gerrit_acls_dir: '/etc/project-config/gerrit/acls'
gerrit_notify_impact_file: '/etc/project-config/gerrit/notify_impact.yaml'
jeepyb_project_file: '/etc/project-config/gerrit/projects.yaml'
project_config_config_dir: '/etc/project-config/'
github_project_password: 'dummy content. to be done'
gerrit_email_private_key: 'dummy content. to be done'
gerrit_rest_token_private_key: 'dummy content. to be done'
welcome_message_gerrit_ssh_private_key: 'dummy content. to be done'
welcome_message_gerrit_ssh_public_key: 'dummy content. to be done'
ssh_replication_rsa_key_contents: 'dummy content. to be done'
gerrit_replication_ssh_rsa_pubkey_contents: 'dummy content. to be done'
gerrit_lp_consumer_key: 'dummy content. to be done'
gerrit_lp_access_token: 'dummy content. to be done'
gerrit_lp_access_secret: 'dummy content. to be done'
gerrit_contactstore_appsec: 'dummy content. to be done'
gerrit_contactstore_pubkey: 'dummy content. to be done'
swift_store_user: 'dummy content. to be done'
swift_store_key: 'dummy content. to be done'
# This fields autogenerated on vm
# TODO: These values should be stored in Murano too
# gerritbot_ssh_rsa_key_contents: 'dummy content. the value should be autogenerated'
# gerritbot_ssh_rsa_pubkey_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssh_dsa_key_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssh_dsa_pubkey_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssh_rsa_key_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssh_rsa_pubkey_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssh_project_rsa_key_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssh_project_rsa_pubkey_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssl_cert_file_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssl_key_file_contents: 'dummy content. the value should be autogenerated'
# gerrit_ssl_chain_file_contents: 'dummy content. the value should be autogenerated'
- $this.instance.putHieraData($data)
- $this.instance.syncHieraData()
#NOTE: this method doesn't work without ldap
createAccount:
Arguments:
- group:
Contract: $.string()
- fullName:
Contract: $.string().notNull()
- email:
Contract: $.string().notNull()
- sshKey:
Contract: $.string().notNull()
- name:
Contract: $.string().notNull()
Body:
- $resources: new(sys:Resources)
- $template: $resources.yaml('CreateAccount.template').bind(dict(
gerritUser => $.ldap.ldapRootUser,
group => $group,
fullName => $fullName,
email => $email,
sshKey => $sshKey,
name => $name))
- $.instance.agent.call($template, $resources)
createLabels:
Body:
- $._environment.reporter.report($this, 'Creating label "Verified" in Gerrit...')
- $linux: new(conf:Linux)
- $resource: new(sys:Resources)
- $script: $resource.string('scripts/create_gerrit_labels.sh')
- $linux.runCommand($.instance.agent, $script)
- $._environment.reporter.report($this, 'Label "Verified" is successfully created.')
destroy:
Body:
- $.reportDestroyed()
- $.setAttr(deployed, false)