From 603b1c0d4a5ed23409e93e615010d5042a9e4e2d Mon Sep 17 00:00:00 2001 From: Maria Zlatkova Date: Fri, 12 Aug 2016 14:59:52 +0300 Subject: [PATCH] [Docs] Moves network configuration to admin-guide Changes: - Restructures and moves Network configuration to the appropriate section of the Admin Guide. - Removes Murano Installation Guide from the Miscellaneous section as it has already been rewritten and moved to the Admin Guide (see sections: Deploying Murano and Prepare a lab for Murano) - No changes in the Policy configuration section. Change-Id: I7d396375a312648ad2f05350b87079601b7c0878 Partial-Bug: #1603950 --- .../draft/admin-guide/configuration.rst | 216 +++++++++ .../deploy_murano/configure_ssl.rst | 1 + .../admin-guide/figures/add-interface.png} | Bin .../figures/network-topology-1.png} | Bin .../figures/network-topology-2.png} | Bin doc/source/draft/admin-guide/installation.rst | 105 ---- doc/source/draft/admin-guide/prepare_lab.rst | 12 +- doc/source/draft/index.rst | 2 +- doc/source/index.rst | 7 - doc/source/install/2.png | Bin 37490 -> 0 bytes doc/source/install/3.png | Bin 38592 -> 0 bytes doc/source/install/4_1.png | Bin 16206 -> 0 bytes doc/source/install/configure_network.rst | 129 ----- doc/source/install/development.rst | 29 -- doc/source/install/index.rst | 31 -- doc/source/install/manual.rst | 452 ------------------ doc/source/install/prepare.rst | 199 -------- doc/source/install/ssl.rst | 137 ------ 18 files changed, 224 insertions(+), 1096 deletions(-) create mode 100644 doc/source/draft/admin-guide/configuration.rst rename doc/source/{install/4_2.png => draft/admin-guide/figures/add-interface.png} (100%) rename doc/source/{install/1.png => draft/admin-guide/figures/network-topology-1.png} (100%) rename doc/source/{install/5.png => draft/admin-guide/figures/network-topology-2.png} (100%) delete mode 100644 doc/source/draft/admin-guide/installation.rst delete mode 100644 doc/source/install/2.png delete mode 100644 doc/source/install/3.png delete mode 100644 doc/source/install/4_1.png delete mode 100644 doc/source/install/configure_network.rst delete mode 100644 doc/source/install/development.rst delete mode 100644 doc/source/install/index.rst delete mode 100644 doc/source/install/manual.rst delete mode 100644 doc/source/install/prepare.rst delete mode 100644 doc/source/install/ssl.rst diff --git a/doc/source/draft/admin-guide/configuration.rst b/doc/source/draft/admin-guide/configuration.rst new file mode 100644 index 00000000..fa553870 --- /dev/null +++ b/doc/source/draft/admin-guide/configuration.rst @@ -0,0 +1,216 @@ +.. _configuration: + +.. toctree:: + :maxdepth: 2 + +============= +Configuration +============= + +Network configuration +~~~~~~~~~~~~~~~~~~~~~ + +Murano may work in various networking environments and is capable of detecting +the current network configuration and choosing appropriate settings +automatically. However, some additional actions are required to support +advanced scenarios. + +Nova-network support +^^^^^^^^^^^^^^^^^^^^ + +Nova-network is the simplest networking solution, which has limited +capabilities but is available on any OpenStack deployment without the need to +deploy any additional components. + +When a new murano environment is created, murano checks if a dedicated +networking service, for example, neutron, exists in the current OpenStack +deployment. It relies on the Identity service catalog for that. If such a +service is not present, murano automatically falls back to nova-network. No +further configuration is needed in this case, all the VMs spawned by Murano +will be joining the same network. + +Neutron support +^^^^^^^^^^^^^^^ + +If neutron is installed, murano enables its advanced networking features that +give you the ability to avoid configuring networks for your application. + +By default, it creates an isolated network for each environment and joins +all VMs needed by your application to that network. To install and configure +the application in a newly spawned virtual machine, murano also requires a +router to be connected to the external network. + +Automatic neutron configuration ++++++++++++++++++++++++++++++++ + +To create the router automatically, provide the following parameters in the +configuration file: + +.. code-block:: ini + + [networking] + + external_network = %EXTERNAL_NETWORK_NAME% + router_name = %MURANO_ROUTER_NAME% + create_router = true + +To figure out the name of the external network, run +:command:`openstack network list --external`. + +During the first deployment, the required networks and router with a specified +name will be created and set up. + +Manual neutron configuration +++++++++++++++++++++++++++++ + +To configure neutron manually, follow the steps below. + +#. Create a public network. + + #. Log in to the OpenStack dashboard as an administrator. + + #. Verify the existence of external networks. For this, navigate to + :menuselection:`Project > Network > Network Topology`. + + #. Check the network type in network details. For this, navigate to + :menuselection:`Admin > Networks` and see the :guilabel:`Network name` + section. + Alternatively, run the :command:`openstack network list --external` + command using CLI. + + #. Create a new external network as described in the `OpenStack documentation `_. + + .. image:: figures/network-topology-1.png + :alt: Network Topology page + :width: 630 px + +#. Create a local network. + + #. Navigate to :menuselection:`Project > Network > Networks`. + #. Click :guilabel:`Create Network` and fill in the form. + + +#. Create a router. + + #. Navigate to :menuselection:`Project > Network > Routers`. + #. Click :guilabel:`Create Router`. + #. In the :guilabel:`Router Name` field, enter *murano-default-router*. + If you specify a name other than *murano-default-router*, change the + following settings in the configuration file: + + .. code-block:: ini + + [networking] + + router_name = %SPECIFIED_NAME% + create_router = false + + #. Click :guilabel:`Create router`. + #. Click the newly created router name. + #. In the :guilabel:`Interfaces` tab, click :guilabel:`Add Interface`. + #. Specify the subnet and IP address. + + .. image:: figures/add-interface.png + :alt: Add Interface dialog + :width: 630 px + + #. Verify the result in + :menuselection:`Project > Network > Network Topology`. + + .. image:: figures/network-topology-2.png + :alt: Network Topology page + :width: 630 px + +Policy configuration +~~~~~~~~~~~~~~~~~~~~ + +Like each service in OpenStack, murano has its own role-based access policies +that determine who and how can access objects. These policies are defined +in the service's :file:`policy.json` file. + +On each API call corresponding policy check is performed. +:file:`policy.json` file can be changed whiteout interrupting the API service. + +For detailed information on :file:`policy.json` syntax, please refer to the +`OpenStack official documentation `_ + +With this file you can set who may upload packages and perform other operations. + +The :file:`policy.json` example is: + +.. code-block:: json + + { + // Rule declaration + "context_is_admin": "role:admin", + "admin_api": "is_admin:True", + "default": "", + + // Package operations + "get_package": "rule:default", + "upload_package": "rule:default", + "modify_package": "rule:default", + "publicize_package": "rule:admin_api", + "manage_public_package": "rule:default", + "delete_package": "rule:default", + "download_package": "rule:default", + + // Category operations + "get_category": "rule:default", + "delete_category": "rule:admin_api", + "add_category": "rule:admin_api", + + // Deployment read operations + "list_deployments": "rule:default", + "statuses_deployments": "rule:default", + + // Environment operations + "list_environments": "rule:default", + "list_environments_all_tenants": "rule:admin_api", + "show_environment": "rule:default", + "update_environment": "rule:default", + "create_environment": "rule:default", + "delete_environment": "rule:default", + + // Environment template operations + "list_env_templates": "rule:default", + "create_env_template": "rule:default", + "show_env_template": "rule:default", + "update_env_template": "rule:default", + "delete_env_template": "rule:default", + + // Control on executing actions on deployment environments + "execute_action": "rule:default" + } + +So, changing ``"upload_package": "rule:default"`` to ``"rule:admin_api"`` +will forbid regular users to upload packages. + +For reference: + +- ``"get_package"`` is checked whenever a user accesses a package + from the catalog. default: anyone +- ``"upload_package"`` is checked whenever a user uploads a package + to the catalog. default: anyone +- ``"modify_package"`` is checked whenever a user modifies a package + in the catalog. default: anyone +- ``"publicize_package"`` is checked whenever a user is trying to + make a murano package public (both when creating a new package or + modifying an existing one). default: admin users +- ``"manage_public_package"`` is checked whenever a user attempts to + modify parameters of a public package. default: admin users +- ``"delete_package"`` is checked whenever a user attempts to + delete a package from the catalog. default: anyone +- ``"download_package"`` is checked whenever a user attempts to + download a package from the catalog. default: anyone +- ``"list_environments_all_tenants"`` is checked whenever a request + to list environments of all tenants is made. default: admin users +- ``"execute_action"`` is checked whenever a user attempts to execute + an action on deployment environments. default: anyone + +Uploading package wizard in murano dashboard consists of several steps. +Upload package API call requested from the first form and modify from +the second one. It provides modifying package parameters on time of +uploading. So, please modify both configuration together. Otherwise it +will not be possible to browse package details on the second step +of the wizard. diff --git a/doc/source/draft/admin-guide/deploy_murano/configure_ssl.rst b/doc/source/draft/admin-guide/deploy_murano/configure_ssl.rst index 3f1012fb..818efc7b 100644 --- a/doc/source/draft/admin-guide/deploy_murano/configure_ssl.rst +++ b/doc/source/draft/admin-guide/deploy_murano/configure_ssl.rst @@ -93,6 +93,7 @@ set ``ssl = True`` in the ``[rabbitmq]`` section of [rabbitmq] ... ssl = True + insecure = False If you want to configure the murano agent differently, you need to change the `default template `_ located in the murano core library. diff --git a/doc/source/install/4_2.png b/doc/source/draft/admin-guide/figures/add-interface.png similarity index 100% rename from doc/source/install/4_2.png rename to doc/source/draft/admin-guide/figures/add-interface.png diff --git a/doc/source/install/1.png b/doc/source/draft/admin-guide/figures/network-topology-1.png similarity index 100% rename from doc/source/install/1.png rename to doc/source/draft/admin-guide/figures/network-topology-1.png diff --git a/doc/source/install/5.png b/doc/source/draft/admin-guide/figures/network-topology-2.png similarity index 100% rename from doc/source/install/5.png rename to doc/source/draft/admin-guide/figures/network-topology-2.png diff --git a/doc/source/draft/admin-guide/installation.rst b/doc/source/draft/admin-guide/installation.rst deleted file mode 100644 index c5a0771f..00000000 --- a/doc/source/draft/admin-guide/installation.rst +++ /dev/null @@ -1,105 +0,0 @@ -.. _installation: - -.. toctree:: - :maxdepth: 2 - -============ -Installation -============ - -Network configuration -~~~~~~~~~~~~~~~~~~~~~ - -Policy configuration -~~~~~~~~~~~~~~~~~~~~ - -Like each service in OpenStack, murano has its own role-based access policies -that determine who and how can access objects. These policies are defined -in the service's :file:`policy.json` file. - -On each API call corresponding policy check is performed. -:file:`policy.json` file can be changed whiteout interrupting the API service. - -For detailed information on :file:`policy.json` syntax, please refer to the -`OpenStack official documentation `_ - -With this file you can set who may upload packages and perform other operations. - -The :file:`policy.json` example is: - -.. code-block:: javascript - - { - // Rule declaration - "context_is_admin": "role:admin", - "admin_api": "is_admin:True", - "default": "", - - // Package operations - "get_package": "rule:default", - "upload_package": "rule:default", - "modify_package": "rule:default", - "publicize_package": "rule:admin_api", - "manage_public_package": "rule:default", - "delete_package": "rule:default", - "download_package": "rule:default", - - // Category operations - "get_category": "rule:default", - "delete_category": "rule:admin_api", - "add_category": "rule:admin_api", - - // Deployment read operations - "list_deployments": "rule:default", - "statuses_deployments": "rule:default", - - // Environment operations - "list_environments": "rule:default", - "list_environments_all_tenants": "rule:admin_api", - "show_environment": "rule:default", - "update_environment": "rule:default", - "create_environment": "rule:default", - "delete_environment": "rule:default", - - // Environment template operations - "list_env_templates": "rule:default", - "create_env_template": "rule:default", - "show_env_template": "rule:default", - "update_env_template": "rule:default", - "delete_env_template": "rule:default", - - // Control on executing actions on deployment environments - "execute_action": "rule:default" - } - -So, changing ``"upload_package": "rule:default"`` to ``"rule:admin_api"`` -will forbid regular users to upload packages. - -For reference: - -- ``"get_package"`` is checked whenever a user accesses a package - from the catalog. default: anyone -- ``"upload_package"`` is checked whenever a user uploads a package - to the catalog. default: anyone -- ``"modify_package"`` is checked whenever a user modifies a package - in the catalog. default: anyone -- ``"publicize_package"`` is checked whenever a user is trying to - make a murano package public (both when creating a new package or - modifying an existing one). default: admin users -- ``"manage_public_package"`` is checked whenever a user attempts to - modify parameters of a public package. default: admin users -- ``"delete_package"`` is checked whenever a user attempts to - delete a package from the catalog. default: anyone -- ``"download_package"`` is checked whenever a user attempts to - download a package from the catalog. default: anyone -- ``"list_environments_all_tenants"`` is checked whenever a request - to list environments of all tenants is made. default: admin users -- ``"execute_action"`` is checked whenever a user attempts to execute - an action on deployment environments. default: anyone - -Uploading package wizard in murano dashboard consists of several steps. -Upload package API call requested from the first form and modify from -the second one. It provides modifying package parameters on time of -uploading. So, please modify both configuration together. Otherwise it -will not be possible to browse package details on the second step -of the wizard. diff --git a/doc/source/draft/admin-guide/prepare_lab.rst b/doc/source/draft/admin-guide/prepare_lab.rst index 69a5cec0..3d217d81 100644 --- a/doc/source/draft/admin-guide/prepare_lab.rst +++ b/doc/source/draft/admin-guide/prepare_lab.rst @@ -14,7 +14,7 @@ under the License. ======================== -Prepare A Lab For Murano +Prepare a lab for murano ======================== This section provides basic information about lab's system requirements. It also contains a description of a test which you may use to check if @@ -27,7 +27,7 @@ compare the results with baseline data provided. System prerequisites ~~~~~~~~~~~~~~~~~~~~ -Supported Operating Systems +Supported operating systems --------------------------- * Ubuntu Server 12.04 LTS @@ -89,7 +89,7 @@ Install all the requirements on CentOS by running:: .. _lab_requirements: -Lab Requirements +Lab requirements ---------------- +------------+--------------------------------+-----------------------+ @@ -119,7 +119,7 @@ All of them were tested and were working well. * 1x HDD (15000 rpm) 500+ GB -Test Your Lab Host Performance +Test your lab host performance ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ We have measured time required to boot 1 to 5 instances of Windows @@ -189,7 +189,7 @@ Steps to reproduce test: sudo killall kvm -Baseline Data +Baseline data ~~~~~~~~~~~~~ The table below provides baseline data which we've got in our @@ -207,7 +207,7 @@ environment. while ``Max. Time`` refers to minimal hardware configuration. -Host Optimizations +Host optimizations ~~~~~~~~~~~~~~~~~~ Default KVM installation could be improved to provide better diff --git a/doc/source/draft/index.rst b/doc/source/draft/index.rst index fab33170..2d30eef6 100644 --- a/doc/source/draft/index.rst +++ b/doc/source/draft/index.rst @@ -37,7 +37,7 @@ Deploying Murano admin-guide/deploy_murano admin-guide/prepare_lab - admin-guide/installation + admin-guide/configuration admin-guide/manage_packages admin-guide/manage_images admin-guide/manage_categories diff --git a/doc/source/index.rst b/doc/source/index.rst index d98c3c35..1aa939d0 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -118,13 +118,6 @@ Developing Applications Miscellaneous ~~~~~~~~~~~~~ -**Installation** - -.. toctree:: - :maxdepth: 1 - - install/index - **Background Concepts for Murano** .. toctree:: diff --git a/doc/source/install/2.png b/doc/source/install/2.png deleted file mode 100644 index b20b4856b2ab8e57e7a1909e9d3972af9230682a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37490 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 diff --git a/doc/source/install/3.png b/doc/source/install/3.png deleted file mode 100644 index ccee95c6df84cc326ee60f9f03650acbd5e22384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38592 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 diff --git a/doc/source/install/4_1.png b/doc/source/install/4_1.png deleted file mode 100644 index 471d1a4503bb034ea367c10fc8819096f6a3a8dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16206 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 diff --git a/doc/source/install/configure_network.rst b/doc/source/install/configure_network.rst deleted file mode 100644 index e1a98d17..00000000 --- a/doc/source/install/configure_network.rst +++ /dev/null @@ -1,129 +0,0 @@ -.. - Copyleft 2014 Mirantis, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. You may obtain - a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations - under the License. -.. - -Network Configuration ---------------------- - -Murano may work in various networking environments and is capable of -detecting the current network configuration and choosing appropriate -settings automatically. However, some additional actions are required to -support advanced scenarios. - - -Nova network support -^^^^^^^^^^^^^^^^^^^^ - -Nova Network is simplest networking solution, which has limited capabilities -but is available on any OpenStack deployment without the need to deploy any -additional components. - -When a new Murano Environment is created, Murano checks if a dedicated -networking service (i.e. Neutron) exists in the current OpenStack deployment. -It relies on Keystone's service catalog for that. -If such a service is not present, Murano automatically falls back to Nova -Network. No further configuration is needed in this case, all the VMs spawned -by Murano will be joining the same Network. - -Neutron support -^^^^^^^^^^^^^^^ - -If neutron is installed, murano enables its advanced networking features that -give you the ability to avoid configuring networks for your application. - -By default it will create an isolated network for each environment and join -all VMs needed by your application to that network. To install and configure -the application in a newly spawned virtual machine, murano also requires -a router to be connected to the external network. - - -Automatic neutron network configuration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To create the router automatically, provide the following parameters -in the config file: - -.. code-block:: ini - - [networking] - - external_network = %EXTERNAL_NETWORK_NAME% - router_name = %MURANO_ROUTER_NAME% - create_router = true - -.. - -To figure out the name of the external network, perform the following command: - -.. code-block:: console - - openstack network list --external - -During the first deployment, the required networks and router with a specified name -will be created and set up. - -Manual neutron network configuration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -* Step 1. Create public network - - * First, you need to check for existence of external networks. Login as admin and go to - *Project -> Network -> Network Topology*. And check network type in network details at *Admin -> Networks -> Network name* page. - The same action can be done via CLI by running `openstack network list --external`. To create new external network examine `OpenStack documentation `_. - - .. image:: 1.png - :align: left - :scale: 70 % - -* Step 2. Create local network - - * Go to *Project -> Network -> Networks*. - * Click *Create Network* and fill the form. - - .. image:: 2.png - - - .. image:: 3.png - -* Step 3. Create router - - * Go to *Project -> Network -> Routers* - - * Click "Create Router" - * In the "Router Name" field, enter the *murano-default-router* - - .. image:: 4_1.png - - - If you specify a name other than *murano-default-router*, it will be necessary - to change the following settings in the config file: - - .. code-block:: ini - - [networking] - - router_name = %SPECIFIED_NAME% - create_router = false - - - * Click on the specified router name - * In the opened view click “Add interface” - * Specify the subnet and IP address - - .. image:: 4_2.png - - And check the result in `Network Topology` tab. - - .. image:: 5.png diff --git a/doc/source/install/development.rst b/doc/source/install/development.rst deleted file mode 100644 index c7553e27..00000000 --- a/doc/source/install/development.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. - Copyright 2014 2014 Mirantis, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. You may obtain - a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations - under the License. - -============================================== -Installing and Running the Development Version -============================================== - -The `devstack`_ directory contains the files necessary to integrate -Murano with `Devstack`_. - - -.. include:: ../../../devstack/README.rst - - - -.. _Devstack: http://docs.openstack.org/developer/devstack/ -.. _contrib/devstack: https://git.openstack.org/cgit/openstack/murano/tree/contrib/devstack diff --git a/doc/source/install/index.rst b/doc/source/install/index.rst deleted file mode 100644 index d52ee49d..00000000 --- a/doc/source/install/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. - Copyright 2014 Mirantis, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. You may obtain - a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations - under the License. - -.. _install: - -========================= -Murano Installation Guide -========================= - -Content -======= - -.. toctree:: - :maxdepth: 2 - - prepare - development - manual - ssl diff --git a/doc/source/install/manual.rst b/doc/source/install/manual.rst deleted file mode 100644 index be5a70bc..00000000 --- a/doc/source/install/manual.rst +++ /dev/null @@ -1,452 +0,0 @@ -.. - Copyright 2014 Mirantis, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. You may obtain - a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations - under the License. -.. - -.. _installing_manually: - -=============================== -Installing and Running Manually -=============================== - -Prepare Environment -=================== - -Install Prerequisites ---------------------- - -First you need to install a number of packages with your OS package manager. -The list of packages depends on the OS you use. - -Ubuntu -^^^^^^ - -.. code-block:: console - - sudo apt-get install python-pip python-dev \ - libmysqlclient-dev libpq-dev \ - libxml2-dev libxslt1-dev \ - libffi-dev -.. - -Fedora -^^^^^^ - -.. note:: - - Fedora support wasn't thoroughly tested. We do not guarantee that murano - will work on Fedora. -.. - -.. code-block:: console - - sudo yum install gcc python-setuptools python-devel python-pip -.. - - -CentOS -^^^^^^ - -.. code-block:: console - - sudo yum install gcc python-setuptools python-devel - sudo easy_install pip -.. - - -Install tox ------------ - -.. code-block:: console - - sudo pip install tox -.. - - -Install And Configure Database ------------------------------- - -Murano can use various database types on the back end. For development purposes -SQLite is enough in most cases. For production installations you should use -MySQL or PostgreSQL databases. - -.. warning:: - - Although murano could use a PostgreSQL database on the back end, it wasn't - thoroughly tested and should be used with caution. -.. - -To use a MySQL database you should install it and create an empty database first: - -.. code-block:: console - - apt-get install python-mysqldb mysql-server -.. - -.. code-block:: console - - mysql -u root -p - - mysql> CREATE DATABASE murano; - mysql> GRANT ALL PRIVILEGES ON murano.* TO 'murano'@'localhost' \ - IDENTIFIED BY 'MURANO_DBPASS'; - mysql> exit; -.. - - -Install the API service and Engine -================================== - -#. Create a folder which will hold all Murano components. - - .. code-block:: console - - mkdir ~/murano - .. - -#. Clone the murano git repository to the management server. - - .. code-block:: console - - cd ~/murano - git clone git://git.openstack.org/openstack/murano - .. - -#. Set up the murano config file - - Murano has a common config file for API and Engine services. - - First, generate a sample configuration file, using tox - - .. code-block:: console - - cd ~/murano/murano - tox -e genconfig - .. - - And make a copy of it for further modifications - - .. code-block:: console - - cd ~/murano/murano/etc/murano - ln -s murano.conf.sample murano.conf - .. - -#. Edit ``murano.conf`` with your favorite editor. Below is an example - which contains basic settings your are likely need to configure. - - .. note:: - - The example below uses SQLite database. Edit **[database]** section - if you want to use other database type. - .. - - .. code-block:: ini - - [DEFAULT] - debug = true - verbose = true - rabbit_host = %RABBITMQ_SERVER_IP% - rabbit_userid = %RABBITMQ_USER% - rabbit_password = %RABBITMQ_PASSWORD% - rabbit_virtual_host = %RABBITMQ_SERVER_VIRTUAL_HOST% - - ... - - [oslo_messaging_notifications] - driver = messagingv2 - - ... - - [database] - backend = sqlalchemy - connection = sqlite:///murano.sqlite - - ... - - [keystone] - auth_url = 'http://%OPENSTACK_HOST_IP%:5000/v2.0' - - ... - - [keystone_authtoken] - auth_uri = 'http://%OPENSTACK_HOST_IP%:5000/v2.0' - auth_host = '%OPENSTACK_HOST_IP%' - auth_port = 5000 - auth_protocol = http - admin_tenant_name = %OPENSTACK_ADMIN_TENANT% - admin_user = %OPENSTACK_ADMIN_USER% - admin_password = %OPENSTACK_ADMIN_PASSWORD% - - ... - - [murano] - url = http://%YOUR_HOST_IP%:8082 - - [rabbitmq] - host = %RABBITMQ_SERVER_IP% - login = %RABBITMQ_USER% - password = %RABBITMQ_PASSWORD% - virtual_host = %RABBITMQ_SERVER_VIRTUAL_HOST% - - [networking] - default_dns = 8.8.8.8 # In case openstack neutron has no default - # DNS configured - .. - -#. Create a virtual environment and install Murano prerequisites. We will use - *tox* for that. Virtual environment will be created under *.tox* directory. - - .. code-block:: console - - cd ~/murano/murano - tox - .. - -#. Create database tables for Murano. - - .. code-block:: console - - cd ~/murano/murano - tox -e venv -- murano-db-manage \ - --config-file ./etc/murano/murano.conf upgrade - .. - -#. Launch the murano API in a separate terminal: - - .. code-block:: console - - cd ~/murano/murano - tox -e venv -- murano-api --config-file ./etc/murano/murano.conf - .. - - .. note:: - - Run the command in a new terminal as the process will be running in - the terminal until you terminate it, therefore, blocking the current - terminal. - -#. Leaving the API process running, return to the previous console and - import murano core library: - - .. code-block:: console - - cd ~/murano/murano - pushd ./meta/io.murano - zip -r ../../io.murano.zip * - popd - tox -e venv -- murano --murano-url http://localhost:8082 \ - package-import --is-public io.murano.zip - .. - -#. Launch the murano engine in a separate terminal: - - .. code-block:: console - - cd ~/murano/murano - tox -e venv -- murano-engine --config-file ./etc/murano/murano.conf - .. - - .. note:: - - Run the command in a new terminal as the process will be running in - the terminal until you terminate it, therefore, blocking the current - terminal. - -Register in Keystone --------------------- - -To make the murano API available to all OpenStack users, you need to register the -Application Catalog service within the Identity service. - -#. Add ``application-catalog`` service: - - .. code-block:: console - - openstack service create --name murano --description "Application Catalog for OpenStack" application-catalog - -#. Provide an endpoint for that service: - - .. code-block:: console - - openstack endpoint create --region RegionOne --publicurl http://:8082 --internalurl http://:8082 --adminurl http://:8082 - - where ``MURANO-SERVICE-ID`` is the unique service number that you can find - in the :command:`openstack service create` output. - -.. note:: URLs (publicurl, internalurl and adminurl) may be different - depending on your environment. - -Install Murano Dashboard -======================== - - Murano API & Engine services provide the core of Murano. However, your need a - control plane to use it. This section describes how to install and run Murano - Dashboard. - -#. Clone the repository with Murano Dashboard. - - .. code-block:: console - - cd ~/murano - git clone git://git.openstack.org/openstack/murano-dashboard - .. - -#. Clone horizon repository - - .. code-block:: console - - git clone git://git.openstack.org/openstack/horizon - .. - -#. Create venv and install muranodashboard as editable module. - - .. code-block:: console - - cd horizon - tox -e venv -- pip install -e ../murano-dashboard - .. - -#. Copy muranodashboard plugin file. - - This step enables murano panel in horizon dashboard. - - * For the OpenStack installations prior to the Newton release, run:: - - .. code-block:: console - - cp ../murano-dashboard/muranodashboard/local/_50_murano.py openstack_dashboard/local/enabled/ - .. - - * For the Newton (and later) OpenStack installations, run:: - - .. code-block:: console - - cp ../murano-dashboard/muranodashboard/local/enabled/_50_murano.py openstack_dashboard/local/enabled/ - .. - -#. Prepare horizon local settings. - - To get more information, check out official - `horizon documentation `_. - - .. code-block:: console - - cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py - -#. Customize local settings according to OpenStack installation. - - .. code-block:: python - - ... - ALLOWED_HOSTS = '*' - - # Provide OpenStack Lab credentials - OPENSTACK_HOST = '%OPENSTACK_HOST_IP%' - - ... - - # Set secret key to prevent it's generation - SECRET_KEY = 'random_string' - - ... - - DEBUG_PROPAGATE_EXCEPTIONS = DEBUG - .. - - * For the OpenStack installations prior to the Newton release: - - Also, it's better to change default session backend from browser cookies - to database to avoid issues with forms during creating applications: - - .. code-block:: python - - ... - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': 'murano-dashboard.sqlite', - } - } - - SESSION_ENGINE = 'django.contrib.sessions.backends.db' - .. - - * For the OpenStack installations of the Newton (and later) version: - - Copy murano dashboard specific settings file to horizon dashboard. - - .. code-block:: console - - cp ../murano-dashboard/muranodashboard/local/local_settings.d/_50_murano.py openstack_dashboard/local/local_settings.d/ - - .. - - If you do not plan to get murano service from keystone application catalog, - provide where murano-api service is running: - - .. code-block:: python - - ... - MURANO_API_URL = 'http://localhost:8082' - .. - -#. Perform database synchronization. - - Optional step. Needed in case you set up database as a session backend. - - .. code-block:: console - - tox -e venv -- python manage.py migrate --noinput - .. - - You can reply 'no' since for development purpose separate user is not needed. - -#. Run Django server at 127.0.0.1:8000 or provide different IP and PORT parameters. - - .. code-block:: console - - tox -e venv -- python manage.py runserver - .. - - Development server will be restarted automatically on every code change. - -#. Open dashboard using url http://localhost:8000 - -Import Murano Applications -========================== - -Applications need to be imported -to fill the catalog. This can be done via the dashboard, and via CLI: - -1. Clone the murano apps repository. - - .. code-block:: console - - cd ~/murano - git clone git://git.openstack.org/openstack/murano-apps - .. - -2. Import every package you need from this repository, using the command - below. - - .. code-block:: console - - cd ~/murano/murano - pushd ../murano-apps/Docker/Applications/%APP-NAME%/package - zip -r ~/murano/murano/app.zip * - popd - tox -e venv -- murano --murano-url http://localhost:8082 package-import app.zip - -.. include:: configure_network.rst diff --git a/doc/source/install/prepare.rst b/doc/source/install/prepare.rst deleted file mode 100644 index ffc35a02..00000000 --- a/doc/source/install/prepare.rst +++ /dev/null @@ -1,199 +0,0 @@ -.. - Copyright 2014 2014 Mirantis, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. You may obtain - a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations - under the License. - -======================== -Prepare A Lab For Murano -======================== -This section provides basic information about lab's system requirements. -It also contains a description of a test which you may use to check if -your hardware fits the requirements. To do this, run the test and -compare the results with baseline data provided. - -System prerequisites -===================== -**Supported Operating Systems** - -* Ubuntu Server 12.04 LTS -* RHEL/CentOS 6.4 - -**System packages are required for Murano** - -*Ubuntu* - -* gcc - -* python-pip - -* python-dev - -* libxml2-dev - -* libxslt-dev - -* libffi-dev - -* libpq-dev - -* python-openssl - -* mysql-client - -*CentOS* - -* gcc - -* python-pip - -* python-devel - -* libxml2-devel - -* libxslt-devel - -* libffi-devel - -* postgresql-devel - -* pyOpenSSL - -* mysql - - -Lab Requirements -================ - -+------------+--------------------------------+----------------------+ -| Criteria | Minimal | Recommended | -+============+================================+======================+ -| CPU | 4 core @ 2.4 GHz | 24 core @ 2.67 GHz | -+------------+--------------------------------+----------------------+ -| RAM | 8 GB | 24 GB or more | -+------------+--------------------------------+----------------------+ -| HDD | 2 x 500 GB (7200 rpm) | 4 x 500 GB (7200 rpm | -+------------+--------------------------------+----------------------+ -| RAID | Software RAID-1 (use mdadm as | Hardware RAID-10 | -| | it will improve read | | -| | performance almost two times) | | -+------------+--------------------------------+----------------------+ - -Table: Hardware requirements - -There are a few possible storage configurations except the shown above. -All of them were tested and were working well. - -* 1x SSD 500+ GB - -* 1x HDD (7200 rpm) 500+ GB and 1x SSD 250+ GB (install the system onto - the HDD and mount the SSD drive to folder where VM images are) - -* 1x HDD (15000 rpm) 500+ GB - -Test Your Lab Host Performance -============================== - -We have measured time required to boot 1 to 5 instances of Windows -system simultaneously. You can use this data as the baseline to check if -your system is fast enough. - -You should use sysprepped images for this test, to simulate VM first -boot. - -Steps to reproduce test: - -1. Prepare Windows 2012 Standard (with GUI) image in QCOW2 format. Let's - assume that its name is ws-2012-std.qcow2 - -2. Ensure that there is NO KVM PROCESSES on the host. To do this, run - command: - - :: - - ps aux | grep kvm - -3. Make 5 copies of Windows image file: - - :: - - for i in $(seq 5); do \ - cp ws-2012-std.qcow2 ws-2012-std-$i.qcow2; done - -4. Create script start-vm.sh in the folder with .qcow2 files: - - :: - - #!/bin/bash - [ -z $1 ] || echo "VM count not provided!"; exit 1 - for i in $(seq $1); do - echo "Starting VM $i ..." - kvm -m 1024 -drive file=ws-2012-std-$i.qcow2,if=virtio -net user -net nic,model=virtio -nographic -usbdevice tablet -vnc :$i & done - -5. Start ONE instance with command below (as root) and measure time - between VM’s launch and the moment when Server Manager window - appears. To view VM’s desktop, connect with VNC viewer to your host - to VNC screen :1 (port 5901): - - :: - - sudo ./start-vm.sh 1 - -6. Turn VM off. You may simply kill all KVM processes by - - :: - - sudo killall kvm - -7. Start FIVE instances with command below (as root) and measure time - interval between ALL VM’s launch and the moment when LAST Server Manager - window appears. To view VM’s desktops, connect with VNC viewer to your - host to VNC screens :1 thru :5 (ports 5901-5905): - - :: - - sudo ./start-vm.sh 5 - -8. Turn VMs off. You may simply kill all KVM processes by - - :: - - sudo killall kvm - -Baseline Data -============= - -The table below provides baseline data which we've got in our -environment. - -**Avg. Time** refers to the lab with recommended hardware configuration, -while **Max. Time** refers to minimal hardware configuration. - -+--------------------------+--------------------------+---------------------+ -| | Boot ONE instance | Boot FIVE instances | -+==========================+==========================+=====================+ -| Avg. Time | 3m:40s | 8m | -+--------------------------+--------------------------+---------------------+ -| Max. Time | 5m | 20m | -+--------------------------+--------------------------+---------------------+ - -Host Optimizations -================== - -Default KVM installation could be improved to provide better -performance. - -The following optimizations may improve host performance up to 30%: - -* change default scheduler from **CFQ** to **Deadline** -* use **ksm** -* use **vhost-net** diff --git a/doc/source/install/ssl.rst b/doc/source/install/ssl.rst deleted file mode 100644 index c94ddffb..00000000 --- a/doc/source/install/ssl.rst +++ /dev/null @@ -1,137 +0,0 @@ -.. - Copyright 2014 2014 Mirantis, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may - not use this file except in compliance with the License. You may obtain - a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations - under the License. - -================= -SSL configuration -================= -Murano components are able to work with SSL. This chapter will help you -to make proper settings with SSL configuration. - -HTTPS for Murano API -==================== - -SSL for Murano API service can be configured in *ssl* section in -``/etc/murano/murano.conf``. Just point to a valid SSL certificate. -See the example below: - -:: - - - [ssl] - cert_file = PATH - key_file = PATH - ca_file = PATH - -- *cert\_file* Path to the certificate file the server should use when binding to an SSL-wrapped socket. -- *key\_file* Path to the private key file the server should use when binding to an SSL-wrapped socket. -- *ca\_file* Path to the CA certificate file the server should use to validate client certificates provided during an SSL handshake. This is ignored if cert\_file and "key\_file" are not set. - -The use of SSL is automatically started after point to HTTPS protocol -instead of HTTP during registration Murano API service in endpoints -(Change publicurl argument to start with \https://). -SSL for Murano API is implemented like in any other OpenStack component. -This realization is based on ssl python module so more information about -it can be found `here`_. - -.. _`here`: https://docs.python.org/2/library/ssl.html - -SSL for RabbitMQ -================ - -All Murano components communicate with each other by RabbitMQ. This -interaction can be encrypted with SSL. By default all messages in Rabbit -MQ are not encrypted. Each RabbitMQ Exchange should be configured -separately. - -**Murano API <-> Rabbit MQ exchange <-> Murano Engine** - -Edit ssl parameters in default section of ``/etc/murano/murano.conf``. Set ``rabbit_use_ssl`` option to *true* and configure ssl kombu parameters. -Specify the path to the SSL keyfile and SSL CA certificate in a regular format: /path/to/file without quotes or leave it empty to -allow self-signed certificates. - -:: - - # connect over SSL for RabbitMQ (boolean value) - #rabbit_use_ssl=false - - # SSL version to use (valid only if SSL enabled). valid values - # are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some - # distributions (string value) - #kombu_ssl_version= - - # SSL key file (valid only if SSL enabled) (string value) - #kombu_ssl_keyfile= - - # SSL cert file (valid only if SSL enabled) (string value) - #kombu_ssl_certfile= - - # SSL certification authority file (valid only if SSL enabled) - # (string value) - #kombu_ssl_ca_certs= - - -**Murano Agent -> Rabbit MQ exchange** - -In main murano configuration file there is a section ,named *rabbitmq*, that is responsible for set up communication between Murano Agent and Rabbit MQ. -Just set *ssl* parameter to True to enable ssl. - -:: - - [rabbitmq] - host = localhost - port = 5672 - login = guest - password = guest - virtual_host = / - ssl = True - insecure = False - -If you want to configure Murano Agent in a different way change -the default template. It can be found in Murano Core Library, located at *http://git.openstack.org/cgit/openstack/murano/tree/meta/io.murano/Resources/Agent-v1.template*. Take -a look at appSettings section: - -:: - - - - - - - - - - - - - - - - - - - -Desired parameter should be set directly to the value of the key that -you want to change. Quotes are need to be kept. Thus you can change -"rabbitmq.ssl" and "rabbitmq.port" values to make Rabbit MQ work with -this exchange in a different from Murano-Engine way. -After modification, don't forget to zip and re-upload core library. - -SSL for Murano Dashboard -======================== - -If you are going not to use self-signed certificates additional -configuration do not need to be done. Just point https in the URL. -Otherwise, set *MURANO_API_INSECURE = True* on horizon config. You can -find it in ``/etc/openstack-dashboard/local_settings.py.``.