summaryrefslogtreecommitdiff
path: root/doc/rtd/reference/datasources/azure.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rtd/reference/datasources/azure.rst')
-rw-r--r--doc/rtd/reference/datasources/azure.rst133
1 files changed, 133 insertions, 0 deletions
diff --git a/doc/rtd/reference/datasources/azure.rst b/doc/rtd/reference/datasources/azure.rst
new file mode 100644
index 00000000..5f8f3b84
--- /dev/null
+++ b/doc/rtd/reference/datasources/azure.rst
@@ -0,0 +1,133 @@
+.. _datasource_azure:
+
+Azure
+*****
+
+This datasource finds metadata and user data from the Azure cloud platform.
+
+The Azure cloud platform provides initial data to an instance via an attached
+CD formatted in UDF. This CD contains a :file:`ovf-env.xml` file that
+provides some information. Additional information is obtained via interaction
+with the "endpoint".
+
+IMDS
+====
+
+Azure provides the `instance metadata service (IMDS)`_, which is a REST service
+on ``169.254.169.254`` providing additional configuration information to the
+instance. ``Cloud-init`` uses the IMDS for:
+
+- Network configuration for the instance which is applied per boot.
+- A pre-provisioning gate which blocks instance configuration until Azure
+ fabric is ready to provision.
+- Retrieving SSH public keys. ``Cloud-init`` will first try to utilise SSH
+ keys returned from IMDS, and if they are not provided from IMDS then it will
+ fall back to using the OVF file provided from the CD-ROM. There is a large
+ performance benefit to using IMDS for SSH key retrieval, but in order to
+ support environments where IMDS is not available then we must continue to
+ all for keys from OVF[?]
+
+Configuration
+=============
+
+The following configuration can be set for the datasource in system
+configuration (in :file:`/etc/cloud/cloud.cfg` or
+:file:`/etc/cloud/cloud.cfg.d/`).
+
+The settings that may be configured are:
+
+* :command:`apply_network_config`
+
+ Boolean set to True to use network configuration described by Azure's IMDS
+ endpoint instead of fallback network config of DHCP on eth0. Default is
+ True.
+* :command:`data_dir`
+
+ Path used to read metadata files and write crawled data.
+
+* :command:`disk_aliases`
+
+ A dictionary defining which device paths should be interpreted as ephemeral
+ images. See :ref:`cc_disk_setup <mod-disk_setup>` module for more info.
+
+Configuration for the datasource can also be read from a ``dscfg`` entry in
+the ``LinuxProvisioningConfigurationSet``. Content in ``dscfg`` node is
+expected to be base64 encoded YAML content, and it will be merged into the
+``'datasource: Azure'`` entry.
+
+An example configuration with the default values is provided below:
+
+.. code-block:: yaml
+
+ datasource:
+ Azure:
+ apply_network_config: true
+ data_dir: /var/lib/waagent
+ disk_aliases:
+ ephemeral0: /dev/disk/cloud/azure_resource
+
+
+User data
+=========
+
+User data is provided to ``cloud-init`` inside the :file:`ovf-env.xml` file.
+``Cloud-init`` expects that user data will be provided as a base64 encoded
+value inside the text child of an element named ``UserData`` or
+``CustomData``, which is a direct child of the
+``LinuxProvisioningConfigurationSet`` (a sibling to ``UserName``).
+
+If both ``UserData`` and ``CustomData`` are provided, the behaviour is
+undefined on which will be selected. In the example below, user data provided
+is ``'this is my userdata'``.
+
+Example:
+
+.. code-block:: xml
+
+ <wa:ProvisioningSection>
+ <wa:Version>1.0</wa:Version>
+ <LinuxProvisioningConfigurationSet
+ xmlns="http://schemas.microsoft.com/windowsazure"
+ xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
+ <ConfigurationSetType>LinuxProvisioningConfiguration</ConfigurationSetType>
+ <HostName>myHost</HostName>
+ <UserName>myuser</UserName>
+ <UserPassword/>
+ <CustomData>dGhpcyBpcyBteSB1c2VyZGF0YQ===</CustomData>
+ <dscfg>eyJhZ2VudF9jb21tYW5kIjogWyJzdGFydCIsICJ3YWxpbnV4YWdlbnQiXX0=</dscfg>
+ <DisableSshPasswordAuthentication>true</DisableSshPasswordAuthentication>
+ <SSH>
+ <PublicKeys>
+ <PublicKey>
+ <Fingerprint>6BE7A7C3C8A8F4B123CCA5D0C2F1BE4CA7B63ED7</Fingerprint>
+ <Path>this-value-unused</Path>
+ </PublicKey>
+ </PublicKeys>
+ </SSH>
+ </LinuxProvisioningConfigurationSet>
+ </wa:ProvisioningSection>
+
+HostName
+========
+
+When the user launches an instance, they provide a hostname for that instance.
+The hostname is provided to the instance in the :file:`ovf-env.xml` file as
+``HostName``.
+
+Whatever value the instance provides in its DHCP request will resolve in the
+domain returned in the 'search' request.
+
+A generic image will already have a hostname configured. The Ubuntu cloud
+images have ``ubuntu`` as the hostname of the system, and the initial DHCP
+request on eth0 is not guaranteed to occur after the datasource code has been
+run. So, on first boot, that initial value will be sent in the DHCP request
+and *that* value will resolve.
+
+In order to make the ``HostName`` provided in the :file:`ovf-env.xml`
+resolve, a DHCP request must be made with the new value. ``Cloud-init``
+handles this by setting the hostname in the datasource's ``get_data`` method
+via :command:`hostname $HostName`, and then bouncing the interface. This
+behaviour can be configured or disabled in the datasource config. See
+'Configuration' above.
+
+.. _instance metadata service (IMDS): https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service