Blog
Search…
Murano in RDO OpenStack manual installation
Want to install and use Murano in a RDO OpenStack environment? Here are the steps to do it.
The first thing we need to do, is to know what is Murano:
Murano is an application catalog who gives the users the capacity to launch pre-configured s/instances/jobs/g with apps in an OpenStack infrastructure.
As the final user just select an application from a catalog with a minimal configuration, and Murano will take the role to orchestrate the background jobs(create instances, configure apps, connect networks, etc) For more information about application catalog project refer to this site: https://wiki.openstack.org/wiki/Murano/ApplicationCatalog
At this tutorial, i will use the following s/configurations/versions/g:
  • Centos 7.1
  • RDO Liberty release
  • Hosts installed with packstack/ML2 network
Let's start installing some pre requisites
1
sudo yum install -y gcc python-setuptools python-devel git postgresql-devel libffi-devel openssl-devel
Copied!
Install pip
1
sudo easy_install pip
Copied!
Install tox and upgrade six
1
sudo pip install tox
2
sudo pip install --upgrade six
Copied!
Create a database for murano
1
mysql -u root -p
2
CREATE DATABASE murano;
Copied!
Create murano user at MySQL
1
GRANT ALL PRIVILEGES ON murano.* TO 'murano'@'localhost' IDENTIFIED BY 'MURANODB_PASS';
2
GRANT ALL PRIVILEGES ON murano.* TO 'murano'@'%' IDENTIFIED BY 'MURANODB_PASS';
Copied!
Clone murano from liberty/stable branch
1
git clone -b stable/liberty git://git.openstack.org/openstack/murano
Copied!
Install all requirements
1
cd ~/murano/
2
sudo pip install -r requirements.txt
Copied!
Install murano
1
sudo python setup.py install
Copied!
Create sample configuration file
1
oslo-config-generator --config-file etc/oslo-config-generator/murano.conf
Copied!
Create murano directory and copy the sample content on it
1
mkdir /etc/murano
2
cp ~/murano/etc/murano/* /etc/murano/
Copied!
Rename sample configuration to murano.conf
1
mv /etc/murano/murano.conf.sample /etc/murano/murano.conf
Copied!
| Edit the configuration file like this, adjust the configuration as your environment needs. vi /etc/murano/murano.conf
1
[oslo_messaging_rabbit]
2
3
rabbit_host=RABBITMQ_IP
4
rabbit_port=5672
5
rabbit_hosts=RABBITMQ_IP:5672
6
rabbit_use_ssl=False
7
rabbit_userid=guest
8
rabbit_password=guest
9
rabbit_virtual_host=/
10
rabbit_ha_queues=False
11
rabbit_notification_exchange=openstack
12
rabbit_notification_topic=notifications
13
14
[database]
15
connection = mysql://murano:[email protected]_IP/murano
16
17
[keystone_authtoken]
18
auth_uri=http://KEYSTONE_IP:5000/v2.0
19
identity_uri=http://KEYSTONE_IP:35357
20
admin_user=murano
21
admin_password=MURANO_PASS
22
admin_tenant_name=services
23
24
[murano]
25
url = http://MURANO_IP:8082
26
27
[rabbitmq]
28
29
host=RABBITMQ_IP
30
login=guest
31
password=guest
32
virtual_host=/
Copied!
Create murano user
1
openstack user create --password MURANO_PASS murano
Copied!
Add murano user to services tenant with admin privileges
1
openstack role add --project services --user murano admin
Copied!
Create a service for application-catalog
1
openstack service create --name muranoapi --description "Murano Project" application-catalog
Copied!
Associate an endpoint to application-catalog service
1
openstack endpoint create --region RegionOne --publicurl 'http://MURANO_IP:8082/' --adminurl 'http://MURANO_IP:8082/' --internalurl 'http://http://MURANO_IP:8082/' MURANO_SERVICE_ID
Copied!
Sync the database
1
murano-db-manage --config-file /etc/murano/murano.conf upgrade
Copied!
Open a new terminal and start murano-api service
1
murano-api --config-file /etc/murano/murano.conf
Copied!
Import base murano package
1
murano-manage --config-file /etc/murano/murano.conf import-package murano/meta/io.murano
Copied!
In a new terminal, start murano-engine service
1
murano-engine --config-file /etc/murano/murano.conf
Copied!
Clone stable liberty module for horizon
1
git clone -b stable/liberty git://git.openstack.org/openstack/murano-dashboard
Copied!
Install base requirements
1
cd ~/murano-dashboard
2
pip install -r requirements.txt
Copied!
Install murano-dashboard module
1
sudo python setup.py install
Copied!
Enable murano-dashboard at horizon
1
cp muranodashboard/local/_50_murano.py /usr/share/openstack-dashboard/openstack_dashboard/enabled/
Copied!
Restart apache to apply changes
1
systemctl restart httpd
Copied!
Import ApacheHttpServer package
1
murano --murano-repo-url="http://storage.apps.openstack.org/" package-import io.murano.apps.apache.ApacheHttpServer
Copied!
You can find more packages at: http://apps.openstack.org/#tab=murano-apps
This will add a Debian image to glance image service, wait until the image is in active status
Create a file with the following content, modify the variables with your own needsvi object_model_patch.json
1
[
2
{ "op": "add", "path": "/-", "value":
3
{
4
"instance": {
5
"availabilityZone": "nova",
6
"name": "APP_NAME",
7
"image": "GLANCE_IMAGE_ID",
8
"keyname": "KEY_PAIR",
9
"flavor": "FLAVOR",
10
"assignFloatingIp": false,
11
"?": {
12
"type": "io.murano.resources.LinuxMuranoInstance",
13
"id": "===id1==="
14
}
15
},
16
"name": "ApacheHttpServer",
17
"enablePHP": true,
18
"?": {
19
"type": "io.murano.apps.apache.ApacheHttpServer",
20
"id": "===id2==="
21
}
22
}
23
}
24
]
Copied!
Create an environment
1
murano environment-create --join-subnet-id SUBNET_ID ENVIRONMENT_NAME
2
3
murano environment-create --join-subnet-id e2c5175a-d5bc-4eb7-91ba-67ac9120c64a test
4
+----------------------------------+------+---------------------+---------------------+
5
| ID | Name | Created | Updated |
6
+----------------------------------+------+---------------------+---------------------+
7
| 68a19d233d2d42459faf64d375d995e5 | test | 2015-12-11T13:09:57 | 2015-12-11T13:09:57 |
8
+----------------------------------+------+---------------------+---------------------+
Copied!
Create a session for temporal working on the environment
1
murano environment-session-create ENVIRONMENT_ID
2
3
murano environment-session-create 68a19d233d2d42459faf64d375d995e5
4
Created new session:
5
+----------+----------------------------------+
6
| Property | Value |
7
+----------+----------------------------------+
8
| id | b0f5e39a9c4c419c9ee7fdb6c92c37a6 |
9
+----------+----------------------------------+
Copied!
Add the file with the apps configuration
1
murano environment-apps-edit --session-id SESSION_ID ENVIRONMENT_ID FILE_NAME
2
3
murano environment-apps-edit --session-id b0f5e39a9c4c419c9ee7fdb6c92c37a6 68a19d233d2d42459faf64d375d995e5 object_model_patch.json
Copied!
Deploy the environment
1
murano environment-deploy ENVIRONMENT_ID --session-id SESSION_ID
2
3
murano environment-deploy 68a19d233d2d42459faf64d375d995e5 --session-id b0f5e39a9c4c419c9ee7fdb6c92c37a6
4
+-----------+-------------------------------------------------------------+
5
| Property | Value |
6
+-----------+-------------------------------------------------------------+
7
| created | 2015-12-11T13:09:57 |
8
| id | 68a19d233d2d42459faf64d375d995e5 |
9
| name | test |
10
| services | [ |
11
| | { |
12
| | "instance": { |
13
| | "availabilityZone": "nova", |
14
| | "name": "test", |
15
| | "assignFloatingIp": false, |
16
| | "keyname": "", |
17
| | "flavor": "twogb", |
18
| | "image": "9049eb0c-081e-4d56-9413-72fdc6f8d8bf", |
19
| | "?": { |
20
| | "type": "io.murano.resources.LinuxMuranoInstance", |
21
| | "id": "30f5a591a58a468fbf4d7ef4755e0512" |
22
| | } |
23
| | }, |
24
| | "name": "ApacheHttpServer", |
25
| | "enablePHP": true, |
26
| | "?": { |
27
| | "status": "deploying", |
28
| | "type": "io.murano.apps.apache.ApacheHttpServer", |
29
| | "id": "98b994565c634f7e97d5f365203ce222" |
30
| | } |
31
| | } |
32
| | ] |
33
| status | deploying |
34
| tenant_id | 3a5d50fac9a3462fa4d76b8b84677c3f |
35
| updated | 2015-12-11T13:09:57 |
36
| version | 0 |
37
+-----------+-------------------------------------------------------------+
Copied!
Now, you can check at nova the building status of the instances
1
nova list
2
+--------------------------------------+-----------------------------------------+--------+------------+-------------+----------+
3
| ID | Name | Status | Task State | Power State | Networks |
4
+--------------------------------------+-----------------------------------------+--------+------------+-------------+----------+
5
| a68cedfb-7b4c-47a6-96fb-6b64a85a8ca6 | murano-mmnpdii1ozz7r2-test-5np5cvfeoiyh | BUILD | scheduling | NOSTATE | |
6
+--------------------------------------+-----------------------------------------+--------+------------+-------------+----------+
Copied!
After a while, the instance is up and running
1
nova list
2
+--------------------------------------+-----------------------------------------+--------+------------+-------------+------------------+
3
| ID | Name | Status | Task State | Power State | Networks |
4
+--------------------------------------+-----------------------------------------+--------+------------+-------------+------------------+
5
| a68cedfb-7b4c-47a6-96fb-6b64a85a8ca6 | murano-mmnpdii1ozz7r2-test-5np5cvfeoiyh | ACTIVE | - | Running | private=10.0.0.8 |
6
+--------------------------------------+-----------------------------------------+--------+------------+-------------+------------------+
Copied!
Once the instance is active, murano will configure the application inside, wait until the status is ready.
1
murano environment-show f392de2004e24ff7b2a08f05df0599b8
2
+-----------+---------------------------------------------------------------+
3
| Property | Value |
4
+-----------+---------------------------------------------------------------+
5
| created | 2015-12-11T13:43:23 |
6
| id | 68a19d233d2d42459faf64d375d995e5 |
7
| name | test |
8
| services | [ |
9
| | { |
10
| | "instance": { |
11
| | "availabilityZone": "nova", |
12
| | "openstackId": "91615340-e1d3-428e-848f-38a762004d33", |
13
| | "name": "test", |
14
| | "securityGroupName": null, |
15
| | "image": "9049eb0c-081e-4d56-9413-72fdc6f8d8bf", |
16
| | "assignFloatingIp": false, |
17
| | "floatingIpAddress": null, |
18
| | "keyname": "", |
19
| | "?": { |
20
| | "classVersion": "0.0.0", |
21
| | "name": null, |
22
| | "package": "io.murano", |
23
| | "type": "io.murano.resources.LinuxMuranoInstance", |
24
| | "_actions": {}, |
25
| | "id": "30f5a591a58a468fbf4d7ef4755e0512" |
26
| | }, |
27
| | "ipAddresses": [ |
28
| | "10.0.0.8" |
29
| | ], |
30
| | "flavor": "twogb", |
31
| | "networks": { |
32
| | "useFlatNetwork": false, |
33
| | "primaryNetwork": null, |
34
| | "useEnvironmentNetwork": true, |
35
| | "customNetworks": [] |
36
| | }, |
37
| | "sharedIps": [] |
38
| | }, |
39
| | "name": "ApacheHttpServer", |
40
| | "?": { |
41
| | "classVersion": "0.0.0", |
42
| | "status": "ready", |
43
| | "name": null, |
44
| | "package": "io.murano.apps.apache.ApacheHttpServer", |
45
| | "type": "io.murano.apps.apache.ApacheHttpServer", |
46
| | "_actions": {}, |
47
| | "id": "98b994565c634f7e97d5f365203ce222" |
48
| | }, |
49
| | "enablePHP": true |
50
| | } |
51
| | ] |
52
| status | ready |
53
| tenant_id | 3a5d50fac9a3462fa4d76b8b84677c3f |
54
| updated | 2015-12-11T13:47:35 |
55
| version | 1 |
56
+-----------+---------------------------------------------------------------+
Copied!
That's all you need to have up and running a Murano application catalog, for now there is no rpm package to ease the installation, so you need to install from source like we done.
A thing you can do, is create systemd files to manage murano services in a easier way.
Regards, Eduardo Gonzalez
Last modified 1yr ago
Copy link