From ed20234045cfa313cd991fc5d527bb6aee1ebd0e Mon Sep 17 00:00:00 2001 From: Nikolay Mahotkin Date: Tue, 12 Apr 2016 12:58:39 +0300 Subject: [PATCH] Adding initial skeleton of Nodepool app * Nodepool requires Jenkins and Zuul app * Now the app only installs nodepool and puts an experimental config * Once Zuul skeleton and this one are merged (they are required each other), the work will be continued in furher commits. Change-Id: I40addc8fd1156f8e4b8c9a9239998d6b4178764d --- .../Nodepool/package/Classes/Nodepool.yaml | 88 ++++++++++++++++++ .../package/Resources/DeployNodepool.template | 24 +++++ .../Resources/scripts/deploy_nodepool.sh | 16 ++++ .../package/Resources/scripts/gen_rsa_key.sh | 14 +++ .../nodepool_configure/manifests/init.pp | 12 +++ .../templates/nodepool.yaml.erb | 60 ++++++++++++ .../package/Resources/scripts/site.pp | 33 +++++++ murano-apps/Nodepool/package/UI/ui.yaml | 86 +++++++++++++++++ murano-apps/Nodepool/package/logo.png | Bin 0 -> 50122 bytes murano-apps/Nodepool/package/manifest.yaml | 20 ++++ 10 files changed, 353 insertions(+) create mode 100644 murano-apps/Nodepool/package/Classes/Nodepool.yaml create mode 100644 murano-apps/Nodepool/package/Resources/DeployNodepool.template create mode 100644 murano-apps/Nodepool/package/Resources/scripts/deploy_nodepool.sh create mode 100644 murano-apps/Nodepool/package/Resources/scripts/gen_rsa_key.sh create mode 100644 murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/manifests/init.pp create mode 100644 murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/templates/nodepool.yaml.erb create mode 100644 murano-apps/Nodepool/package/Resources/scripts/site.pp create mode 100644 murano-apps/Nodepool/package/UI/ui.yaml create mode 100644 murano-apps/Nodepool/package/logo.png create mode 100644 murano-apps/Nodepool/package/manifest.yaml diff --git a/murano-apps/Nodepool/package/Classes/Nodepool.yaml b/murano-apps/Nodepool/package/Classes/Nodepool.yaml new file mode 100644 index 0000000..578200e --- /dev/null +++ b/murano-apps/Nodepool/package/Classes/Nodepool.yaml @@ -0,0 +1,88 @@ +Namespaces: + =: io.murano.opaas + std: io.murano + res: io.murano.resources + sys: io.murano.system + opaas: io.murano.opaas + puppet: io.murano.opaas.puppet + +Name: Nodepool + +Extends: std:Application + +Properties: + instance: + Contract: $.class(puppet:PuppetInstance).notNull() + name: + Contract: $.string().notNull() + jenkins: + Contract: $.class(opaas:Jenkins).notNull() + # TODO(nmakhotkin) Add zuul property. + +Methods: + .init: + Body: + - $._environment: $.find(std:Environment).require() + + deploy: + Body: + - $.super($.deploy()) + - If: $.getAttr(deployed, false) + Then: + Return: + + - $securityGroupIngress: + - ToPort: 80 + FromPort: 80 + IpProtocol: tcp + External: true + - $._environment.securityGroupManager.addGroupIngress($securityGroupIngress) + - $._environment.reporter.report($this, 'Creating instance for Nodepool...') + - $.instance.deploy() + - $._environment.reporter.report($this, 'Nodepool instance is created.') + + - $._environment.reporter.report($this, 'Installing needed puppets for Nodepool...') + + - $this.systemConfig: new(puppet:ProjectConfig) + - $this.systemConfig.installOnTheNode($this.instance) + + - $._environment.reporter.report($this, 'Waiting while Jenkins is being deployed...') + - $.jenkins.deploy() + + - $.createConfiguration() + + - $resources: new(sys:Resources) + - $template: $resources.yaml('DeployNodepool.template') + - $._environment.reporter.report($this, 'Installing Nodepool...') + - $.instance.agent.call($template, $resources) + - $._environment.reporter.report($this, 'Nodepool is installed.') + - $host: $.detectPrimaryIP($.instance) + - $._environment.reporter.report($this, 'Nodepool is available at host {}.'.format($host)) + - $.setAttr(deployed, true) + + createConfiguration: + Body: + - $.instance.setHieraValue('nodepool_mysql_password', 'nodepool') + - $.instance.setHieraValue('nodepool_mysql_root_password', 'root') + - $.instance.setHieraValue('jenkins_api_user', $.jenkins.ldap.ldapRootUser) + - $.instance.setHieraValue('jenkins_api_key', $.jenkins.ldap.ldapRootPass) + - $jenkinsHost: $.detectPrimaryIP($.jenkins.instance) + - $.instance.setHieraValue('jenkins_host', $jenkinsHost) + + + detectPrimaryIP: + Arguments: + - instance: + Contract: $.class(res:Instance).notNull() + Body: + - If: $instance.assignFloatingIp + Then: + - $host: $instance.floatingIpAddress + Else: + - $host: $instance.ipAddresses[0] + - Return: $host + + destroy: + Body: + - $.reportDestroyed() + - $.setAttr(deployed, false) diff --git a/murano-apps/Nodepool/package/Resources/DeployNodepool.template b/murano-apps/Nodepool/package/Resources/DeployNodepool.template new file mode 100644 index 0000000..d3819b3 --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/DeployNodepool.template @@ -0,0 +1,24 @@ +FormatVersion: 2.1.0 +Version: 1.0.0 +Name: Deploy Nodepool + +Parameters: + +Body: | + deployNodepool() + +Scripts: + deployNodepool: + Type: Application + Version: 1.0.0 + EntryPoint: deploy_nodepool.sh + Files: + - 'gen_rsa_key.sh' + - 'site.pp' + - 'nodepool_configure/templates/nodepool.yaml.erb' + - 'nodepool_configure/manifests/init.pp' + Options: + captureStdout: false + captureStderr: true + verifyExitcode: true + diff --git a/murano-apps/Nodepool/package/Resources/scripts/deploy_nodepool.sh b/murano-apps/Nodepool/package/Resources/scripts/deploy_nodepool.sh new file mode 100644 index 0000000..5b2b16a --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/deploy_nodepool.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +logger Deploying Nodepool... + +/bin/bash ./gen_rsa_key.sh + +mkdir /etc/puppet/modules/nodepool_configure +mkdir /etc/puppet/modules/nodepool_configure/manifests +mkdir /etc/puppet/modules/nodepool_configure/templates + +cp nodepool_configure/manifests/init.pp /etc/puppet/modules/nodepool_configure/manifests/ +cp nodepool_configure/templates/nodepool.yaml.erb /etc/puppet/modules/nodepool_configure/templates/ + +puppet apply site.pp + +exit diff --git a/murano-apps/Nodepool/package/Resources/scripts/gen_rsa_key.sh b/murano-apps/Nodepool/package/Resources/scripts/gen_rsa_key.sh new file mode 100644 index 0000000..c367c24 --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/gen_rsa_key.sh @@ -0,0 +1,14 @@ +#!/bin/bash +logger Generate SSH Private key for nodepool + +datafile='/etc/puppet/hieradata/murano.yaml' + +# +# nodepool ssh key +# +ssh-keygen -t rsa -N "" -f nodepool_ssh.key -q + +content=`cat nodepool_ssh.key` +puppet apply --execute "yaml_setting { 'example': target=>'$datafile', key=>'nodepool_ssh_private_key', value=>'$content', }" + +exit \ No newline at end of file diff --git a/murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/manifests/init.pp b/murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/manifests/init.pp new file mode 100644 index 0000000..fb2bb24 --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/manifests/init.pp @@ -0,0 +1,12 @@ +class nodepool_configure ( + $jenkins_host = undef, + $zuul_host = undef, +) { + file { '/etc/nodepool/nodepool.yaml': + ensure => present, + owner => 'nodepool', + group => 'nodepool', + mode => '0644', + content => template('nodepool_configure/nodepool.yaml.erb') + } +} \ No newline at end of file diff --git a/murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/templates/nodepool.yaml.erb b/murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/templates/nodepool.yaml.erb new file mode 100644 index 0000000..1ce65d0 --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/nodepool_configure/templates/nodepool.yaml.erb @@ -0,0 +1,60 @@ +script-dir: /etc/nodepool/scripts +elements-dir: /etc/nodepool/elements +images-dir: /opt/nodepool_dib + + +cron: + check: '*/15 * * * *' + cleanup: '0 * * * *' + image-update: '30 * * * *' + +zmq-publishers: + - tcp://localhost:8888 # Jenkins host + +gearman-servers: # Zuul host + - host: localhost + port: 4730 + +diskimages: +- name: ubuntu-trusty + elements: + - ubuntu + - vm + - simple-init + release: trusty + env-vars: + DIB_IMAGE_CACHE: /opt/dib_cache + +labels: + - name: ubuntu-server + image: ubuntu-trusty-node + min-ready: 2 + providers: + - name: openstack-provider + +providers: + - name: openstack-provider + keypair: 'nmakhotkin' + region-name: 'RegionOne' + username: 'dev-user' + password: 'sw0rdfish' + auth-url: 'http://172.16.167.137:5000/v2.0' + project-name: 'dev' + image-type: qcow2 + max-servers: 20 + use-neutron: true + networks: + - name: dev-net + #- id: uuid + images: + - name: ubuntu-trusty-node + diskimage: ubuntu-trusty + min-ram: 2048 + private-key: /home/nodepool/.ssh/id_rsa + setup: prepare_node.sh + username: ubuntu + +targets: + - name: jenkins + hostname: '{label.name}-{provider.name}-{node_id}' + subnode-hostname: '{label.name}-{provider.name}-{node_id}-{subnode_id}' diff --git a/murano-apps/Nodepool/package/Resources/scripts/site.pp b/murano-apps/Nodepool/package/Resources/scripts/site.pp new file mode 100644 index 0000000..ef91855 --- /dev/null +++ b/murano-apps/Nodepool/package/Resources/scripts/site.pp @@ -0,0 +1,33 @@ +node default { + class { 'openstack_project::server': + sysadmins => hiera('sysadmins', []), + iptables_public_tcp_ports => [80], + } + + class { 'nodepool': + mysql_root_password => hiera('nodepool_mysql_root_password'), + mysql_password => hiera('nodepool_mysql_password'), + nodepool_ssh_private_key => hiera('nodepool_ssh_private_key'), + git_source_repo => 'https://git.openstack.org/openstack-infra/nodepool', + revision => 'master', + vhost_name => $::fqdn, + statsd_host => '', + image_log_document_root => '/var/log/nodepool/image', + image_log_periodic_cleanup => true, + enable_image_log_via_http => true, + environment => {}, + jenkins_masters => [ + { + name => 'jenkins', + url => sprintf('http://%s:8080', hiera('jenkins_host')), + user => hiera('jenkins_api_user', 'username'), + apikey => hiera('jenkins_api_key') + } + ] + } + + class { 'nodepool_configure': + jenkins_host => hiera('jenkins_host'), + require => Class['nodepool'] + } +} diff --git a/murano-apps/Nodepool/package/UI/ui.yaml b/murano-apps/Nodepool/package/UI/ui.yaml new file mode 100644 index 0000000..d715aa4 --- /dev/null +++ b/murano-apps/Nodepool/package/UI/ui.yaml @@ -0,0 +1,86 @@ +Version: 2 + +Application: + ?: + type: io.murano.opaas.Nodepool + name: $.appConfiguration.name + jenkins: $.appConfiguration.Jenkins + instance: + ?: + type: io.murano.opaas.puppet.PuppetInstance + name: generateHostname($.instanceConfiguration.unitNamingPattern, 1) + flavor: $.instanceConfiguration.flavor + image: $.instanceConfiguration.osImage + keyname: $.instanceConfiguration.keyPair + availabilityZone: $.instanceConfiguration.availabilityZone + assignFloatingIp: $.appConfiguration.assignFloatingIP + +Forms: + - appConfiguration: + fields: + - name: name + type: string + label: Application Name + initial: Nodepool + description: >- + Enter a desired name for the application. Just A-Z, a-z, 0-9, dash and + underline are allowed + - name: assignFloatingIP + type: boolean + label: Assign Floating IP + description: >- + Select to true to assign floating IP automatically + initial: true + required: false + - name: Jenkins + type: io.murano.opaas.Jenkins + required: true + description: >- + Specify Jenkins. + + - instanceConfiguration: + fields: + - name: title + type: string + required: false + hidden: true + description: Specify some instance parameters on which the application would be created + - name: flavor + type: flavor + label: Instance flavor + description: >- + Select registered in Openstack flavor. Consider that application performance + depends on this parameter. + initial: m1.tiny + required: false + - name: osImage + type: image + imageType: linux + label: Instance image + description: >- + Select a valid image for the application. Image should already be prepared and + registered in glance. + - name: keyPair + type: keypair + label: Key Pair + description: >- + Select a Key Pair to control access to instances. You can login to + instances using this KeyPair after the deployment of application. + required: false + - name: availabilityZone + type: azone + label: Availability zone + description: Select availability zone where the application would be installed. + required: false + - name: unitNamingPattern + type: string + label: Instance Naming Pattern + required: false + maxLength: 200 + regexpValidator: '^[-_\w]+$' + errorMessages: + invalid: Just letters, numbers, underscores and hyphens are allowed. + helpText: Just letters, numbers, underscores and hyphens are allowed. + description: >- + Specify a string, that will be used in instance hostname. + Just A-Z, a-z, 0-9, dash and underline are allowed. diff --git a/murano-apps/Nodepool/package/logo.png b/murano-apps/Nodepool/package/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0afb4707a39d94910dcf0b7d2231cfd0bb3d65dc GIT binary patch literal 50122 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 literal 0 HcmV?d00001 diff --git a/murano-apps/Nodepool/package/manifest.yaml b/murano-apps/Nodepool/package/manifest.yaml new file mode 100644 index 0000000..138d41b --- /dev/null +++ b/murano-apps/Nodepool/package/manifest.yaml @@ -0,0 +1,20 @@ +Format: 1.0 +Type: Application +FullName: io.murano.opaas.Nodepool +Name: Nodepool +Description: | + Nodepool is a system for launching single-use test nodes on demand based on + images built with cached data. It is designed to work with any OpenStack + based cloud, and is part of a suite of tools that form a comprehensive + test system including Jenkins and Zuul. +Author: 'Mirantis, Inc' +Tags: [Images, CI, Zuul, Jenkins] +Classes: + io.murano.opaas.Nodepool: Nodepool.yaml +UI: ui.yaml +Logo: logo.png +Require: + io.murano.opaas.puppet.ProjectConfig: + io.murano.opaas.puppet.Puppet: + io.murano.opaas.Jenkins: +# TODO(nmakhotkin): Add zuul to requirements.