2. Agenda
Why Murano?
What is Murano?
Murano architecture
How to use Murano?
Install and configure Murano
push-a-button style deployment for end user
Application Catalog Design in Murano
Murano best practices
Troubleshooting
Understand how Murano-agent works
2
3. Why Murano?
4
This is how we buy product
in Amazon.com.
This is how we will consume
cloud service on OpenStack by
Murano.
4. What is Murano?
What is Murano
Just like hardware will be useless without software, virtual machine is useless
without application.
Murano is an application catalog service runs on the top of OpenStack IaaS
layer.
Goal
compose and deploy composite environments on the Application abstraction
level via UI or rest API
application life cycle management
be an integration point for various applications and service in OpenStack
Source code
https://git.openstack.org/cgit/?q=Murano
https://launchpad.net/Murano 5
6. Murano architecture
7
❶ user send request via Murano dashboard to Murano
python client
❷ Murano python client send request to Murano API
server
❸ Murano api server send the request to rabbitmq
❹ Murano conductor pick the request message from
queue
❺ Murano conductor parse the message and construct
a heat template to heat engine
❻Murano conductor send the really deployment
execution plan to the rabbitmq as Murano agent task
❼ heat deploy the whole IaaS level infrastructure via
various OpenStack services
❽ OpenStack services provision the vm instances with
Murano-agent enabled.
❾ on vms Murano-agent pick up the execution plan
assigned by the Murano conductor and execute them via
various scripts on certain OS
7. Murano components
Murano API Service
• Murano API provides access to the Murano orchestration engine via API.
Conductor Service(Orchestration Engine)
• Conductor is a Murano orchestration engine that transforms object model sent by REST API service into a series
of Heat and Murano-Agent commands.
Murano Repository Service
• Murano Repository provides access to metadata for Murano Conductor and Murano Dashboard. It also allows to
manage metadata objects via API. Editing service definitions (and other data stored in Murano Repository) is
made separately for each tenant.
Murano Dashboard
• Murano Dashboard provides Web UI for Murano Project.
8
8. How to use Murano?
Murano personas
Install and configure Murano
push-a-button style deploy for end user
Application Catalog Design in Murano
9
14. Application Catalog Design in Murano
most complex and important part in Murano
generic workflow is
build Murano-agent enabled vm image
create application package
specify the billing rules and usage metrics
test and verify
publish to Murano catalog
15
15. Design an application catalog high level
overview
16
apache
OS
Modeling
in Murano
Apache
Service
in OpenStack
Apache service
Linux Windows
16. build Murano-agent enabled vm image
build Murano windows image
Install Required Packages
Configure Shared Resource
Prerequisites
Additional Software
Build Windows Image
(Automatic Way)
Build Windows Image (Manual
Way)
Upload Image Into Glance
17
• build Murano Linux image
• Install Required Packages
• Build Linux Image
• Guest VM Linux OS
preparation
• Upload Image Into Glance
17. Building Windows Image
Install Required Packages
Configure Shared Resource
Prerequisites
Additional Software
Build Windows Image (Automatic Way)
Build Windows Image (Manual Way)
Upload Image Into Glance
18
19. Building Windows Image -Configure Shared
Resource
Configure samba based share
># mkdir -p /opt/samba/share
># chown -R nobody:nogroup /opt/samba/share
Configure samba server (/etc/samba/smb.conf).
...
[global]
...
security = user
...
[share]
comment = Deployment Share
path = /opt/samba/share
browsable = yes
read only = no
create mask = 0755
guest ok = yes
guest account = nobody
...
Restart services.
># service smbd restart
># service nmbd restart
20
20. Building Windows Image -Prerequisites•${SHARE_PATH}/libvirt/images/ws-2012-eval.iso
•http://technet.microsoft.com/en-us/evalcenter/hh670538.aspx
Windows 2012 Server ISO evaluation version
•${SHARE_PATH}/libvirt/images/virtio-win-0.1-52.iso
•http://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-52.iso
VirtIO drivers for Windows
•${SHARE_PATH}/share/files/CloudbaseInitSetup_Beta.msi
•http://www.cloudbase.it/downloads/CloudbaseInitSetup_Beta.msiCloudBase-Init for Windows
•${SHARE_PATH}/share/files/Far30b3367.x64.20130426.msi
•http://www.farmanager.com/files/Far30b3525.x64.20130717.msi
Far Manager
•${SHARE_PATH}/share/files/Git-1.8.1.2-preview20130201.exe
•https://msysgit.googlecode.com/files/Git-1.8.3-preview20130601.exe
Git client
•${SHARE_PATH}/share/files/SysinternalsSuite.zip
•http://download.sysinternals.com/files/SysinternalsSuite.zipSysinternals Suite
•${SHARE_PATH}/share/files/unzip.exe
•https://www.dropbox.com/sh/zthldcxnp6r4flm/-k1Om_V6XR
unzip.exe tool
•${SHARE_PATH}/share/files/Windows6.1-KB2506143-x64.msu
•http://www.microsoft.com/en-us/download/details.aspx?id=34595PowerShell v3
•${SHARE_PATH}/share/files/dotNetFx40_Full_x86_x64.exe
•http://www.microsoft.com/en-us/download/details.aspx?id=17718.NET 4.0
•${SHARE_PATH}/share/files/dotNetFx45_Full_setup.exe
•http://www.microsoft.com/en-us/download/details.aspx?id=30653
.NET 4.5
•${SHARE_PATH}/share/files/MuranoAgent.zip
•https://www.dropbox.com/sh/zthldcxnp6r4flm/-k1Om_V6XRMurano Agent 21
21. Building Windows Image -Additional Software
Windows ADK
${SHARE_PATH}/libvirt/images/ws-2012-eval.iso
Windows Assessment and Deployment Kit (ADK) for Windows® 8 is required to build your own answer files for auto unattended Windows installation.
http://technet.microsoft.com/en-us/evalcenter/hh670538.aspx
PuTTY
PuTTY is a useful tool to manage your Linux boxes via SSH.
Windows Server 2012 ISO image
Image Name: 9200.16384.WIN8_RTM.120725-1247_X64FRE_SERVER_EVAL_EN-US-HRM_SSS_X64FREE_EN-US_DV5.iso
URL: http://technet.microsoft.com/en-US/evalcenter/hh670538.aspx?ocid=&wt.mc_id=TEC_108_1_33
VirtIO Red Hat drivers ISO image
Download drivers from http://alt.fedoraproject.org/pub/alt/virtio-win/stable/
Floppy Image With Unattended File
Create empty floppy image in your home folder
># dd bs=512 count=2880
if=/dev/zero of=~/floppy.img
mkfs.msdos ~/floppy.img
Mount the image to /media/floppy
># mkdir /media/floppy mount -o loop
~/floppy.img /media/floppy
Download autounattend.xml file from https://raw.github.com/stackforge/Murano-deployment/master/image-builder/share/files/ws-2012-std/autounattend.xml
># cd ~
># wget https://raw.github.com/stackforge/Murano-deployment
/master/image-builder/share/files/ws-2012-std/autounattend.xmlMurano Agent
Copy our autounattend.xml to /media/floppy
># cp ~/autounattend.xml /media/floppy
Unmount the image
># umount /media/floppy
22
22. Building Windows Image- Build Windows
Image (Automatic Way) Clone Murano-deployment repository
># git clone git://github.com/stackforge/Murano-deployment.git
Change directory to Murano-deployment/image-builder folder.
Create folder structure for image builder
># make build-root
Create shared resource
Add to /etc/samba/smb.conf.
[image-builder-share]
comment = Image Builder Share
browsable = yes
path = /opt/image-builder/share
guest ok = yes
guest user = nobody
read only = no
create mask = 0755
Restart samba services.
># restart smbd && restart nmbd
Test that all required files are in place
># make test-build-files
Get list of available images
># make
Run image build process
># make ws-2012-std
Wait until process finishes
he image file ws-2012-std.qcow2 should be stored under /opt/image-builder/share/images folder. 23
23. Building Windows Image- Build Windows
Image (Manual Way)
Get Post-Install Scripts
Download package installation script named wpi.ps1 from https://raw.github.com/stackforge/Murano-
deployment/master/image-builder/share/scripts/ws-2012-std/wpi.ps1
Download Clean-up script Start-Sysprep.ps1 from https://raw.github.com/stackforge/Murano-
deployment/master/image-builder/share/scripts/ws-2012-std/Start-Sysprep.ps1
Create a VM
Using CLI Tools
Preallocate disk image
># qemu-img create -f raw /var/lib/libvirt/images/ws-2012.img 40G
Start the VM
># virt-install --connect qemu:///system --hvm --name WinServ
--ram 2048 --vcpus 2 --cdrom /opt/samba/share/9200.16384.WIN8_RTM
.120725-1247_X64FRE_SERVER_EVAL_EN-US-HRM_SSS_X64FREE_EN-US_DV5.ISO
--disk path=/opt/samba/share/virtio-win-0.1-52.iso,device=cdrom
--disk path=/opt/samba/share/floppy.img,device=floppy
--disk path=/var/lib/libvirt/images/ws-2012.qcow2
,format=qcow2,bus=virtio,cache=none
--network network=default,model=virtio
--memballoon model=virtio --vnc --os-type=windows
--os-variant=win2k8 --noautoconsole
--accelerate --noapic --keymap=en-us --video=cirrus –force
24
24. Building Windows Image- Build Windows
Image (Manual Way)-cont
Using virt-manager UI
Launch virt-manager from shell as root
Set a name for VM and select Local install media
Add one cdrom and attach Windows Server ISO image to it
Select OS type Windows and it's version Windows Server 2008
Set CPU and RAM amount
Deselect option Enable storage for this virtual machine
Select option Customize configuration before install
Add second cdrom for ISO image with virtio drivers
Add a floppy drive and attach our floppy image to it
Add (or create new) HDD image with Disk bus VirtIO and storage format RAW
Set network device model VirtIO
Start installation process and open guest vm screen through Console button
Convert the image from RAW to QCOW2 format.
# qemu-img convert -O qcow2 /var/lib/libvirt/images/ws-2012.raw
/var/lib/libvirt/images/ws-2012-ref.qcow2
25
25. Building Windows Image -Upload Image Into
Glance
import your disk image to Glance
>$ glance image-create --name <NAME>
--is-public true --disk-format qcow2
--container-format bare
--file <IMAGE_FILE>
--property <IMAGE_METADATA>
to update the exiting image meta data
>$ glance image-update <IMAGE-ID> --property <IMAGE_MATADATA>
26
26. Building Linux Image
Install Required Packages
Build Linux Image
Guest VM Linux OS preparation
Upload Image Into Glance
27
28. Building Linux Image-Build Linux Image
Create a VM via CLI
Preallocate disk image
># qemu-img create -f qcow2 /var/lib/libvirt/images/cloud-linux.img 10G
Start the VM
># virt-install --connect qemu:///system --hvm --name cloud-linux
--ram 2048 --vcpus 2 --cdrom /PATH_TO_YOUR_LINUX.ISO
--disk path=/var/lib/libvirt/images/cloud-linux.img,
format=qcow2,bus=virtio,cache=none
--network network=default,model=virtio
--memballoon model=virtio --vnc --os-type=linux
--accelerate --noapic --keymap=en-us --video=cirrus --force
29
29. Building Linux Image-Build Linux Image
Create a VM via virt-manager UI
Launch virt-manager from shell as root
Set a name for VM and select Local installation media
Add one cdrom and attach your linux ISO image to it
Select OS type Linux and it's version choose yours
Set CPU and RAM amount
Deselect option Enable storage for this virtual machine
Select option Customize configuration before install
Add (or create new) HDD image with Disk bus VirtIO and storage
format QCOW2
Set network device model VirtIO
Start installation process and open guest vm screen
through Console button
30
30. Building Linux Image-Guest VM Linux OS
preparation OS system required tools preparation
># apt-get -y update; apt-get -y dist-upgrade
># apt-get install -y git unzip make cmake gcc
python-dev python-pip openssh-server
Murano-agent installation steps
># mkdir -p /opt/git
># cd /opt/git
># git clone https://github.com/stackforge/Murano-agent.git
># cd Murano-agent/python-agent
># git checkout release-0.3
># chmod a+x setup*.sh
# To install Murano Agent on Ubuntu run:
># ./setup.sh install
# To install Murano Agent on CentOS run:
># ./setup-centos.sh install
cloud-init installation
install cloud-init
># apt-get install -y cloud-init cloud-initramfs-growroot
# dpkg-reconfigure cloud-init
cloud-init configuration options
># vi /etc/cloud/cloud.cfg
user: ec2-user
disable_root: 1
preserve_hostname: False
31
31. Building Linux Image-Guest VM Linux OS
preparation
Security setup
># useradd -m -G sudo -s /bin/bash ec2-user
># passwd ec2-user
># echo "ec2-user ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ec2-user
># chmod 440 /etc/sudoers.d/ec2-user
Disable SSH password-based logins in the /etc/ssh/sshd_config.
...
GSSAPIAuthentication no
PasswordAuthentication no
PermitRootLogin no
...
Network handling
# rm -f /etc/udev/rules.d/70-persistent-net.rules
Shutdown VM
Convert the image from RAW to QCOW2
># qemu-img convert -O qcow2 /var/lib/libvirt/images/cloud-linux.img
/var/lib/libvirt/images/cloud-linux.img.qcow2
32
32. Building Linux Image-Upload Image Into
Glance
import image to glance
># glance image-create --disk-format=qcow2 --container-format=bare
--is-public=true --file=cloud-linux.img --name=cloud-linux
33
33. create application package
Step 1. Prepare Execution Plans
Step 2. Prepare MuranoPL class definitions
Step 3. Prepare Dynamic UI Form Definition
Step 4. Prepare application logo
Step 5. Prepare manifest file
Step 6. Compose a zip archive
34
34. create application package
Step 1. Prepare Execution Plans
FormatVersion - version of Execution Plan syntax format
Version - version of Execution Plan
Name - human-readable name of the Execution Plan
Parameters - parameters received from MuranoPL
Body - Python statement, should start with | symbol
Scripts - dictionary that maps script names to script definitions.
Type: Deployment Platform name that script is targeted to.
Version: optional minimum version of deployment platform/executor required by the
script.
EntryPoint: relative path to the file that contains a script entry point
Files: This is an optional array of additional files required for the script. Use <> to specify
a relative path to the file. The root directory is Resource/scripts.
Options: an optional argument of type contains additional options
35
35. Example - DeployTelnet.template
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Telnet
Parameters:
appName: $appName
Body: |
return deploy(args.appName).stdout
Scripts:
deploy:
Type: Application
Version: 1.0.0
EntryPoint: deployTelnet.sh
Files:
- installer.sh
- common.sh
Options:
captureStdout: true
captureStderr: false 36
Like main func
Like sub func
Like 2>&1
37. MuranoPL
Developed for managing complex compound applications with
minimal code duplication.
Has YAML-based syntax.
Built on classes, composition and inheritance.
Safe enough to be used for execution of untrusted code
38
38. Murano PL – YAQL(Yet Another Query
Language) https://github.com/ativelkov/yaql
query language designed as part of Murano project.
a language for expression evaluation
presence of ‘$’ sign
no built in list of functions
Everything YAQL can access is customizable
3* foo(3,6) depends on the implementation of ‘foo’ and operator ‘*’
$foo means get the value of $foo?
a lot of OOTB functions
no assignment operator in YAQL
‘=‘ means ‘==‘ in Python
39
39. Murano PL – common class structure
Name: class name
Namespaces: namespaces specification
Extends: [list of parent classes]
Properties: properties declaration
Workflow:
methodName:
Arguments:
- list
- of
- arguments
Body:
- list
- of
- instructions
40
Murano.overview
class MyClass
(MyBase1, MyBase2,…):
name = ‘hello’
value = ‘world’
def say(self,*args,**kargs):
pass
def say_again(self, *args, **kargs):
pass
40. Murano PL – common class structure-
Namespaces
Namespaces:
=: com.mirantis.Murano.services.windows
srv: com.mirantis.Murano.services
std: com.mirantis.Murano
srv:foo equals to com.mirantis.Murano.services.foo
‘=‘ means current namespace ‘MyClass’ equals
com.mirantis.Murano.services.windows.MyClass
41
41. Murano PL – common class structure- Extends
Extends: [base1, base2,..]
Extends: Base
Extends:
42
MyClass(base1,base2,..)
MyClass(Base)
MyClass(com.mirantis.Murano.Object)
42. Murano PL – common class structure- Properties
propertyName:
Contract: property
contract
Usage: property usage
Default: property default
43
43. Murano PL – common class structure- Properties-
Contract
YAQL expressions to define expected type of value and constraints imposed on this
property.
44
44. Murano PL – common class structure- Properties-
contract
45
45. Murano PL – common class structure-
Properties-Usage
Usage states purpose of the property.
indicates who and how can access the property
46
46. Murano PL – common class structure-
Properties-Default
Specify the default value of the property
Conform to the constraints set by contract.
47
47. Murano PL – common class structure-
Workflow
Workflows are the methods that together describe how the entities
that are represented by MuranoPL classes deployed.
48
methodName:
Arguments:
- list
- of
- arguments
Body:
- list
- of
- instructions
3 types of instructions
Expressions
Assignment
Block constructs
48. Murano PL – common class structure-
Workflow-Expression
49
• YAQL expressions
• in a syntax like $obj.methodName(arguments)
49. Murano PL – common class structure-
Workflow-Assignment
50
• YAQL expressions
• single-key dictionaries with YAQL
expression as key and arbitrary
structure as a value
50. Murano PL – common class structure-
Workflow-Blocks
51
• Block constructs control program flow.
52. Dynamic UI
Goal
generate application creation forms "on-the-fly“
YAML format
Version - points out to which syntax version is used, optional
Templates - optional, auxiliary section, using together with an Application
section, optional
Application - object model description which will be used in application
deployment, required
Forms - web form definitions, required
YAQL
https://wiki.openstack.org/wiki/Murano/Documentation/DynamicUI#Dyna
mic_UI_Definition_specification
53
55. Dynamic UI -telnet ui definition example
Forms:
- serviceConfiguration:
fields:
- name: title
type: string
required: false
hidden: true
description: Telnet service that can be installed at linux
- name: name
type: string
label: Service Name
description: >-
Enter a desired name for a service. Just A-Z, a-z, 0-9, dash and
underline are allowed.
minLength: 2
maxLength: 64
regexpValidator: '^[-w]+$'
errorMessages:
invalid: Just letters, numbers, underscores and hyphens are allowed.
helpText: Just letters, numbers, underscores and hyphens are allowed. 56
Will be displayed in UI
Input Validation
59. Prepare manifest file
in YAML format
should contains:
Format - version of a manifest syntax format
Type - package type. Valid choices are: Library and Application
Name - human-readable application name
Description - a brief description of an application
Author - person or company name which created an application package
Classes - MuranoPL class list, on which application deployment is based
Tags - list of words, associated with this application. Will be helpful during the
search.Optional parameter
60
60. Prepare manifest file- example
Format: 1.0
Type: Application
FullName: io.Murano.apps.linux.Telnet
Name: Telnet
Description: |
Telnet is the traditional protocol for making remote console connections over TCP.
Author: 'Mirantis, Inc'
Tags: [Linux, connection]
Classes:
io.Murano.apps.linux.Telnet: telnet.yaml
UI: telnet.yaml
Logo: telnet.png
61
61. create application package
Step 1. Prepare Execution Plans
Step 2. Prepare MuranoPL class definitions
Step 3. Prepare Dynamic UI Form Definition
Step 4. Prepare application logo
Step 5. Prepare manifest file
Step 6. Compose a zip archive
62
62. Compose a zip archive
Classes folder
MuranoPL class definitions should be put inside this folder
Resources folder
This folder should contain Execution scripts
Scripts folder
All script files, needed for an application deployment should be placed here
UI folder
Place dynamic ui yaml definitions here
logo.png
Image file should be placed in the root folder. It can have any name, just specify it in
the manifest file.
manifest.yaml
Application manifest file. It's an application entry point. The file name is fixed.
63
69. Murano best practices
Use Separate vHost in RabbitMQ
advantages
this prevents queue name collisions
this prevents message stealing from queues
this simplify debugging
configure example
># rabbitmqctl add_user Muranouser Muranopassword
># rabbitmqctl set_user_tags Muranouser administrator
># rabbitmqctl add_vhost Muranovhost
># rabbitmqctl set_permissions -p Muranovhost Muranouser ".*" ".*" ".*"
70
70. Troubleshooting
71
Root cause:
By default ,Murano
needs a router name
that contains keyword
like Murano and
external network
solution:
modify the /etc/Murano/Murano.conf
in [networking] section
[networking]
…
external_network=<your_existing_network_name>
router_name=<your_exiting_router_name>
…
71. Troubleshooting(1)
Issue
Failed to provision instance, nova report failed to plug vif
72
Root cause:
This is a known issue
in juno
solution:
72. Troubleshooting(2)
Issue
access meta data failed
73
Root cause:
The neutron meta data
service cannot
authenticate against
keystone
solution:
vi /etc/neutron/metadata_agent.ini
73. Troubleshooting(3)
Issue
agent failed to execute the execution plan
74
Possible Root cause:
1. Murano-agent
cannot connect to
the rabbitmq
server
2. Murano-agent
failed find the
message in queue
solution:
As for No1., check the rabbitmq server status via cli
#rabbitmqctl status
As for No2.
login to vm instance
check the /etc/Murano/agent.conf to find the
input_queue id
find if the message by this input_queue in rabbitmq
74. Understand how Murano agent works
75
Murano-agent.conf
rabbitmq
VM
heat-
client
Murano-agent
❹
❸
❺
❷
❶ heat picks up the message from rabbitmq
❷ heat will generate the Murano-agent.conf using
cloud-init
❸ Murano agent will use this agent.conf file to find
the right rabbitmq server and the input_queue
❹ Murano agent will pickup the right message from
rabbitmq
❺ Murano agent will execute the execution plan
beard in the message
❶
execution
plans
75. /var/lib/heat-cfntools/cfn-userdata
root@Murano-tkuoai2lpm47x1-nwhcoi2lplzls1-bsojzo5io7vr:~# cat /var/lib/heat-cfntools/cfn-userdata
#!/bin/sh
service Murano-agent stop
AgentConfigBase64='W0RFRkFVTFRdCmRlYnVnPVRydWUKdmVyYm9zZT1UcnVlCmxvZ19maWxlID0gL3Zhci9sb2c
vbXVyYW5vLWFnZW50LmxvZwoKc3RvcmFnZT0vdmFyL211cmFuby9wbGFucwoKW3JhYmJpdG1xXQoKIyBJbnB1d
CBxdWV1ZSBuYW1lCmlucHV0X3F1ZXVlID0gZWNjZWNkNTBjMWM0ZjQ5NWE5MjYwY2NlNWZhNGNmOWRhLWg
1YTU0ZDUwOC1iNTZmLTRkNDYtODJiZC03MTVmMjRhMjA3MDcKCiMgT3V0cHV0IHJvdXRpbmcga2V5ICh1c3VhbG
x5IHF1ZXVlIG5hbWUpCnJlc3VsdF9yb3V0aW5nX2tleSA9IC1leGVjdXRpb24tcmVzdWx0cy10a3VvYWkybHBtNDd4M
QoKIyBDb25uZWN0aW9uIHBhcmFtZXRlcnMgdG8gUmFiYml0TVEgc2VydmljZQoKIyBIb3N0bmFtZSBvciBJUCBhZGR
yZXNzIHdoZXJlIFJhYmJpdE1RIGlzIGxvY2F0ZWQuCmhvc3QgPSAxOTIuODUuMTgwLjEzOAoKIyBSYWJiaXRNUSBwb3J
0ICg1NjcyIGlzIGEgZGVmYXVsdCkKcG9ydCA9IDU2NzIKCiMgVXNlIFNTTCBmb3IgUmFiYml0TVEgY29ubmVjdGlvbnM
gKFRydWUgb3IgRmFsc2UpCnNzbCA9IGZhbHNlCgojIFBhdGggdG8gU1NMIENBIGNlcnRpZmljYXRlIG9yIGVtcHR5IHR
vIGFsbG93IHNlbGYgc2lnbmVkIHNlcnZlciBjZXJ0aWZpY2F0ZQpjYV9jZXJ0cyA9CgojIFJhYmJpdE1RIGNyZWRlbnRpYW
xzLiBGcmVzaCBSYWJiaXRNUSBpbnN0YWxsYXRpb24gaGFzICJndWVzdCIgYWNjb3VudCB3aXRoICJndWVzdCIgcGFzc
3dvcmQuCmxvZ2luID0gZ3Vlc3QKcGFzc3dvcmQgPSBwYXNzd29yZAoKIyBSYWJiaXRNUSB2aXJ0dWFsIGhvc3QgKHZ
ob3N0KS4gRnJlc2ggUmFiYml0TVEgaW5zdGFsbGF0aW9uIGhhcyAiLyIgdmhvc3QgcHJlY29uZmlndXJlZC4KdmlydHV
hbF9ob3N0ID0gLwo='
if [ ! -d /etc/Murano ]; then
mkdir /etc/Murano
fi
echo $AgentConfigBase64 | base64 -d > /etc/Murano/agent.conf
chmod 664 /etc/Murano/agent.conf
service Murano-agent start
76
root@Murano-tkuoai2lpm47x1-nwhcoi2lplzls1-bsojzo5io7vr:~# echo $AgentConfigBase64 | base64 -d
[DEFAULT]
debug=True
verbose=True
log_file = /var/log/Murano-agent.log
storage=/var/Murano/plans
[rabbitmq]
# Input queue name
input_queue = eccecd50c1c4f495a9260cce5fa4cf9da-h5a54d508-b56f-4d46-82bd-715f24a20707
# Output routing key (usually queue name)
result_routing_key = -execution-results-tkuoai2lpm47x1
# Connection parameters to RabbitMQ service
# Hostname or IP address where RabbitMQ is located.
host = 192.85.180.138
# RabbitMQ port (5672 is a default)
port = 5672
# Use SSL for RabbitMQ connections (True or False)
ssl = false
# Path to SSL CA certificate or empty to allow self signed server certificate
ca_certs =
# RabbitMQ credentials. Fresh RabbitMQ installation has "guest" account with "guest" password.
login = guest
password = password
# RabbitMQ virtual host (vhost). Fresh RabbitMQ installation has "/" vhost preconfigured.
virtual_host = /
76. Murano-agent.conf
77
root@Murano-tkuoai2lpm47x1-nwhcoi2lplzls1-bsojzo5io7vr:~# echo $AgentConfigBase64 | base64 -d
[DEFAULT]
debug=True
verbose=True
log_file = /var/log/Murano-agent.log
storage=/var/Murano/plans
[rabbitmq]
# Input queue name
input_queue = eccecd50c1c4f495a9260cce5fa4cf9da-h5a54d508-b56f-4d46-82bd-715f24a20707
# Output routing key (usually queue name)
result_routing_key = -execution-results-tkuoai2lpm47x1
# Connection parameters to RabbitMQ service
# Hostname or IP address where RabbitMQ is located.
host = 192.85.180.138
# RabbitMQ port (5672 is a default)
port = 5672
# Use SSL for RabbitMQ connections (True or False)
ssl = false
# Path to SSL CA certificate or empty to allow self signed server certificate
ca_certs =
# RabbitMQ credentials. Fresh RabbitMQ installation has "guest" account with "guest" password.
login = guest
password = password
# RabbitMQ virtual host (vhost). Fresh RabbitMQ installation has "/" vhost preconfigured.
virtual_host = /
79. Summary
Murano is an OpenStack application catalog service
As for end user
provides a push-button-style application deployment
As for cloud app publisher
provides application design framework via complex modeling and dynamic UI definition to publish the app to openstack.
As for cloud admin
provides set of api to maintain the service catalog
Pros:
Flexible in application design using MuranoPL
Using heat to deploy the underline IaaS infrasture
Easy to use UI dashboard
Support various deployment script Python, Shell, Powershell etc.
Cons:
Application design is complicated
Have to learn the MuranoPL (kinda vendor lockin?)
The Murano agent runs on only VM instead of Physical box
Agent based the task execution(some customer don’t want to run agent in their instance)
81