summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorJoshua Powers <josh.powers@canonical.com>2019-09-14 04:45:08 +0000
committerServer Team CI Bot <josh.powers+server-team-bot@canonical.com>2019-09-14 04:45:08 +0000
commitd86207afee256c7dbdc2bcab69b3f8479aafbfbc (patch)
tree6ac55d8efd4a2e5a6ef252c80b3fdc5643e86df9 /doc
parente7f16e215ef4fd6a31ddd2f1b585bbb6508bff06 (diff)
downloadvyos-cloud-init-d86207afee256c7dbdc2bcab69b3f8479aafbfbc.tar.gz
vyos-cloud-init-d86207afee256c7dbdc2bcab69b3f8479aafbfbc.zip
docs: cleanup output & order of datasource page
Diffstat (limited to 'doc')
-rw-r--r--doc/rtd/topics/datasources.rst186
1 files changed, 92 insertions, 94 deletions
diff --git a/doc/rtd/topics/datasources.rst b/doc/rtd/topics/datasources.rst
index 2148cd5e..8e58be97 100644
--- a/doc/rtd/topics/datasources.rst
+++ b/doc/rtd/topics/datasources.rst
@@ -1,89 +1,57 @@
.. _datasources:
-***********
Datasources
***********
-What is a datasource?
-=====================
-
Datasources are sources of configuration data for cloud-init that typically
-come from the user (aka userdata) or come from the stack that created the
-configuration drive (aka metadata). Typical userdata would include files,
+come from the user (e.g. userdata) or come from the cloud that created the
+configuration drive (e.g. metadata). Typical userdata would include files,
yaml, and shell scripts while typical metadata would include server name,
-instance id, display name and other cloud specific details. Since there are
-multiple ways to provide this data (each cloud solution seems to prefer its
-own way) internally a datasource abstract class was created to allow for a
-single way to access the different cloud systems methods to provide this data
-through the typical usage of subclasses.
-
-Any metadata processed by cloud-init's datasources is persisted as
-``/run/cloud-init/instance-data.json``. Cloud-init provides tooling
-to quickly introspect some of that data. See :ref:`instance_metadata` for
-more information.
-
-
-Datasource API
---------------
-The current interface that a datasource object must provide is the following:
-
-.. sourcecode:: python
+instance id, display name and other cloud specific details.
- # returns a mime multipart message that contains
- # all the various fully-expanded components that
- # were found from processing the raw userdata string
- # - when filtering only the mime messages targeting
- # this instance id will be returned (or messages with
- # no instance id)
- def get_userdata(self, apply_filter=False)
-
- # returns the raw userdata string (or none)
- def get_userdata_raw(self)
+Since there are multiple ways to provide this data (each cloud solution seems
+to prefer its own way) internally a datasource abstract class was created to
+allow for a single way to access the different cloud systems methods to provide
+this data through the typical usage of subclasses.
- # returns a integer (or none) which can be used to identify
- # this instance in a group of instances which are typically
- # created from a single command, thus allowing programmatic
- # filtering on this launch index (or other selective actions)
- @property
- def launch_index(self)
-
- # the data sources' config_obj is a cloud-config formatted
- # object that came to it from ways other than cloud-config
- # because cloud-config content would be handled elsewhere
- def get_config_obj(self)
-
- #returns a list of public ssh keys
- def get_public_ssh_keys(self)
-
- # translates a device 'short' name into the actual physical device
- # fully qualified name (or none if said physical device is not attached
- # or does not exist)
- def device_name_to_device(self, name)
+Any metadata processed by cloud-init's datasources is persisted as
+``/run/cloud-init/instance-data.json``. Cloud-init provides tooling to quickly
+introspect some of that data. See :ref:`instance_metadata` for more
+information.
- # gets the locale string this instance should be applying
- # which typically used to adjust the instances locale settings files
- def get_locale(self)
+Known Sources
+=============
- @property
- def availability_zone(self)
+The following is a list of documents for each supported datasource:
- # gets the instance id that was assigned to this instance by the
- # cloud provider or when said instance id does not exist in the backing
- # metadata this will return 'iid-datasource'
- def get_instance_id(self)
+.. toctree::
+ :titlesonly:
- # gets the fully qualified domain name that this host should be using
- # when configuring network or hostname releated settings, typically
- # assigned either by the cloud provider or the user creating the vm
- def get_hostname(self, fqdn=False)
+ datasources/aliyun.rst
+ datasources/altcloud.rst
+ datasources/ec2.rst
+ datasources/azure.rst
+ datasources/cloudsigma.rst
+ datasources/cloudstack.rst
+ datasources/configdrive.rst
+ datasources/digitalocean.rst
+ datasources/exoscale.rst
+ datasources/fallback.rst
+ datasources/gce.rst
+ datasources/maas.rst
+ datasources/nocloud.rst
+ datasources/opennebula.rst
+ datasources/openstack.rst
+ datasources/oracle.rst
+ datasources/ovf.rst
+ datasources/smartos.rst
- def get_package_mirror_info(self)
+Creation
+========
-Adding a new Datasource
------------------------
The datasource objects have a few touch points with cloud-init. If you
-are interested in adding a new datasource for your cloud platform you'll
+are interested in adding a new datasource for your cloud platform you will
need to take care of the following items:
* **Identify a mechanism for positive identification of the platform**:
@@ -139,31 +107,61 @@ need to take care of the following items:
file in ``doc/datasources/<cloudplatform>.rst``
-Datasource Documentation
-========================
-The following is a list of the implemented datasources.
-Follow for more information.
+API
+===
-.. toctree::
- :maxdepth: 2
+The current interface that a datasource object must provide is the following:
- datasources/aliyun.rst
- datasources/altcloud.rst
- datasources/azure.rst
- datasources/cloudsigma.rst
- datasources/cloudstack.rst
- datasources/configdrive.rst
- datasources/digitalocean.rst
- datasources/ec2.rst
- datasources/exoscale.rst
- datasources/maas.rst
- datasources/nocloud.rst
- datasources/opennebula.rst
- datasources/openstack.rst
- datasources/oracle.rst
- datasources/ovf.rst
- datasources/smartos.rst
- datasources/fallback.rst
- datasources/gce.rst
+.. sourcecode:: python
+
+ # returns a mime multipart message that contains
+ # all the various fully-expanded components that
+ # were found from processing the raw user data string
+ # - when filtering only the mime messages targeting
+ # this instance id will be returned (or messages with
+ # no instance id)
+ def get_userdata(self, apply_filter=False)
+
+ # returns the raw userdata string (or none)
+ def get_userdata_raw(self)
+
+ # returns a integer (or none) which can be used to identify
+ # this instance in a group of instances which are typically
+ # created from a single command, thus allowing programmatic
+ # filtering on this launch index (or other selective actions)
+ @property
+ def launch_index(self)
+
+ # the data sources' config_obj is a cloud-config formatted
+ # object that came to it from ways other than cloud-config
+ # because cloud-config content would be handled elsewhere
+ def get_config_obj(self)
+
+ #returns a list of public ssh keys
+ def get_public_ssh_keys(self)
+
+ # translates a device 'short' name into the actual physical device
+ # fully qualified name (or none if said physical device is not attached
+ # or does not exist)
+ def device_name_to_device(self, name)
+
+ # gets the locale string this instance should be applying
+ # which typically used to adjust the instances locale settings files
+ def get_locale(self)
+
+ @property
+ def availability_zone(self)
+
+ # gets the instance id that was assigned to this instance by the
+ # cloud provider or when said instance id does not exist in the backing
+ # metadata this will return 'iid-datasource'
+ def get_instance_id(self)
+
+ # gets the fully qualified domain name that this host should be using
+ # when configuring network or hostname related settings, typically
+ # assigned either by the cloud provider or the user creating the vm
+ def get_hostname(self, fqdn=False)
+
+ def get_package_mirror_info(self)
-.. vi: textwidth=78
+.. vi: textwidth=79