From 1801f262c9c64ec10a96b561b4849ef84fc129db Mon Sep 17 00:00:00 2001
From: Alexey Khivin <akhivin@gmail.com>
Date: Wed, 29 Jun 2016 02:45:36 +0300
Subject: [PATCH] [Puppet] Puppet-master demo

Change-Id: I0becebfb46fd046f4d93ec14f1daf1aa26065023
---
 murano-apps/PuppetMaster/README.rst           |  50 +++++++
 .../Classes/PuppetMasterApplication.yaml      | 131 ++++++++++++++++++
 murano-apps/PuppetMaster/package/UI/ui.yaml   |  83 +++++++++++
 murano-apps/PuppetMaster/package/logo.png     | Bin 0 -> 4617 bytes
 .../PuppetMaster/package/manifest.yaml        |  17 +++
 5 files changed, 281 insertions(+)
 create mode 100644 murano-apps/PuppetMaster/README.rst
 create mode 100644 murano-apps/PuppetMaster/package/Classes/PuppetMasterApplication.yaml
 create mode 100644 murano-apps/PuppetMaster/package/UI/ui.yaml
 create mode 100644 murano-apps/PuppetMaster/package/logo.png
 create mode 100644 murano-apps/PuppetMaster/package/manifest.yaml

diff --git a/murano-apps/PuppetMaster/README.rst b/murano-apps/PuppetMaster/README.rst
new file mode 100644
index 0000000..4ca3edf
--- /dev/null
+++ b/murano-apps/PuppetMaster/README.rst
@@ -0,0 +1,50 @@
+Puppet Master Support for Murano
+================================
+
+Puppet is an open-source configuration management tool. It runs on many
+Unix-like systems as well as on Microsoft Windows, and includes its own
+declarative language to describe system configuration.
+
+
+This application is a demonstration of Puppet Library capabilities.
+
+
+Application creates a set of nodes and connects them to a puppet master.
+Every name in the list of the nodes names is the cert name in the puppet
+master. Dependencies can be installed by pointing Puppetfile which
+will be used to install modules by librarian-puppet. All nodes
+are included in the "production" environment and that is the only
+environment. Cron runs puppet-agent twice in an hour.
+
+Tested under Ubuntu 14.04 Murano image.
+
+
+Usage example
+^^^^^^^^^^^^^
+As an example of input data you can use:
+
+Nodes list::
+
+  server
+  slave1
+  slave2
+
+Puppetfile link::
+
+  http://paste.openstack.org/raw/529624/
+
+Main manifest::
+
+  modules/puppettest/manifests/
+
+
+The resulting environment contains GoCD server with a slaves connected.
+GoCD server will run on "server" node on port :8153
+
+Known issues
+^^^^^^^^^^^^
+
+Cron runs puppet-agent twice in an hour and agents do not run during deployment.
+You can wait while cron will run puppet agents or run them manually by executing::
+
+    /usr/bin/puppet agent --config /etc/puppet/puppet.conf --onetime --no-daemonize --verbose --no-splay
diff --git a/murano-apps/PuppetMaster/package/Classes/PuppetMasterApplication.yaml b/murano-apps/PuppetMaster/package/Classes/PuppetMasterApplication.yaml
new file mode 100644
index 0000000..2cfe7af
--- /dev/null
+++ b/murano-apps/PuppetMaster/package/Classes/PuppetMasterApplication.yaml
@@ -0,0 +1,131 @@
+Namespaces:
+  =: org.openstack.ci_cd_pipeline_murano_app.puppet
+  std: io.murano
+  res: io.murano.resources
+  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
+  net: org.openstack.ci_cd_pipeline_murano_app.utils.net
+
+Name: PuppetMasterApplication
+
+Extends: std:Application
+
+Properties:
+  server:
+    Contract: $.class(puppet:PuppetInstance)
+    Usage: InOut
+  clients:
+    Contract:
+      - $.class(puppet:PuppetClient)
+    Usage: InOut
+
+  name:
+    Contract: $.string().notNull()
+    Default: 'PuppetMaster'
+
+  puppetfileLink:
+    Contract: $.string().notNull()
+
+  nodesStr:
+    Contract: $.string().notNull()
+
+  manifest:
+    Contract: $.string().notNull()
+
+  flavor:
+      Contract: $.string().notNull()
+
+  osImage:
+    Contract: $.string().notNull()
+
+  keyPair:
+    Contract: $.string().notNull()
+
+  availabilityZone:
+    Contract: $.string().notNull()
+
+  assignFloatingToMaster:
+    Contract: $.bool().notNull()
+
+  assignFloatingToSlaves:
+    Contract: $.bool().notNull()
+
+
+Methods:
+  initialize:
+    Body:
+      - $._environment: $.find(std:Environment).require()
+
+  deploy:
+    Body:
+      - $._environment.reporter.report($this, 'Using Puppetfile to install={0}'.format($this.puppetfileLink))
+      - $nodes: $this.nodesStr.split()
+      - $._environment.reporter.report($this, 'Nodes list={0}'.format($nodes))
+
+      - $rules:
+        - FromPort: 1
+          ToPort: 65535
+          IpProtocol: tcp
+          External: false
+        - FromPort: 1
+          ToPort: 65535
+          IpProtocol: tcp
+          External: true
+        # puppet master port
+        - FromPort: 8140
+          ToPort: 8140
+          IpProtocol: tcp
+          External: false
+
+      - $this._environment.securityGroupManager.addGroupIngress(rules => $rules)
+
+      - Parallel:
+        - If: $.server = null
+          Then:
+            - $this.server: new(puppet:PuppetInstance, $this._environment,
+                name => 'master',
+                flavor => $this.flavor,
+                image => $this.osImage,
+                keyname => $this.keyPair,
+                availabilityZone => $this.availabilityZone,
+                assignFloatingIp => $this.assignFloatingToMaster)
+            - $this.server.deploy()
+
+        - If: len($this.clients) = 0
+          Then:
+            - $this.clients: $nodes.select(
+                new( puppet:PuppetClient, $this._environment,
+                  instance => new( puppet:PuppetInstance, $this._environment,
+                    name => concat('puppet_', $),
+                    flavor => $this.flavor,
+                    image => $this.osImage,
+                    keyname => $this.keyPair,
+                    availabilityZone => $this.availabilityZone,
+                    assignFloatingIp => $this.assignFloatingToSlaves),
+                  role => $))
+
+            - $this.clients.pselect($.instance.deploy())
+
+      - $master: new( puppet:PuppetServer,
+          masterInstance => $this.server,
+          environment => $this._environment,
+          manifest => $this.manifest)
+
+      # add every node with the role assigned to it
+      - $this.clients.select(
+          $master.addClient($))
+
+      - $master.configure()
+      - $master.installDependencies(
+          environment => 'production',
+          puppetfileLink => $this.puppetfileLink)
+
+
+      - $this._environment.reporter.report(
+          $this,
+          'Puppet master can be accessed on {0}'.format($.server.floatingIpAddress))
+      - $this.clients.select($this._environment.reporter.report($this,
+            '{0} can be accessed on {1}'.format(
+              $.role,
+              $.instance.floatingIpAddress)))
\ No newline at end of file
diff --git a/murano-apps/PuppetMaster/package/UI/ui.yaml b/murano-apps/PuppetMaster/package/UI/ui.yaml
new file mode 100644
index 0000000..7ff22b5
--- /dev/null
+++ b/murano-apps/PuppetMaster/package/UI/ui.yaml
@@ -0,0 +1,83 @@
+Version: 2
+
+Application:
+  ?:
+    type: org.openstack.ci_cd_pipeline_murano_app.puppet.PuppetMasterApplication
+  nodesStr: $.manifest.nodes
+  puppetfileLink: $.manifest.puppetfileLink
+  manifest: $.manifest.manifest
+
+  flavor: $.instanceConfiguration.flavor
+  osImage: $.instanceConfiguration.osImage
+  keyPair: $.instanceConfiguration.keyPair
+  availabilityZone: $.instanceConfiguration.availabilityZone
+  assignFloatingToMaster: $.instanceConfiguration.assignFloatingToMaster
+  assignFloatingToSlaves: $.instanceConfiguration.assignFloatingToSlaves
+
+Forms:
+  - manifest:
+      fields:
+        - name: nodes
+          type: text
+          label: Nodes list
+          description: >-
+            List of the nodes name. Every line means separate node connected to puppet
+            master with the same certificate name
+
+        - name: puppetfileLink
+          type: string
+          label: Puppetfile link
+          description: >-
+            Direct link to a Puppetfile
+
+        - name: manifest
+          type: string
+          label: Main manifest
+          description: >-
+            The file or directory which contains main manifest for your environment
+  - 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.medium
+          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: assignFloatingToMaster
+          type: boolean
+          label: Assign floating to master node
+          description: Assign floating to Puppet master node
+          initial: true
+          required: false
+        - name: assignFloatingToSlaves
+          type: boolean
+          label: Assign floating to slaves nodes
+          description: Assign floating to an every slave node
+          initial: true
+          required: false
diff --git a/murano-apps/PuppetMaster/package/logo.png b/murano-apps/PuppetMaster/package/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..913d3c1733102b56d89a5a1f7ffa93a5c64443c9
GIT binary patch
literal 4617
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

literal 0
HcmV?d00001

diff --git a/murano-apps/PuppetMaster/package/manifest.yaml b/murano-apps/PuppetMaster/package/manifest.yaml
new file mode 100644
index 0000000..3ef7c34
--- /dev/null
+++ b/murano-apps/PuppetMaster/package/manifest.yaml
@@ -0,0 +1,17 @@
+Format: 1.2
+Type: Application
+FullName: org.openstack.ci_cd_pipeline_murano_app.PuppetMasterApplication
+Name: PuppetMasterApplication
+Description: |
+ Puppet is an open-source configuration management tool. It runs on many
+ Unix-like systems as well as on Microsoft Windows, and includes its own
+ declarative language to describe system configuration.
+Author: 'Mirantis, Inc'
+Tags: [Server, Puppet]
+Classes:
+  org.openstack.ci_cd_pipeline_murano_app.puppet.PuppetMasterApplication: PuppetMasterApplication.yaml
+UI: ui.yaml
+Logo: logo.png
+Require:
+  org.openstack.ci_cd_pipeline_murano_app.puppet.Puppet:
+  org.openstack.ci_cd_pipeline_murano_app.utils.CiCdUtils: