diff --git a/doc/source/deployment.rst b/doc/source/deployment.rst new file mode 100644 index 0000000..3644c8d --- /dev/null +++ b/doc/source/deployment.rst @@ -0,0 +1,1289 @@ +Deployment +++++++++++ + +Conceptual Overview +=================== + +The following is a conceptual overview of the bareon deployment process +and how it can be customised. + +User example: As a sys admin, I am managing a cluster of diskful nodes +and I want to provision all of these nodes with my custom +operating system. + +Deployment: + +* With the required images referenced, deployment is invoked using nova boot \ + (see `Invoking Deployment`_) +* Disks local to each node are partitioned according to a user provided schema \ + (see `Deploy Configuration`_) +* The OS image or images (see `Multiboot`_) \ + are transferred using rsync or swift (see `Image Transfer`_) +* Arbitrary actions, as defined in a user supplied schema are executed \ + (optional, see `Driver Actions`_) +* If an error occurred during deployment an on_fail_script can be configured to run \ + (optional, see `on_fail_script`_) +* Deployment is complete and the node reboots from its local storage. + +Post deployment (optional): + +* Additional driver actions can be performed \ + (see `Driver Actions`_) +* Nodes can be rebuilt (see `Rebuilding Nodes`_) \ + or verified without modifying existing content \ + (see `Redeploying Without Modifying Content`_) + + +Invoking Deployment +=================== + + +Required Images +--------------- + +The following images are required for successful deployment using the bareon agent +(for storage options see `Url Resolution`_ below): + ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| Image | | Example | Description | Referenced by: | ++========================+==============+==============================+====================================================================================+=========================================+ +| Bareon RAM disk | Required | bareon/initramfs.1 | Used by bareon to deploy nodes [1] | ironic node | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| Bareon kernel | Required | bareon/kernel.1 | Used by bareon to deploy nodes [1] | ironic node | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| OS image | Required | centos-7.1.1503.raw | OS and filesystem | nova boot | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| Default deploy schema | Required | cloud_default_deploy_config | Bareon deployment configuration | /etc/ironic/ironic.conf | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| Optional deploy schema | Recommended | deploy_config | Appends default schema, overrides on conflict | nova boot | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| Driver actions | Optional | actions_list | List of arbitrary actions to be ran during/post deployment | nova boot | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| on_fail_script | Optional | on_fail_script | Bash script to be ran on deployment failure | deploy schema | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ +| SSH private key | Optional | id_rsa | Required to run driver actions post deployment or switch between multiboot images | nova boot | ++------------------------+--------------+------------------------------+------------------------------------------------------------------------------------+-----------------------------------------+ + +[1] The bareon RAM disk and kernel images are built using ``bareon/tests_functional/image_build/centos_minimal.sh`` and can be found at ``/tmp/rft_image_build``. + +URL Resolution +^^^^^^^^^^^^^^ + +References given to the bareon driver (e.g. via nova boot) +as well as references from the deploy_config (e.g. on_fail_script) are URLs. +Currently 4 types of URL sources are supported and can be specified by using the +following call structures: + ++-------------+----------------------------------------------------+------------------+ +| URL Source | Call structure | Tenant isolation | ++=============+====================================================+==================+ +| glance | glance: | Yes | ++-------------+----------------------------------------------------+------------------+ +| swift | swift:container_name/object_name | Yes [1] | ++-------------+----------------------------------------------------+------------------+ +| http | http://site/path_to_resource | No | ++-------------+----------------------------------------------------+------------------+ +| rsync | rsync:SERVER_IP::rsync_module/path_to_resource | No | ++-------------+----------------------------------------------------+------------------+ + +[1] Due to an ironic API limitation, to use a swift resource during deployment +(e.g. ``–meta deploy_config=swift:*``), the user should have an ‘admin’ role in his tenant. + +The ``default_resource_storage_prefix`` in ``/etc/ironic/ironic.conf`` +option can be used to shorten the URL for the most frequently used URL type. + +.. note:: + + The default "default_resource_storage_prefix" is "glance:" and so glance images + can be referenced by simply using: + +If set, the prefix can still be overridden if the full URL is passed. +For example, if the option is set to ``http://my-config-site/raw/``, +you can still use another http site if you specify a full URL like: +``http://my-other-config-site/raw/resource_id``. If another storage +type is needed, use the full URL to specify that source. + +Creating glance images +^^^^^^^^^^^^^^^^^^^^^^ + +To use default resource storage (glance), glance images can be created using a +JSON file as follows: + +.. code-block:: console + + glance image-create --is-public True --disk-format raw \ + --container-format bare --name deploy_config_example --file deploy_config_example + +See `Url Resolution`_ for information on how to use alternate storage sources. + +.. warning:: + + For JSON files: an error in the JSON file will prevent the deploy from + succeeding, you should validate the JSON syntax, for example by + executing: + + .. code-block:: console + + glance image-download deploy_config_example | python -m json.tool + + +Image Transfer +^^^^^^^^^^^^^^ + +By default bareon uses rsync to transfer images onto the node. +The settings for rsync are detailed in the deployment configuration schema +(see image_deploy_flags_). For more information on rsync +see https://rsync.samba.org/documentation.html. + +Swift may also be used to transfer files, however it is currently unsupported. + +Deployment Using Nova +--------------------- + +Nodes can be deployed using nova boot by explicitly referencing the required images: + +.. code-block:: console + + nova boot deploy-instance --image centos-7.1.1503.raw \ + --flavor ironic_flavor --meta deploy_config=deploy_config_example \ + --key-name=default + +Invoking Driver Actions +----------------------- + +User example: As a sys admin I want to perform a BIOS update as part of +deployment. I can use driver actions to do this. + +In order to execute actions during deployment, the nova metadata must include +a reference to the desired action list JSON, in this +example ``driver_actions=actions_list_example``. This may be specified as +part of the nova boot command: + +.. code-block:: console + + nova boot deploy-instance --image centos-7.1.1503.raw \ + --flavor ironic_flavor --meta deploy_config=deploy_config_example \ + --key-name=default --meta driver_actions=actions_list_example + +For invoking driver actions on an already deployed node +see `Driver Actions Post Deployment`_. + + +Multiboot +--------- + +User example: In addition to the main operating system I want to boot a second operating +system for running system diagnostics. These should be on separate partitions which can +be individually booted. + +Multiple images can be deployed to a disk or volume and a multiboot node +can be configured by mounting multiple images at root on separate partitions +(see images_). + +Switching between images on a multiboot node is possible following +`Switching Boot Image in a Multiboot Node`_. + +Modifying the Kernel Command Line +--------------------------------- + +You may optionally configure the contents of the command line passed to the kernel at boot +by modifying ``pxe_append_params`` in ``/etc/ironic/ironic.conf``. + + +Deploy Configuration +==================== + + +Deploy Schemas +-------------- + +The bareon driver is controlled by a mandatory JSON file ``cloud_default_deploy_config`` +and an optional (but recommended) JSON file ``deploy_config``, which appends the default and overwrites on conflict. + +Bareon will automatically refer to ``cloud_default_deploy_config`` for all deployments as specified +in ``/etc/ironic/ironic.conf`` whereas ``deploy_config`` is referenced on a node by node basis using +nova boot. Thus it is highly recommended to put any node-specific or +image-specific details into the ``deploy_config`` rather than ``cloud_default_deploy_config``. + +Both files have the same structure consisting of a number of attributes that control +various deployment stages. These attributes and their effect are described in +the `Deploy Configuration JSON Structure`_. + +Currently supported attributes are: + +.. code-block:: json + + { + "image_deploy_flags": "..." + "partitions_policy": "..." + "partitions": "..." + } + +User example: As a sys admin I am doing a clean install of several nodes +each with a different partition schema, I put ``image_deploy_flags`` and +``partitions_policy`` in ``cloud_default_deploy_config`` and +``partitions`` in ``deploy_config`` (see below). If multiple nodes had the +same schema I would include that in ``cloud_default_deploy_config`` overriding +specific nodes with ``deploy_config`` as necessary. + + +Cloud Default Example +--------------------- + +.. code-block:: json + + { + "image_deploy_flags": { + "rsync_flags": "-a -A -X --timeout 300" + }, + "partitions_policy": "clean" + } + + +Deploy Config Examples +---------------------- + +No LVM +^^^^^^ + +.. image:: diagrams/deploy_config_no_lvm.svg + +.. code-block:: json + + { + "partitions": [ + { + "id": { + "type": "name", + "value": "vda" + }, + "type": "disk", + "size": "15000 MB", + "volumes": [ + { + "file_system": "ext4", + "mount": "/", + "size": "7000 MB", + "type": "partition" + }, + { + "file_system": "ext4", + "mount": "/var", + "size": "4000 MB", + "type": "partition" + } + ] + } + ] + } + +Partial LVM +^^^^^^^^^^^ + +.. warning:: Not currently supported. + +.. image:: diagrams/deploy_config_partial_lvm.svg + +.. code-block:: json + + { + "partitions": [ + { + "id": { + "type": "name", + "value": "vda" + }, + "type": "disk", + "size": "15000 MB", + "volumes": [ + { + "file_system": "ext4", + "mount": "/", + "size": "10000 MB", + "type": "partition" + }, + { + "size": "remaining", + "type": "pv", + "vg": "volume_group" + } + ] + }, + { + "id": "volume_group", + "type": "vg", + "volumes": [ + { + "file_system": "ext3", + "mount": "/home", + "name": "home", + "size": "4000 MB", + "type": "lv" + }, + { + "file_system": "ext3", + "mount": "/var", + "name": "var", + "size": "remaining", + "type": "lv" + } + + ] + } + ] + } + +Full LVM +^^^^^^^^ + +.. warning:: Not currently supported. + +.. image:: diagrams/deploy_config_full_lvm.svg + +.. code-block:: json + + { + "partitions": [ + { + "id": { + "type": "name", + "value": "vda" + }, + "type": "disk", + "size": "15000 MB", + "volumes": [ + { + "file_system": "ext4", + "mount": "/boot", + "size": "100 MB", + "type": "partition" + }, + { + "size": "remaining", + "type": "pv", + "vg": "volume_group" + } + ] + }, + { + "id": "volume_group", + "type": "vg", + "volumes": [ + { + "file_system": "ext3", + "mount": "/", + "name": "root", + "size": "10000 MB", + "type": "lv" + }, + { + "file_system": "ext3", + "mount": "/home", + "name": "home", + "size": "4000 MB", + "type": "lv" + }, + { + "file_system": "ext3", + "mount": "/var", + "name": "var", + "size": "remaining", + "type": "lv" + } + ] + } + ] + } + + +Deploy Configuration JSON Structure +----------------------------------- + + +image_deploy_flags +^^^^^^^^^^^^^^^^^^ + +The attribute ``image_deploy_flags`` is composed in JSON, and is used to set flags +in the deployment tool. + +.. note:: Currently used only by rsync. + +The general structure is: + +.. code-block:: console + + "image_deploy_flags": {"rsync_flags": "-a -A -X --timeout 300"} + + +partitions_policy +^^^^^^^^^^^^^^^^^ + +Defines the partitioning behavior of the driver. Optional, default is "verify". +General structure is: + +.. code-block:: console + + "partitions_policy": "verify" + + +The partitions policy can take one of the following values: + +**verify** - Applied in two steps: + +1. Do verification. Compare partitions schema with existing partitions on the + disk(s). If the schema matches the on-disk partition layout + (including registered fstab mount points) then deployment succeeds. + If the schema does not match the on-disk layout, deployment fails and the + node is returned to the pool. No modification to the on-disk content is + made in this case. Any disks present on the target node that are not + mentioned in the schema are ignored. + + .. note:: + + File */etc/fstab* must be present on the node, and written + using partition UUIDs. + + .. note:: + + LVM verification is not supported currently. PVs/VGs/LVs are not being + read from the node. + +2. Clean data on filesystems marked as ``"keep_data": false``. See partitions + sections below. + +**clean** - Applied in a single step: + +1. Ignore existing partitions on the disk(s). Clean the disk and create + partitions according to the schema. Any disks present on the target node + that are not mentioned in the schema are ignored. + + +partitions +^^^^^^^^^^ + + +disk +"""" + +- type - "disk". Required. +- size - Size of disk, required, see `Specifying Size`_. +- id - Used to find a device. Required. For example: + + .. code-block:: console + + "id":{"type": "scsi", "value": "6:1:0:0"} + + "id":{"type": "path", + "value" : "disk/by-path/pci-0000:00:07.0-virtio-pci-virtio3"} + + "id":{"type": "path", + "value" : "disk/by-id/ata-SomeSerialNumber"} + + "id":{"type": "name", "value": "vda"} + + .. note:: + + A good description of the various paths which may be used to specify + a block device in a persistent way is given + `here `_. + However, it is important to note that depending on the ramdisk and kernel + these may change. For example, it has been observed that the disk/by-id/wwn + field is permuted from, for example *wwn-0x5bea7a3ac5005000* to + *wwn-0x5000c5007a3a5bea* when booting different reference images. + +- volumes - Array of partitions / physical volumes. See below. Required. + + +partition +""""""""" + +- type - "partition". Required. +- size - Size of partition, required, see `Specifying Size`_. +- mount - Mount point, e.g. "/", "/usr". Optional (not mounted by default). +- file_system - File system type. Passed down to mkfs call. + Optional (xfs by default). +- disk_label - Filesystem label. Optional (empty by default). +- partition_guid - GUID that will be assigned to partition. Optional. +- fstab_enabled - boolean value that specifies whether the partition will be + included in /etc/fstab and mounted. Optional (true by default). +- fstab_options - string to specify fstab mount options. + Optional ('defaults' by default). +- keep_data - Boolean flag specifying whether or not to preserve data on this + partition. Applied when ``verify`` partitions_policy is used. Optional (true + by default). + +.. warning:: + + If you are using the bareon swift deployment driver (swift_*), + care must be taken when declaring mount points in your deployment + configuration file that may conflict with those that exist in the tenant + image. Doing this will cause the mount points defined in the deployment + configuration to mask the corresponding directories in the tenant image + when the deployment completes. For example, if your deployment + configuration file contains a definition for '/etc/', the deployment will + create an empty filesystem on disk and mount it on /etc in the tenant image. + This will hide the contents of '/etc' from the original tenant image with + the on-disk filesystem which was created during deployment. + + +physical volume +""""""""""""""" + +- type - "pv". Required. +- size - Size of the physical volume, required, see `Specifying Size`_. +- vg - id of the volume group this physical volume should belong to. Required. +- lvm_meta_size - a size that given to lvm to store metadata. + Optional (64 MiB by default). Minimum allowable value: 10 MiB. +- images - A list of strings, specifying the images to be used during deployment. + Images are referred to by the name specified in the “name” attribute of the image (see see `Images`_). + Optional. + + +volume group +"""""""""""" + +- type - "vg". Required. +- id - Volume group name. Should be referred at least once from pv. Required. +- volumes - Array of logical volumes. See below. Required. + + +logical volume +"""""""""""""" + +- type - "lv". Required. +- name - Name of the logical volume. Required. +- size - Size of the logical volume, required, see `Specifying Size`_. +- mount - Mount point, e.g. "/", "/usr". Optional. +- file_system - File system type. Passed down to mkfs call. + Optional (xfs by default). +- disk_label - Filesystem label. Optional (empty by default). +- images - A list of strings, specifying the images to be used during deployment. + Images are referred to by the name specified in the “name” attribute of the image (see see `Images`_). + Optional. + +.. warning:: + + If you are using the bareon swift deployment driver (swift_*), + care must be taken when declaring mount points in your deployment + configuration file that may conflict with those that exist in the tenant + image. Doing this will cause the mount points defined in the deployment + configuration to mask the corresponding directories in the tenant image + when the deployment completes. For example, if your deployment + configuration file contains a definition for '/etc/', the deployment will + create an empty filesystem on disk and mount it on /etc in the tenant image. + This will hide the contents of '/etc' from the original tenant image with + the on-disk filesystem which was created during deployment. + +.. note:: + + Putting a "/" partition on LVM requires a standalone "/boot" partition + defined in the schema and the node should be managed by the rsync ironic + driver. + + +images +^^^^^^ + +Contains a list of image specifications to be used during deployment. +If no list of images is supplied, the list will default to one image: +the one passed via the ``-–image`` arg of ``nova boot`` command. + +Each partition has an image to which it belongs, this partition is mounted into the filesystem +tree before the image is deployed, and then included into the fstab file of that +filesystem. By default the partition belongs to the first image in the list of images. + +Other images can be specified which will be appended to this list and can be used to +create a multiboot node. + +An example of the ``deploy_config`` for two-image deployment: + +.. code-block:: json + + { + "images": [ + { + "name": "centos", + "url": "centos-7.1.1503.raw", + "target": "/" + }, + { + "name": "ubuntu", + "url": "ubuntu-14.04.raw", + "target": "/" + } + ], + "partitions": [ + { + "id": { + "type": "name", + "value": "vda" + }, + "type": "disk", + "size": "15000 MB", + "volumes": [ + { + "file_system": "ext4", + "mount": "/", + "size": "5000 MB", + "type": "partition", + "images": ["centos"] + }, + { + "file_system": "ext4", + "mount": "/", + "size": "5000 MB", + "type": "partition", + "images": ["ubuntu"] + } + ] + } + ], + "partitions_policy": "clean" + } + + +During the multi-image deployment, the initial boot image is specified via the +``nova boot --image `` attribute. For example with the config shown +above, if you need the node to start from ubuntu, pass ``--image ubuntu-14.04.raw`` +to ``nova boot``. + +.. note:: + + If one of the images used in a multi-image deployment has grub1 installed, + it is not guaranteed that it will appear in a resulting grub.cfg and a list + of available images. + +The process of switching the active image is described in `Switching Boot Image in a Multiboot Node`_ +section. + +Images JSON attributes and their effect are described below. + + +name +"""" + +An alias name of the image. Referenced by the ``images`` attribute of the +partition or logical volume (see `physical volume`_, `logical volume`_). +Required. + + +url +""" + +A URL pointing to the image. See `Url Resolution`_ for available storage sources. Required. + + +target +"""""" + +A point in the filesystem tree where the image should be deployed. Required. + +For standard cloud images this will be a ``/``. Utility images can have +a different value, like ``/usr/share/utils``. + +User example: As a sys admin, I want a utilities image to be deployed to its own partition, +which is to be included in the fstab file of both of the two other images (Centos and Ubuntu): + +.. code-block:: json + + { + "images":[ + { + "name":"centos", + "url":"centos-7.1.1503.raw", + "target":"/" + }, + { + "name":"ubuntu", + "url":"ubuntu-14.04.raw", + "target":"/" + }, + { + "name":"utils", + "url":"utils-ver1.0", + "target":"/usr/share/utils" + } + ], + "partitions":[ + { + "id":{ + "type":"name", + "value":"vda" + }, + "type":"disk", + "size": "15000 MB", + "volumes":[ + { + "file_system":"ext4", + "mount":"/", + "size":"5000 MB", + "type":"partition", + "images":[ + "centos" + ] + }, + { + "file_system":"ext4", + "mount":"/", + "size":"5000 MB", + "type":"partition", + "images":[ + "ubuntu" + ] + } + ] + }, + { + "mount":"/usr/share/utils", + "images":[ + "centos", + "ubuntu", + "utils" + ], + "type":"partition", + "file_system":"ext4", + "size":"2000" + } + ], + "partitions_policy":"clean" + } + +.. note:: + + The partition "images" list also includes "utils" image as well. + The utils partition virtually belongs to the "utils" image, and is mounted + to the fs tree before the "utils" image deployment (fake root in this case). + + +on_fail_script +^^^^^^^^^^^^^^ + +Carries a URL reference to a shell script (bash) executed inside ramdisk in case +of non-zero return code from bareon-agent. Optional (default is empty shell). + +General structure is: + +.. code-block:: console + + "on_fail_script": "my_on_fail_script.sh" + +Once the script is executed, the output is printed to the ironic-conductor log +(``ir-cond.log``). + + +Specifying Size +--------------- + +The 'size' value of a partition, physical or logical volume can be +specified as follows: + + +**Size String** + +.. code-block:: console + + "size": "15000 MB" + +Available measurement units are: 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB', +'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'. + +**Percentage** + +.. code-block:: console + + "size": "50%" + +Percentages are calculated after taking into account any overhead as discussed +in `Implicitly taken space in partitions schema`_. + + +**Remainder** + +.. code-block:: console + + "size": "remaining" + +The keyword "remaining" uses all available space after taking into account +any overhead as discussed in `Implicitly taken space in partitions schema`_. +It can be used once per device. When specifying the size of +partitions on a disk, only one partition may specify a size of "remaining". + + +Implicitly taken space in partitions schema +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The bareon driver implicitly creates a number of partitions/spaces: + +- For every disk in the schema the bareon driver creates a 24 MiB partition + at the beginning. This is to allow correct installation of Grub Stage 1.5 + data. It is implicitly created for every disk in schema even if the disk + does not have /boot partition. Thus if 10000 MiB disk size is declared by + schema, 9976 MiB is available for partitions/pvs. 24 MiB value is not + configurable. + +- Every physical volume has 64 MiB less space than in takes on disk. If you + declare a physical volume of size 5000 MiB, the volume group will get 4936 + MiB available. If there are two physical volumes of 5000 MiB, the resulting + volume group will have 9872 MiB (10000 - 2*64) available. This extra space + is left for LVM metadata. 64 MiB value can be overridden by lvm_meta_size + attribute of the pv, see `physical volume`_. + +- In case of multi-image deployment (see `Images`_) an additional + 100 MiB partition is created on the boot disk (the 1st disk referred from + ``deploy_config``). This partition is used to install the Grub boot loader. + +It is not necessary to precisely calculate how much space is left. You may +leave for example 100 MiB free on each disk, and about 100-200 MiB in each +volume group, depending on how many physical volumes are in the group. +Alternatively you can use the "remaining" keyword or percentages to let the +bareon driver calculate this for you, see `disk`_. + + +Editing an existing bareon deployment configuration +--------------------------------------------------- + +The following steps can be taken in order to change an existing bareon deployment +configuration: + +#. Download the existing bareon cloud deploy configuration: + + .. code-block:: console + + glance image-download deploy_config_example \ + --file /tmp/deploy_config_example + +#. Edit the configuration as needed with an editor or, + e.g. (in this example a bandwidth limit is being added): + + .. code-block:: console + + sed -i.bak \ + -e 's/"-a -A -X --timeout 300"/"-a -A -X --timeout 300 --bwlimit 12500"/g' \ + /tmp/deploy_config_example + +#. Validate the json structure (this command shouldn't print anything if the + file contains valid json): + + .. code-block:: console + + python -m json.tool /tmp/deploy_config_example > /dev/null + +#. Delete the old cloud deploy configuration image: + + .. code-block:: console + + glance image-delete deploy_config_example + +#. Upload the new cloud deploy configuration image: + + .. code-block:: console + + glance image-create \ + --name deploy_config_example \ + --container-format bare \ + --disk-format raw \ + --is-public True \ + --file /tmp/deploy_config_example + +#. Download the cloud deploy configuration image in order to check that the + changes have been applied: + + .. code-block:: console + + glance image-download deploy_config_example + { + "image_deploy_flags": { + "rsync_flags": "-a -A -X --timeout 300 --bwlimit 12500" + } + } + + +Driver Actions +============== + +The ironic bareon driver can execute arbitrary user actions provided in a JSON +file describing the actions to be performed. This file has a number of +sections to control the execution of these actions. +To use the ironic bareon driver actions execution you must create an action list in +the resource storage to reference. + + +Actions List JSON Structure +--------------------------- + + +actions +^^^^^^^ +An attribute called ``actions`` holds a list of actions being applied +to the node. Actions are executed in the order in which they appear in the list. + +General structure is: + +.. code-block:: json + + { + "actions": + [ + { + "cmd": "cat", + "name": "print_config_file", + "terminate_on_fail": true, + "args": "/tmp/conf", + "sudo": true, + "resources": + [ + { + "name": "resource_1", + "url": "my-resource-url-1", + "mode": "push", + "target": "/tmp/conf" + }, + { + "name": "resource_2", + "url": "my-resource-url-2", + "mode": "push", + "target": "/tmp/other-file" + }, + { + "...more resources" + } + ] + }, + { + "...more actions" + } + ] + } + +- cmd - shell command to execute. Required. +- args - arguments for cmd. Required. +- name - alpha-numeric name of the action. Required. +- terminate_on_fail - flag to specify if actions execution should be terminated + in case of action failure. Required. +- sudo - flag to specify if execution should be executed with sudo. Required. +- resources - array of resources. See resource. Required. May be an empty list. + +resource +"""""""" + +Defines the resource required to execute an action. General structure is: + +.. code-block:: json + + { + "name": "resource_1", + "url": "resource-url", + "mode": "push", + "target": "/tmp/conf" + } + +- name - alpha-numeric name of the resource. Required. +- url - a URL pointing to resource. See `Url Resolution`_ for available + storage sources. +- mode - resource mode. See below. Required. +- target - target file name on the node. Required. + +Resource **mode** can take one of the following: + +- **push**. A resource of this type is cached by the ironic conductor and + uploaded to the node at target path. + +- **pull**. A resource of this type is cached by the ironic conductor and the + reference to the resource is passed to the node (the reference is written + to the file specified by the 'target' attribute) so that it can be pulled + as part of the action. The reference is an rsync path that allows the node + to pull the resource from the conductor. A typical way to pull the + resource is: + +.. code-block:: console + + root@baremetal-node # rsync $(cat /ref/file/path) . + + +- **pull-mount**. Like resources in pull mode, the resource is cached and the + reference is passed to the target node. However, pull-mount resources are + assumed to be file system images and are mounted in loopback mode by the + ironic conductor. This allows the referencing action to pull from the + filesystem tree as is done during rsync-based deployments. The following + example will pull the contents of the image to the /root/path: + +.. code-block:: console + + root@baremetal-node # rsync -avz $(cat /ref/file/path) /root/path + + +- **pull-swift-tempurl**. For resources of this type, ironic obtains a swift + tempurl reference to the object and writes this tempurl to the file + specified by the resource 'target' attribute. The tempurl duration is + controlled by the ``/etc/ironic/ironic.conf``: + + * for ``glance:`` URLs an option ``swift_temp_url_duration`` from [glance] + section is used; + * for ``swift:`` URLs an option ``swift_native_temp_url_duration`` + from [swift] section is used. + +.. note:: + + To use 'pull-swift-tempurl' resource with glance store glance must be + set to have swift as a backend. + +.. note:: + + Although all the glance images are stored in the same swift container, + tempurls obtained from glance are considered tenant-isolated because the + tenant is checked by glance as part of the generation of the temporary URL. + +Resources of all modes can be mixed in a single action. + + +Post Deployment +=============== + + +Switching Boot Image in a Multiboot Node +---------------------------------------- + +If a node has more than one image deployed (see `Images`_), the user can +switch the boot image in two ways. Both of them require ironic conductor to SSH to +the node, thus SSH user/key needs to be provided using the ``sb_user`` and ``sb_key`` meta +attributes. These stand for 'switch boot user' and 'switch boot key'. They are the username +and a URL pointing to a SSH private key that can be used to SSH to the node (ie the node has a +corresponding public key installed). Only sources with tenant isolation can be used for this URL. +See `Url Resolution`_ for available storage sources. + +Switching via nova rebuild +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To list images available to boot: + +.. code-block:: console + + nova show $VM_NAME + +In the output from this command the ``metadata`` attribute will show a list of available images, like: + +.. code-block:: console + + "available_images": ['centos-7.1.1503.raw', 'ubuntu-14.04.raw'] + +The currently booted image is shown by ``image`` attribute of the VM. Let's say the +current image is ``centos-7.1.1503.raw``. To switch to ``ubuntu-14.04.raw`` do: + +.. code-block:: console + + nova rebuild $VM_NAME 'ubuntu-14.04.raw' \ + --meta sb_key=$URL --meta sb_user=centos + +Switching boot device through ``nova rebuild`` will also trigger an ironic node reboot. +The nova instance will be in the ``rebuild_spawning`` state during the switching process. Once +it is active the node will start booting the specified image. If the switch did not +complete properly, issue another ``nova show`` and check for ``switch_boot_error`` +attribute in VM metadata. + +.. Note:: + + For single-boot nodes, a rebuild command will trigger a standard rebuild flow, + for multiboot nodes it is still possible to trigger a standard rebuild flow using + "force_rebuild" meta flag: ``nova rebuild VM_NAME 'ubuntu-14.04.raw' --meta force_rebuild=True`` + +Switching via ironic node vendor-passthru +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To list images available to boot: + +.. code-block:: console + + ironic node-show $NODE_NAME + +The output will contain the ``instance_info/multiboot_info/elements`` attribute, +which will include a list of available images. Example CLI output: + +.. code-block:: console + + ... + | | u'multiboot_info': {u'elements': [{u'grub_id': 0, u'image_name': | + | | u'centos-7.1.1503.raw', u'os_id': u'centos', u'image_uuid': | + | | u'f9ae2956-cb66-47f9-a358-bb546580c499', u'boot_name': u'CentOS Linux | + | | release 7.2.1511 (Core) (on /dev/vda3)', u'root_uuid': u'3a5e1bd7-de0f- | + | | 40a4-81ef-a6c1ee6fc8b2'}, {u'grub_id': 2, u'image_name': u'ubuntu- | + | | 14.04.raw', u'os_id': u'ubuntu', u'image_uuid': | + | | u'e27b81cd-a005-4ee5-acd5-b1e69a229dcf', u'boot_name': u'Ubuntu Linux | + | | release 14.04 LTS (Core) (on /dev/vda4)', u'root_uuid': u'dcbf7a9b- | + | | b18a-4026-9e20-e7bb520d219a'}], u'current_element': 1, | + ... + +Every element has a ``grub_id`` +attribute, which shows its ID in the grub menu. An ``instance_info/multiboot_info/current_element`` +shows the ID of the currently selected image. To switch to another image do: + +.. code-block:: console + + ironic node-vendor-passthru $NODE_NAME switch_boot \ + image= ssh_key=$URL ssh_user=centos + +The API is synchronous, it will block until the switch is done. + +Note that switching boot device through ``ironic node-vendor-passthru`` will not +trigger an ironic node reboot. It only updates the grub.cfg. The node needs to be +rebooted separately, after the vendor API returns: + +.. code-block:: console + + ironic node-set-power-state $NODE_NAME reboot + +Once it is done the node will start booting the specified image. + +.. note:: + + If ironic CLI is used to switch the boot device, nova VM 'image', as well as ironic + 'instance_info/image_source' are not updated to point to the currently booted image. + + +Driver Actions Post Deployment +------------------------------ + +Actions can also be executed on a working node. To do so the following +parameters must be added to the action configuration file in `Driver Actions`_: + + +action_key +^^^^^^^^^^ + +An attribute called ``action_key`` holds a resource storage URL pointing to a SSH +private key contents being used to establish SSH connection to the node. + +Only sources with tenant isolation can be used for this URL. See +`Url Resolution`_ for available storage sources. + +.. code-block:: console + + "action_key": "ssh_key_url" + + +action_user +^^^^^^^^^^^ + +An attribute called action_user holds a name of the user used to establish +an SSH connection to the node with the key provided in action_key. + +.. code-block:: console + + "action_user": "centos" + +Example +^^^^^^^ + +.. code-block:: console + + cat actions_list_example + +.. code-block:: json + + { + "action_key": "ssh-key-url", + "action_user": "centos", + "actions": + [ + "..." + ] + } + +Invoking Driver Actions +^^^^^^^^^^^^^^^^^^^^^^^ + +In order to execute actions whilst the node is running, +you should specify ``exec_actions`` node-vendor-passthru method, +``driver_actions=actions_list_example`` property and node uuid. +For example: + +.. code-block:: console + + ironic node-vendor-passthru --http-method POST \ + node_uuid exec_actions driver_actions=actions_list_example + + +Rebuilding Nodes +---------------- + +The ``nova rebuild`` command may be used to force the redeployment of a node. + +.. code-block:: console + + nova rebuild deploy-instance centos-7.1.1503.raw + +To make the redeployment use a deployment configuration different to that +previously configured use the ``--meta`` option: + +.. code-block:: console + + nova rebuild deploy-instance centos-7.1.1503.raw --meta deploy_config=new_deploy_config + +Similarly, alternative driver_actions may also be passed using ``--meta``: + +.. code-block:: console + + nova rebuild deploy-instance centos-7.1.1503.raw --meta driver_actions=actions_list_example + +Both driver_actions and deploy_configs may be passed by specifying multiple +``--meta`` arguments: + +.. code-block:: console + + nova rebuild deploy-instance centos-7.1.1503.raw \ + --meta deploy_config=new_deploy_config \ + --meta driver_actions=actions_list_example + + +Redeploying Without Modifying Content +------------------------------------- + +There are circumstances where you may want to carry out a deployment to a node +without modifying the contents of the disk in the node. + +There are some prerequisites for this process: + +* The node must be currently enrolled in ironic and must be using the bareon + rsync driver for deployment +* The bareon partition schema associated with the node must: + + * match the partition table on the node + * specify disks by ID when more than one disk is listed in the schema +* All disks listed in the bareon partition schema associated with the node must: + + * have previously been deployed using bareon + * not use LVM + +If these conditions are satisfied then you may deploy to the node using your +normal process, however the bareon deploy configuration used must have: + +* ``partition_policy`` set to ``verify`` instead of ``clean`` (see + `partitions_policy`_) +* The ``keep_data`` flag must be set to ``True`` (which is the default) on all + partitions to be retained (see `partition`_) +* The ``image_deploy_flags`` must contain an ``rsync_flags`` entry with the + ``--dry-run`` option. You should also include the default ``rsync_flags`` + entries as described in `image_deploy_flags`_. + +A partial example of a suitable bareon deploy configuration, omitting the +partition schema: + +.. code-block:: json + + { + "image_deploy_flags": { + "rsync_flags": "-a -A -X --timeout 300 --dry-run" + }, + "partitions_policy": "verify", + "partitions": [ + ] + } + +.. note:: + + More fine-grained control over file retention is possible using the + capabilities provided by rsync: refer to the rsync documentation for further + details. + + For example, to redeploy the disk leaving the contents of ``/etc`` and + ``/home`` unmodified you could use ``--exclude /etc/* --exclude /home/*`` in + place of ``--dry-run`` in ``rsync_flags``. diff --git a/doc/source/diagrams/deploy_config_full_lvm.gliffy b/doc/source/diagrams/deploy_config_full_lvm.gliffy new file mode 100644 index 0000000..d4cfecd --- /dev/null +++ b/doc/source/diagrams/deploy_config_full_lvm.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":632,"height":299,"nodeIndex":32,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":null,"imageCache":{},"viewportType":"default","fitBB":{"min":{"x":19.999999999999986,"y":20.5},"max":{"x":631.1475752708898,"y":298.5}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":125.34053902355498,"y":60.5,"rotation":0.0,"id":30,"width":380.0,"height":200.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#999999","fillColor":"#ffffff","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":26.147575270889746,"y":22.0,"rotation":0.0,"id":29,"width":98.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

