133 lines
5.8 KiB
ReStructuredText
133 lines
5.8 KiB
ReStructuredText
=======================
|
|
Authoring Site Topology
|
|
=======================
|
|
|
|
Drydock uses a YAML-formatted site topology definition to configure
|
|
downstream drivers to provision baremetal nodes. This topology describes
|
|
the networking configuration of a site as well as the set of node configurations
|
|
that will be deployed. A node configuration consists of network attachment,
|
|
network addressing, local storage, kernel selection and configuration and
|
|
metadata.
|
|
|
|
The best source for a sample of the YAML schema for a topology is the unit
|
|
test input source_ /tests/yaml_samples/fullsite.yaml in tests/yaml_samples/fullsite.yaml.
|
|
|
|
Defining Node Storage
|
|
=====================
|
|
|
|
Storage can be defined in the `storage` stanza of either a HostProfile or BaremetalNode
|
|
document. The storage configuration can describe creation of partitions on physical disks,
|
|
the assignment of physical disks and/or partitions to volume groups, and the creation of
|
|
logical volumes. Drydock will make a best effort to parse out system-level storage such
|
|
as the root filesystem or boot filesystem and take appropriate steps to configure them in
|
|
the active node provisioning driver.
|
|
|
|
Example YAML schema of the `storage` stanza::
|
|
|
|
storage:
|
|
physical_devices:
|
|
sda:
|
|
labels:
|
|
bootdrive: true
|
|
partitions:
|
|
- name: 'root'
|
|
size: '10g'
|
|
bootable: true
|
|
filesystem:
|
|
mountpoint: '/'
|
|
fstype: 'ext4'
|
|
mount_options: 'defaults'
|
|
- name: 'boot'
|
|
size: '1g'
|
|
filesystem:
|
|
mountpoint: '/boot'
|
|
fstype: 'ext4'
|
|
mount_options: 'defaults'
|
|
sdb:
|
|
volume_group: 'log_vg'
|
|
volume_groups:
|
|
log_vg:
|
|
logical_volumes:
|
|
- name: 'log_lv'
|
|
size: '500m'
|
|
filesystem:
|
|
mountpoint: '/var/log'
|
|
fstype: 'xfs'
|
|
mount_options: 'defaults'
|
|
|
|
Schema
|
|
------
|
|
|
|
The `storage` stanza can contain two top level keys: `physical_devices` and
|
|
`volume_groups`. The latter is optional.
|
|
|
|
Physical Devices and Partitions
|
|
-------------------------------
|
|
|
|
A physical device can either be carved up in partitions (including a single partition
|
|
consuming the entire device) or added to a volume group as a physical volume. Each
|
|
key in the `physical_devices` mapping represents a device on a node. The key should either
|
|
be a device alias defined in the HardwareProfile or the name of the device published
|
|
by the OS. The value of each key must be a mapping with the following keys
|
|
|
|
* `labels`: A mapping of key/value strings providing generic labels for the device
|
|
* `partitions`: A sequence of mappings listing the partitions to be created on the device.
|
|
The mapping is described below. Incompatible with the `volume_group` specification.
|
|
* `volume_group`: A volume group name to add the device to as a physical volume. Incompatible
|
|
with the `partitions` specification.
|
|
|
|
Partition
|
|
~~~~~~~~~
|
|
|
|
A partition mapping describes a GPT partition on a physical disk. It can left as a raw
|
|
block device or formatted and mounted as a filesystem
|
|
|
|
* `name`: Metadata describing the partition in the topology
|
|
* `size`: The size of the partition. See the *Size Format* section below
|
|
* `bootable`: Boolean whether this partition should be the bootable device
|
|
* `part_uuid`: A UUID4 formatted UUID to assign to the partition. If not specified one will be generated
|
|
* `filesystem`: A optional mapping describing how the partition should be formatted and mounted
|
|
* `mountpoint`: Where the filesystem should be mounted. If not specified the partition will be left as a raw deice
|
|
* `fstype`: The format of the filesyste. Defaults to ext4
|
|
* `mount_options`: fstab style mount options. Default is 'defaults'
|
|
* `fs_uuid`: A UUID4 formatted UUID to assign to the filesystem. If not specified one will be generated
|
|
* `fs_label`: A filesystem label to assign to the filesystem. Optional.
|
|
|
|
Size Format
|
|
~~~~~~~~~~~
|
|
|
|
The size specification for a partition or logical volume is formed from three parts
|
|
|
|
* The first character can optionally be `>` indicating that the size specified is a minimum and the
|
|
calculated size should be at least the minimum and should take the rest of the available space on
|
|
the physical device or volume group.
|
|
* The second part is the numeric portion and must be an integer
|
|
* The third part is a label
|
|
* `m`\|`M`\|`mb`\|`MB`: Megabytes or 10^6 * the numeric
|
|
* `g`\|`G`\|`gb`\|`GB`: Gigabytes or 10^9 * the numeric
|
|
* `t`\|`T`\|`tb`\|`TB`: Terabytes or 10^12 * the numeric
|
|
* `%`: The percentage of total device or volume group space
|
|
|
|
Volume Groups and Logical Volumes
|
|
---------------------------------
|
|
|
|
Logical volumes can be used to create RAID-0 volumes spanning multiple physical disks or partitions.
|
|
Each key in the `volume_groups` mapping is a name assigned to a volume group. This name must be specified
|
|
as the `volume_group` attribute on one or more physical devices or partitions, or the configuration is invalid.
|
|
Each mapping value is another mapping describing the volume group.
|
|
|
|
* `vg_uuid`: A UUID4 format uuid applied to the volume group. If not specified, one is generated
|
|
* `logical_volumes`: A sequence of mappings listing the logical volumes to be created in the volume group
|
|
|
|
Logical Volume
|
|
~~~~~~~~~~~~~~
|
|
|
|
A logical volume is a RAID-0 volume. Using logical volumes for `/` and `/boot` is supported
|
|
|
|
* `name`: Required field. Used as the logical volume name.
|
|
* `size`: The logical volume size. See *Size Format* above for details.
|
|
* `lv_uuid`: A UUID4 format uuid applied to the logical volume: If not specified, one is generated
|
|
* `filesystem`: A mapping specifying how the logical volume should be formatted and mounted. See the
|
|
*Partition* section above for filesystem details.
|
|
|