Merge "[Puppet] Puppet-master demo"
This commit is contained in:
commit
24cc0143fe
50
murano-apps/PuppetMaster/README.rst
Normal file
50
murano-apps/PuppetMaster/README.rst
Normal file
@ -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
|
@ -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)))
|
83
murano-apps/PuppetMaster/package/UI/ui.yaml
Normal file
83
murano-apps/PuppetMaster/package/UI/ui.yaml
Normal file
@ -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
|
BIN
murano-apps/PuppetMaster/package/logo.png
Normal file
BIN
murano-apps/PuppetMaster/package/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
17
murano-apps/PuppetMaster/package/manifest.yaml
Normal file
17
murano-apps/PuppetMaster/package/manifest.yaml
Normal file
@ -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:
|
Loading…
x
Reference in New Issue
Block a user