mount

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":145.14757527088972,"y":80.5,"rotation":0.0,"id":27,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":6,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":28,"width":96.0,"height":14.0,"uid":null,"order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

root

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"v1qK2f6xvd7q"}],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":145.14757527088972,"y":120.5,"rotation":0.0,"id":25,"width":340.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":11,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":6.799999999999995,"y":0.0,"rotation":0.0,"id":26,"width":326.4,"height":14.0,"uid":null,"order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

volume_group

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"v1qK2f6xvd7q"}],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":145.34053902355498,"y":178.5,"rotation":0.0,"id":23,"width":340.0,"height":19.999999999999996,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":6.799999999999997,"y":0.0,"rotation":0.0,"id":24,"width":326.4000000000001,"height":14.0,"uid":null,"order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

pv

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"v1qK2f6xvd7q"}],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":525.1475752708898,"y":178.5,"rotation":0.0,"id":21,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":22,"width":96.0,"height":14.0,"uid":null,"order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

partition [1]

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"v1qK2f6xvd7q"}],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":-206.85242472911028,"y":210.09999084472656,"rotation":0.0,"id":20,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":26,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":27,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[402.0,-129.59999084472656],[402.0,-169.59999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":181.95461151822445,"y":218.59999084472656,"rotation":0.0,"id":19,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":28,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":21,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[393.1929637526653,-40.09999084472656],[393.1929637526653,-178.09999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":111.50705084398484,"y":46.09999084472656,"rotation":0.0,"id":18,"width":419.0867367676637,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":30,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-87.00705084398486,-5.59999084472679],[513.9774033743798,-5.5999908447265625]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":26.147575270889746,"y":181.5,"rotation":0.0,"id":17,"width":98.0,"height":17.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

disk

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":143.8856161686455,"y":166.09999084472656,"rotation":0.0,"id":16,"width":503.8535437216023,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":34,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-117.87565445712187,-5.5999908447265625],[480.59634562137524,-5.599990844726221]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":635.9777051708526,"y":104.09999084472656,"rotation":0.0,"id":15,"width":503.8535437216023,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":36,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-609.9677434593286,117.40000915527344],[-11.989053427938416,117.40000915527366]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":125.34053902355498,"y":230.5,"rotation":0.0,"id":14,"width":380.0,"height":30.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

LVM

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":145.14757527088972,"y":20.5,"rotation":0.0,"id":13,"width":100.0,"height":17.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":40,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":525.1475752708898,"y":20.5,"rotation":0.0,"id":12,"width":100.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/boot

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":265.1475752708897,"y":80.5,"rotation":0.0,"id":10,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":44,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":11,"width":96.0,"height":14.0,"uid":null,"order":47,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

home

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"v1qK2f6xvd7q"}],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":143.14757527088972,"y":200.09999084472656,"rotation":0.0,"id":9,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":49,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":10,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[172.0,-119.59999084472656],[172.0,-159.59999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":265.1475752708897,"y":20.0,"rotation":0.0,"id":8,"width":100.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":51,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/home

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":26.147575270889746,"y":120.5,"rotation":0.0,"id":7,"width":98.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":53,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

vg

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":26.147575270889746,"y":80.5,"rotation":0.0,"id":6,"width":98.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":55,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

lv

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":385.340539023555,"y":80.5,"rotation":0.0,"id":4,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":57,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":5,"width":96.0,"height":14.0,"uid":null,"order":60,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

var

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"v1qK2f6xvd7q"}],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":153.14757527088972,"y":210.09999084472656,"rotation":0.0,"id":3,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":62,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":4,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[282.19296375266526,-129.59999084472656],[282.19296375266526,-169.59999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":385.340539023555,"y":20.0,"rotation":0.0,"id":2,"width":100.0,"height":15.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":64,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/var

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"},{"x":26.147575270889746,"y":284.5,"rotation":0.0,"id":1,"width":221.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":66,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

[1] Required if root ("/") is located on LVM

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"v1qK2f6xvd7q"}],"layers":[{"guid":"v1qK2f6xvd7q","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":67}],"shapeStyles":{},"lineStyles":{},"textStyles":{}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.images"],"lastSerialized":1480956222075,"analyticsProduct":"Confluence"},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/doc/source/diagrams/deploy_config_full_lvm.png b/doc/source/diagrams/deploy_config_full_lvm.png new file mode 100644 index 0000000..95ac860 Binary files /dev/null and b/doc/source/diagrams/deploy_config_full_lvm.png differ diff --git a/doc/source/diagrams/deploy_config_full_lvm.svg b/doc/source/diagrams/deploy_config_full_lvm.svg new file mode 100644 index 0000000..8d67e7e --- /dev/null +++ b/doc/source/diagrams/deploy_config_full_lvm.svg @@ -0,0 +1 @@ +mountrootvolume_grouppvpartition [1]diskLVM//boothome/homevglvvar/var[1]Requiredifroot ("/")islocatedonLVM \ No newline at end of file diff --git a/doc/source/diagrams/deploy_config_no_lvm.gliffy b/doc/source/diagrams/deploy_config_no_lvm.gliffy new file mode 100644 index 0000000..7c62f80 --- /dev/null +++ b/doc/source/diagrams/deploy_config_no_lvm.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":374,"height":225,"nodeIndex":16,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":null,"imageCache":{},"viewportType":"default","fitBB":{"min":{"x":19.999999999999986,"y":19.5},"max":{"x":373.2422578584874,"y":224.42847245662153}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":27.74225785848742,"y":20.928472456621535,"rotation":0.0,"id":13,"width":98.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

mount

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":145.24225785848742,"y":178.0,"rotation":0.0,"id":11,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":12,"width":96.0,"height":14.0,"uid":null,"order":7,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

partition

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"UKAIlALvl7T6"}],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":-197.95070589417784,"y":218.09999084472656,"rotation":0.0,"id":10,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":9,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":11,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[393.19296375266526,-40.09999084472656],[393.19296375266526,-178.09999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":74.19773599532245,"y":45.0284633013481,"rotation":0.0,"id":9,"width":239.3790135510661,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":11,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-49.69773599532246,-5.599990844726747],[291.0538818215025,-6.0999908447265625]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":27.74225785848742,"y":180.42847245662153,"rotation":0.0,"id":8,"width":98.0,"height":17.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":13,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

disk

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":92.25374666383769,"y":165.0284633013481,"rotation":0.0,"id":7,"width":285.98522594281894,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":15,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-66.90574293490343,-5.5999908447265625],[270.81346488844804,-5.5999908447265625]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":371.56321865542304,"y":103.0284633013481,"rotation":0.0,"id":6,"width":285.98522594281894,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-346.21521492648867,117.40000915527344],[-8.4960071031372,117.40000915527344]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":145.24225785848742,"y":20.0,"rotation":0.0,"id":5,"width":100.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":267.2422578584874,"y":178.42847245662153,"rotation":0.0,"id":3,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":21,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":4,"width":96.0,"height":14.0,"uid":null,"order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

partition

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"UKAIlALvl7T6"}],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":-75.95070589417784,"y":218.5284633013481,"rotation":0.0,"id":2,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":26,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":3,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[393.19296375266526,-40.09999084472656],[393.19296375266526,-179.0284633013481]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"},{"x":267.2422578584874,"y":20.0,"rotation":0.0,"id":1,"width":100.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":28,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/var

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"UKAIlALvl7T6"}],"layers":[{"guid":"UKAIlALvl7T6","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":29}],"shapeStyles":{},"lineStyles":{},"textStyles":{}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.images"],"lastSerialized":1480956585733,"analyticsProduct":"Confluence"},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/doc/source/diagrams/deploy_config_no_lvm.png b/doc/source/diagrams/deploy_config_no_lvm.png new file mode 100644 index 0000000..351f260 Binary files /dev/null and b/doc/source/diagrams/deploy_config_no_lvm.png differ diff --git a/doc/source/diagrams/deploy_config_no_lvm.svg b/doc/source/diagrams/deploy_config_no_lvm.svg new file mode 100644 index 0000000..a21647a --- /dev/null +++ b/doc/source/diagrams/deploy_config_no_lvm.svg @@ -0,0 +1 @@ +mountpartitiondisk/partition/var \ No newline at end of file diff --git a/doc/source/diagrams/deploy_config_partial_lvm.gliffy b/doc/source/diagrams/deploy_config_partial_lvm.gliffy new file mode 100644 index 0000000..1c54d94 --- /dev/null +++ b/doc/source/diagrams/deploy_config_partial_lvm.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":509,"height":268,"nodeIndex":27,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":null,"imageCache":{},"viewportType":"default","fitBB":{"min":{"x":20.000000000000014,"y":20.5},"max":{"x":508.26881216955917,"y":260.5}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":123.46177592222443,"y":60.5,"rotation":0.0,"id":25,"width":260.0,"height":200.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#999999","fillColor":"#ffffff","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":25.46177592222442,"y":20.5,"rotation":0.0,"id":24,"width":98.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

mount

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":140.26881216955917,"y":120.5,"rotation":0.0,"id":22,"width":220.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":6,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":4.399999999999998,"y":0.0,"rotation":0.0,"id":23,"width":211.19999999999996,"height":14.0,"uid":null,"order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

volume_group

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"JWVt6bqTSTPW"}],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":140.46177592222443,"y":178.5,"rotation":0.0,"id":20,"width":220.0,"height":19.999999999999996,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":11,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":4.399999999999998,"y":0.0,"rotation":0.0,"id":21,"width":211.20000000000007,"height":14.0,"uid":null,"order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

pv

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"JWVt6bqTSTPW"}],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":402.26881216955917,"y":178.5,"rotation":0.0,"id":18,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":19,"width":96.0,"height":14.0,"uid":null,"order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

partition

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"JWVt6bqTSTPW"}],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":59.07584841689389,"y":218.59999084472656,"rotation":0.0,"id":17,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":21,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":18,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[393.19296375266526,-40.09999084472656],[393.19296375266526,-178.09999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":111.79515366134905,"y":46.09999084472656,"rotation":0.0,"id":16,"width":420.47444119404656,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":23,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-87.29515366134903,-5.599990844726733],[391.2061106837502,-5.599990844726733]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":25.46177592222442,"y":181.92847245662153,"rotation":0.0,"id":15,"width":98.0,"height":17.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":25,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

disk

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":119.21293585372595,"y":166.09999084472656,"rotation":0.0,"id":14,"width":401.8973950982236,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-94.02319198134178,-5.5999908447265625],[380.5763942433631,-5.5999908447265625]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":511.7288389029376,"y":104.09999084472656,"rotation":0.0,"id":13,"width":401.8973950982236,"height":2.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":29,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-486.53909503055326,117.40000915527344],[-11.93950880584845,117.40000915527344]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":118.46177592222443,"y":230.5,"rotation":0.0,"id":12,"width":262.0,"height":30.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":31,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

LVM

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":400.26881216955917,"y":20.5,"rotation":0.0,"id":11,"width":100.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":140.26881216955917,"y":80.5,"rotation":0.0,"id":9,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":10,"width":96.0,"height":14.0,"uid":null,"order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

home

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"JWVt6bqTSTPW"}],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":18.268812169559155,"y":200.09999084472656,"rotation":0.0,"id":8,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":40,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":9,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[172.0,-119.59999084472656],[172.0,-159.59999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":140.26881216955917,"y":20.0,"rotation":0.0,"id":7,"width":100.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/home

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":25.46177592222442,"y":120.5,"rotation":0.0,"id":6,"width":98.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":44,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

vg

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":23.866448950074968,"y":80.5,"rotation":0.0,"id":5,"width":98.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

lv

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":260.46177592222443,"y":80.5,"rotation":0.0,"id":3,"width":100.0,"height":20.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.process","order":48,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":4,"width":96.0,"height":14.0,"uid":null,"order":51,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

var

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"JWVt6bqTSTPW"}],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":28.268812169559155,"y":210.09999084472656,"rotation":0.0,"id":2,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.uml.uml_v2.sequence.message","order":53,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":3,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[282.19296375266526,-129.59999084472656],[282.19296375266526,-169.59999084472656]],"lockSegments":{},"ortho":false}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"},{"x":260.46177592222443,"y":20.0,"rotation":0.0,"id":1,"width":100.0,"height":15.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":55,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"

/var

","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"hidden":false,"layerId":"JWVt6bqTSTPW"}],"layers":[{"guid":"JWVt6bqTSTPW","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":56}],"shapeStyles":{},"lineStyles":{},"textStyles":{}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.images"],"lastSerialized":1480956549664,"analyticsProduct":"Confluence"},"embeddedResources":{"index":0,"resources":[]}} \ No newline at end of file diff --git a/doc/source/diagrams/deploy_config_partial_lvm.png b/doc/source/diagrams/deploy_config_partial_lvm.png new file mode 100644 index 0000000..2639f47 Binary files /dev/null and b/doc/source/diagrams/deploy_config_partial_lvm.png differ diff --git a/doc/source/diagrams/deploy_config_partial_lvm.svg b/doc/source/diagrams/deploy_config_partial_lvm.svg new file mode 100644 index 0000000..4d15563 --- /dev/null +++ b/doc/source/diagrams/deploy_config_partial_lvm.svg @@ -0,0 +1 @@ +mountvolume_grouppvpartitiondiskLVM/home/homevglvvar/var \ No newline at end of file