Add cloudbase-init Sphinx documentation
Document plugins, metadata services, configuration file, how the project is supposed to work and some user related usecases. Change-Id: I184a9409a9e9173c346f0ab149cb7d78ed87e0b3
This commit is contained in:
parent
00f995f5cd
commit
a48c33e280
344
README.rst
344
README.rst
@ -1,334 +1,32 @@
|
|||||||
Portable OpenStack Cloud Initialization Service
|
Portable Multi-Cloud Initialization Service
|
||||||
===============================================
|
===========================================
|
||||||
|
|
||||||
The main goal of this project is to provide guest cloud initialization for
|
* Author: Cloudbase Solutions Srl
|
||||||
Windows and other operating systems.
|
* Contact: info@cloudbasesolutions.com
|
||||||
|
* Home page: http://www.cloudbase.it/cloud-init-windows/
|
||||||
|
|
||||||
The architecture of the project is highly flexible and allows extensions for
|
* Documentation: http://cloudbase-init.readthedocs.org/en/latest/
|
||||||
additional clouds and plugins.
|
* Source: https://github.com/stackforge/cloudbase-init
|
||||||
|
* License: Apache 2.0
|
||||||
|
|
||||||
There's no limitation in the type of supported Hypervisor. This service can be
|
|
||||||
used on instances running on Hyper-V, KVM, Xen, ESXi, etc
|
|
||||||
|
|
||||||
Documentation, support and contacts: http://www.cloudbase.it
|
Downloads
|
||||||
|
---------
|
||||||
|
|
||||||
Binaries
|
Stable
|
||||||
--------
|
~~~~~~
|
||||||
|
|
||||||
The latest stable x64 and x86 releases are available at the following urls:
|
* (64bit) https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi
|
||||||
|
* (32bit) https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x86.msi
|
||||||
|
|
||||||
https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi
|
Beta
|
||||||
https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x86.msi
|
~~~~
|
||||||
|
|
||||||
Additionally, the following x64 and x86 builds are automatically generated by a
|
* (64bit) https://www.cloudbase.it/downloads/CloudbaseInitSetup_x64.msi
|
||||||
Jenkins job at every commit:
|
* (32bit) https://www.cloudbase.it/downloads/CloudbaseInitSetup_x86.msi
|
||||||
|
|
||||||
https://www.cloudbase.it/downloads/CloudbaseInitSetup_x64.msi
|
|
||||||
https://www.cloudbase.it/downloads/CloudbaseInitSetup_x86.msi
|
|
||||||
|
|
||||||
Metadata services
|
Got a question?
|
||||||
-----------------
|
---------------
|
||||||
|
|
||||||
A metadata service has the role of pulling the metadata configuration
|
Visit http://ask.cloudbase.it/questions/
|
||||||
information.
|
|
||||||
|
|
||||||
Supported clouds and metadata services:
|
|
||||||
|
|
||||||
* OpenStack (HTTP)
|
|
||||||
* OpenStack (ConfigDrive)
|
|
||||||
* Amazon EC2
|
|
||||||
* CloudStack
|
|
||||||
* OpenNebula
|
|
||||||
* Ubuntu MAAS
|
|
||||||
|
|
||||||
Plugins
|
|
||||||
-------
|
|
||||||
|
|
||||||
Plugins execute actions based on the metadata obtained by the service.
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Sets the instance's hostname.
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.createuser.CreateUserPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Creates a local cloud user (if it does not already exist) and adds it to a set
|
|
||||||
of provided local groups.
|
|
||||||
|
|
||||||
The following configuration parameters control the behaviour of this
|
|
||||||
plugin.
|
|
||||||
|
|
||||||
+------------+--------------------------------+------------------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+============+================================+==================+
|
|
||||||
| *username* | Name of the cloud user | *Admin* |
|
|
||||||
+------------+--------------------------------+------------------+
|
|
||||||
| *groups* | Comma separated list of groups | *Administrators* |
|
|
||||||
+------------+--------------------------------+------------------+
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Sets the cloud user's password. If a password has been provided in the
|
|
||||||
metadata during boot (user_data) it will be used, otherwise a random password
|
|
||||||
will be generated, encrypted with the user's SSH public key and posted to the
|
|
||||||
metadata provider (currently supported only by the OpenStack HTTP metadata
|
|
||||||
provider).
|
|
||||||
|
|
||||||
+-------------------------+-------------------------------------------------------------------------------------+---------------------------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+=========================+=====================================================================================+===========================+
|
|
||||||
| *inject_user_password* | Can be set to false to avoid the injection of the password provided in the metadata | *True* |
|
|
||||||
+-------------------------+-------------------------------------------------------------------------------------+---------------------------+
|
|
||||||
| | Can control what happens with the password at the next logon. If this option | |
|
|
||||||
| | is set to `always`, the user will be forced to change the password at the next | |
|
|
||||||
| *first_logon_behaviour* | logon. If it is set to `clear_text_injected_only`, the user will be forced to | *clear_text_injected_only*|
|
|
||||||
| | change the password only if the password is a clear text password, coming from the | |
|
|
||||||
| | metadata. The last option is `no`, when the user is never forced. | |
|
|
||||||
+-------------------------+-------------------------------------------------------------------------------------+---------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Configures static networking.
|
|
||||||
|
|
||||||
+-------------------+------------------------------+---------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+===================+==============================+=========+
|
|
||||||
| *network_adapter* | Network adapter to configure | *None* |
|
|
||||||
+-------------------+------------------------------+---------+
|
|
||||||
|
|
||||||
If *network_adapter* is not specified, the first available ethernet
|
|
||||||
adapter will be chosen if it cannot be matched with the configuration provided
|
|
||||||
in the metadata.
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Creates an "authorized_keys" file in the user's home directory containing the
|
|
||||||
SSH keys provided in the metadata.
|
|
||||||
It is needed by the
|
|
||||||
*cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin* plugin.
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Extends automatically a disk partition to it's maximum size. This is useful
|
|
||||||
when booting images with different flavors.
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Configures a WinRM HTTPS listener to allow remote management via WinRS or
|
|
||||||
PowerShell.
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.winrmcertificateauth.ConfigWinRMCertificateAuthPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Enables password-less authentication for remote management via WinRS or
|
|
||||||
PowerShell.
|
|
||||||
See: http://www.cloudbase.it/windows-without-passwords-in-openstack/
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Executes any script (e.g. Powershell, CMD, etc) located in the following path.
|
|
||||||
|
|
||||||
+----------------------+--------------------+---------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+======================+====================+=========+
|
|
||||||
| *local_scripts_path* | Local scripts path | *None* |
|
|
||||||
+----------------------+--------------------+---------+
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Activates the Windows instance if the following option is True.
|
|
||||||
|
|
||||||
+--------------------+------------------+---------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+====================+==================+=========+
|
|
||||||
| *activate_windows* | Activate Windows | *False* |
|
|
||||||
+--------------------+------------------+---------+
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Applies NTP client info based on the DHCP server options, if available.
|
|
||||||
|
|
||||||
+-----------------------+-------------------+---------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+=======================+===================+=========+
|
|
||||||
| *ntp_use_dhcp_config* | Set NTP from DHCP | *False* |
|
|
||||||
+-----------------------+-------------------+---------+
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.common.mtu.MTUPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Sets the network interfaces MTU based on the value provided by the DHCP server
|
|
||||||
options, if available.
|
|
||||||
|
|
||||||
This is particularly useful for cases in which a lower MTU value is required
|
|
||||||
for networking (e.g. OpenStack GRE Neutron Open vSwitch configurations).
|
|
||||||
|
|
||||||
+-----------------------+-------------------+---------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+=======================+===================+=========+
|
|
||||||
| *mtu_use_dhcp_config* | Set MTU from DHCP | *True* |
|
|
||||||
+-----------------------+-------------------+---------+
|
|
||||||
|
|
||||||
|
|
||||||
cloudbaseinit.plugins.common.userdata.UserDataPlugin
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Executes custom scripts provided with the user_data metadata as plain text or
|
|
||||||
compressed with Gzip.
|
|
||||||
|
|
||||||
Supported formats:
|
|
||||||
|
|
||||||
Windows batch
|
|
||||||
"""""""""""""
|
|
||||||
|
|
||||||
The file is executed in a cmd.exe shell (can be changed with the COMSPEC
|
|
||||||
environment variable). The *user_data* first line must be:
|
|
||||||
|
|
||||||
rem cmd
|
|
||||||
|
|
||||||
PowerShell
|
|
||||||
""""""""""
|
|
||||||
|
|
||||||
The user_data first line must be:
|
|
||||||
|
|
||||||
#ps1_sysnative
|
|
||||||
|
|
||||||
or for a x86 PowerShell execution:
|
|
||||||
|
|
||||||
#ps1_x86
|
|
||||||
|
|
||||||
Bash
|
|
||||||
""""
|
|
||||||
|
|
||||||
A bash shell needs to be installed in the system and available in the PATH in
|
|
||||||
order to use this feature. The user_data first line must start with:
|
|
||||||
|
|
||||||
#!
|
|
||||||
|
|
||||||
e.g.:
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
cloud-config
|
|
||||||
""""""""""""
|
|
||||||
|
|
||||||
Cloud-config YAML configuration as supported by cloud-init, excluding Linux
|
|
||||||
specific content. The user_data first line must be:
|
|
||||||
|
|
||||||
#cloud-config
|
|
||||||
|
|
||||||
The following cloud-config directives are supported:
|
|
||||||
|
|
||||||
* write_files
|
|
||||||
|
|
||||||
Defines a set of files which will be created on
|
|
||||||
the local filesystem. It can be a list of items or only one item,
|
|
||||||
with the following attributes:
|
|
||||||
|
|
||||||
- path
|
|
||||||
|
|
||||||
Absolute path on disk where the content should be written
|
|
||||||
|
|
||||||
- content
|
|
||||||
|
|
||||||
The content which will be written in the given file
|
|
||||||
|
|
||||||
- permissions
|
|
||||||
|
|
||||||
Integer representing file permissions
|
|
||||||
|
|
||||||
- encoding
|
|
||||||
|
|
||||||
The encoding of the data in content.
|
|
||||||
Supported encodings are: ``b64``, ``base64`` for base64-encoded
|
|
||||||
content, ``gz``, ``gzip`` for gzip encoded content, ``gz+b64``,
|
|
||||||
``gz+base64``, ``gzip+b64``, ``gzip+base64`` for base64 encoded
|
|
||||||
gzip content.
|
|
||||||
|
|
||||||
Examples::
|
|
||||||
|
|
||||||
# One item
|
|
||||||
write_files:
|
|
||||||
encoding: b64
|
|
||||||
content: NDI=
|
|
||||||
path: C:\test
|
|
||||||
permissions: '0o466'
|
|
||||||
|
|
||||||
# Multiple items
|
|
||||||
write_files:
|
|
||||||
- encoding: b64
|
|
||||||
content: NDI=
|
|
||||||
path: C:\b64
|
|
||||||
permissions: '0644'
|
|
||||||
- encoding: base64
|
|
||||||
content: NDI=
|
|
||||||
path: C:\b64_1
|
|
||||||
permissions: '0644'
|
|
||||||
- encoding: gzip
|
|
||||||
content: !!binary |
|
|
||||||
H4sIAGUfoFQC/zMxAgCIsCQyAgAAAA==
|
|
||||||
path: C:\gzip
|
|
||||||
permissions: '0644'
|
|
||||||
|
|
||||||
* set_timezone
|
|
||||||
|
|
||||||
Change the underlying timezone.
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
set_timezone: Asia/Tbilisi
|
|
||||||
|
|
||||||
|
|
||||||
Multi-part userdata content
|
|
||||||
"""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
MIME multi-part userdata is supported. The content will ne handled based on the
|
|
||||||
content type.
|
|
||||||
|
|
||||||
|
|
||||||
text/x-shellscript
|
|
||||||
""""""""""""""""""
|
|
||||||
|
|
||||||
Any script to be executed: PowerShell, CMD, Bash or Python.
|
|
||||||
|
|
||||||
|
|
||||||
text/part-handler
|
|
||||||
"""""""""""""""""
|
|
||||||
|
|
||||||
A script that can manage other content type parts. This is used in particular
|
|
||||||
by Heat / CFN templates, although Linux specific.
|
|
||||||
|
|
||||||
text/x-cfninitdata
|
|
||||||
""""""""""""""""""
|
|
||||||
|
|
||||||
Heat / CFN content. Written to the path provided by:
|
|
||||||
|
|
||||||
+-------------------+-------------------------+-------------+
|
|
||||||
| Option | Description | Default |
|
|
||||||
+===================+=========================+=============+
|
|
||||||
| *heat_config_dir* | Heat configuration path | *C:\\cfn* |
|
|
||||||
+-------------------+-------------------------+-------------+
|
|
||||||
|
|
||||||
Example Heat Windows templates: https://github.com/openstack/heat-templates/tree/master/hot/Windows
|
|
||||||
|
@ -1040,43 +1040,7 @@ class WindowsUtils(base.BaseOSUtils):
|
|||||||
C:\Windows\(System32|SysWOW64|Sysnative).
|
C:\Windows\(System32|SysWOW64|Sysnative).
|
||||||
Note that "Sysnative" is just an alias (doesn't really exist on disk).
|
Note that "Sysnative" is just an alias (doesn't really exist on disk).
|
||||||
|
|
||||||
On 32bit OSes, the return value will be the System32 directory,
|
More info about this can be found in documentation.
|
||||||
which contains 32bit programs.
|
|
||||||
On 64bit OSes, the return value may be different, depending on the
|
|
||||||
Python bits and the `sysnative` parameter. If the Python interpreter is
|
|
||||||
32bit, the return value will be System32 (containing 32bit
|
|
||||||
programs) if `sysnative` is set to False and Sysnative otherwise. But
|
|
||||||
if the Python interpreter is 64bit and `sysnative` is False, the return
|
|
||||||
value will be SysWOW64 and System32 for a True value of `sysnative`.
|
|
||||||
|
|
||||||
Why this behavior and what is the purpose of `sysnative` parameter?
|
|
||||||
|
|
||||||
On a 32bit OS the things are clear, there is one System32 directory
|
|
||||||
containing 32bit applications and that's all. On a 64bit OS, there's a
|
|
||||||
System32 directory containing 64bit applications and a compatibility
|
|
||||||
one named SysWOW64 (WindowsOnWindows) containing the 32bit version of
|
|
||||||
them. Depending on the Python interpreter's bits, the `sysnative` flag
|
|
||||||
will try to bring the appropriate version of the system directory, more
|
|
||||||
exactly, the physical System32 or SysWOW64 found on disk. On a WOW case
|
|
||||||
(32bit interpreter on 64bit OS), a return value of System32 will point
|
|
||||||
to the physical SysWOW64 directory and a return value of Sysnative,
|
|
||||||
which is consolidated by the existence of this alias, will point to the
|
|
||||||
real physical System32 directory found on disk. If the OS is still
|
|
||||||
64bit and there is no WOW case (that means the interpreter is 64bit),
|
|
||||||
the system native concept is out of discussion and each return value
|
|
||||||
will point to the physical location it intends to.
|
|
||||||
|
|
||||||
On a 32bit OS the `sysnative` parameter has no meaning, but on a 64bit
|
|
||||||
one, based on its value, it will provide a real/alias path pointing to
|
|
||||||
system native applications if set to True (64bit programs) and to
|
|
||||||
system compatibility applications if set to False (32bit programs). Its
|
|
||||||
purpose is to provide the correct system paths by taking into account
|
|
||||||
the Python interpreter bits too, because on a 32bit interpreter
|
|
||||||
version, System32 is not the same with the System32 on a 64bit
|
|
||||||
interpreter. Also, using a 64bit interpreter, the Sysnative alias will
|
|
||||||
not work, but the `sysnative` parameter will take care to return
|
|
||||||
SysWOW64 if you explicitly want 32bit applications, by setting it to
|
|
||||||
False.
|
|
||||||
"""
|
"""
|
||||||
if sysnative and self.check_sysnative_dir_exists():
|
if sysnative and self.check_sysnative_dir_exists():
|
||||||
return self.get_sysnative_dir()
|
return self.get_sysnative_dir()
|
||||||
|
192
doc/Makefile
Normal file
192
doc/Makefile
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
# Makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
PAPER =
|
||||||
|
BUILDDIR = build
|
||||||
|
|
||||||
|
# User-friendly check for sphinx-build
|
||||||
|
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||||
|
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||||
|
# the i18n builder cannot share the environment and doctrees with the others
|
||||||
|
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
|
@echo " html to make standalone HTML files"
|
||||||
|
@echo " dirhtml to make HTML files named index.html in directories"
|
||||||
|
@echo " singlehtml to make a single large HTML file"
|
||||||
|
@echo " pickle to make pickle files"
|
||||||
|
@echo " json to make JSON files"
|
||||||
|
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||||
|
@echo " qthelp to make HTML files and a qthelp project"
|
||||||
|
@echo " applehelp to make an Apple Help Book"
|
||||||
|
@echo " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@echo " texinfo to make Texinfo files"
|
||||||
|
@echo " info to make Texinfo files and run them through makeinfo"
|
||||||
|
@echo " gettext to make PO message catalogs"
|
||||||
|
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||||
|
@echo " xml to make Docutils-native XML files"
|
||||||
|
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||||
|
@echo " linkcheck to check all external links for integrity"
|
||||||
|
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||||
|
@echo " coverage to run coverage check of the documentation (if enabled)"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILDDIR)/*
|
||||||
|
|
||||||
|
html:
|
||||||
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
pickle:
|
||||||
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the pickle files."
|
||||||
|
|
||||||
|
json:
|
||||||
|
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the JSON files."
|
||||||
|
|
||||||
|
htmlhelp:
|
||||||
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
|
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||||
|
|
||||||
|
qthelp:
|
||||||
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/cloudbase-init.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/cloudbase-init.qhc"
|
||||||
|
|
||||||
|
applehelp:
|
||||||
|
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
||||||
|
@echo "N.B. You won't be able to view it unless you put it in" \
|
||||||
|
"~/Library/Documentation/Help or install it in your application" \
|
||||||
|
"bundle."
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/cloudbase-init"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/cloudbase-init"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
latexpdfja:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
texinfo:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||||
|
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||||
|
"(use \`make info' here to do that automatically)."
|
||||||
|
|
||||||
|
info:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo "Running Texinfo files through makeinfo..."
|
||||||
|
make -C $(BUILDDIR)/texinfo info
|
||||||
|
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||||
|
|
||||||
|
gettext:
|
||||||
|
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||||
|
|
||||||
|
changes:
|
||||||
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||||
|
@echo
|
||||||
|
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||||
|
|
||||||
|
linkcheck:
|
||||||
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||||
|
@echo
|
||||||
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
|
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||||
|
|
||||||
|
doctest:
|
||||||
|
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||||
|
@echo "Testing of doctests in the sources finished, look at the " \
|
||||||
|
"results in $(BUILDDIR)/doctest/output.txt."
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
|
||||||
|
@echo "Testing of coverage in the sources finished, look at the " \
|
||||||
|
"results in $(BUILDDIR)/coverage/python.txt."
|
||||||
|
|
||||||
|
xml:
|
||||||
|
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||||
|
|
||||||
|
pseudoxml:
|
||||||
|
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
263
doc/make.bat
Normal file
263
doc/make.bat
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set BUILDDIR=build
|
||||||
|
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source
|
||||||
|
set I18NSPHINXOPTS=%SPHINXOPTS% source
|
||||||
|
if NOT "%PAPER%" == "" (
|
||||||
|
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||||
|
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
if "%1" == "help" (
|
||||||
|
:help
|
||||||
|
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||||
|
echo. html to make standalone HTML files
|
||||||
|
echo. dirhtml to make HTML files named index.html in directories
|
||||||
|
echo. singlehtml to make a single large HTML file
|
||||||
|
echo. pickle to make pickle files
|
||||||
|
echo. json to make JSON files
|
||||||
|
echo. htmlhelp to make HTML files and a HTML help project
|
||||||
|
echo. qthelp to make HTML files and a qthelp project
|
||||||
|
echo. devhelp to make HTML files and a Devhelp project
|
||||||
|
echo. epub to make an epub
|
||||||
|
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||||
|
echo. text to make text files
|
||||||
|
echo. man to make manual pages
|
||||||
|
echo. texinfo to make Texinfo files
|
||||||
|
echo. gettext to make PO message catalogs
|
||||||
|
echo. changes to make an overview over all changed/added/deprecated items
|
||||||
|
echo. xml to make Docutils-native XML files
|
||||||
|
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||||
|
echo. linkcheck to check all external links for integrity
|
||||||
|
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||||
|
echo. coverage to run coverage check of the documentation if enabled
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "clean" (
|
||||||
|
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||||
|
del /q /s %BUILDDIR%\*
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
REM Check if sphinx-build is available and fallback to Python version if any
|
||||||
|
%SPHINXBUILD% 2> nul
|
||||||
|
if errorlevel 9009 goto sphinx_python
|
||||||
|
goto sphinx_ok
|
||||||
|
|
||||||
|
:sphinx_python
|
||||||
|
|
||||||
|
set SPHINXBUILD=python -m sphinx.__init__
|
||||||
|
%SPHINXBUILD% 2> nul
|
||||||
|
if errorlevel 9009 (
|
||||||
|
echo.
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.http://sphinx-doc.org/
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:sphinx_ok
|
||||||
|
|
||||||
|
|
||||||
|
if "%1" == "html" (
|
||||||
|
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "dirhtml" (
|
||||||
|
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "singlehtml" (
|
||||||
|
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "pickle" (
|
||||||
|
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can process the pickle files.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "json" (
|
||||||
|
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can process the JSON files.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "htmlhelp" (
|
||||||
|
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||||
|
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "qthelp" (
|
||||||
|
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||||
|
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||||
|
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\cloudbase-init.qhcp
|
||||||
|
echo.To view the help file:
|
||||||
|
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\cloudbase-init.ghc
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "devhelp" (
|
||||||
|
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "epub" (
|
||||||
|
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "latex" (
|
||||||
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "latexpdf" (
|
||||||
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
|
cd %BUILDDIR%/latex
|
||||||
|
make all-pdf
|
||||||
|
cd %~dp0
|
||||||
|
echo.
|
||||||
|
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "latexpdfja" (
|
||||||
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
|
cd %BUILDDIR%/latex
|
||||||
|
make all-pdf-ja
|
||||||
|
cd %~dp0
|
||||||
|
echo.
|
||||||
|
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "text" (
|
||||||
|
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "man" (
|
||||||
|
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "texinfo" (
|
||||||
|
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "gettext" (
|
||||||
|
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "changes" (
|
||||||
|
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.The overview file is in %BUILDDIR%/changes.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "linkcheck" (
|
||||||
|
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Link check complete; look for any errors in the above output ^
|
||||||
|
or in %BUILDDIR%/linkcheck/output.txt.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "doctest" (
|
||||||
|
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Testing of doctests in the sources finished, look at the ^
|
||||||
|
results in %BUILDDIR%/doctest/output.txt.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "coverage" (
|
||||||
|
%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Testing of coverage in the sources finished, look at the ^
|
||||||
|
results in %BUILDDIR%/coverage/python.txt.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "xml" (
|
||||||
|
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "pseudoxml" (
|
||||||
|
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
echo.
|
||||||
|
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
|
||||||
|
:end
|
@ -1 +1,287 @@
|
|||||||
# Temporary placeholder
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# cloudbase-init documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Wed Jun 03 01:25:56 2015.
|
||||||
|
#
|
||||||
|
# This file is execfile()d with the current directory set to its
|
||||||
|
# containing dir.
|
||||||
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import shlex
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
#needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
'sphinx.ext.autodoc',
|
||||||
|
'sphinx.ext.viewcode',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix(es) of source filenames.
|
||||||
|
# You can specify multiple suffix as a list of string:
|
||||||
|
# source_suffix = ['.rst', '.md']
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The encoding of source files.
|
||||||
|
#source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = u'cloudbase-init'
|
||||||
|
copyright = u'2015, Cloudbase Solutions Srl'
|
||||||
|
author = u'Cloudbase Solutions Srl'
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
version = '1.0'
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
release = '1.0'
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#
|
||||||
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
|
# Usually you set "language" from the command line for these cases.
|
||||||
|
language = None
|
||||||
|
|
||||||
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
# non-false value, then it is used:
|
||||||
|
#today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
#today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
exclude_patterns = []
|
||||||
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
|
# documents.
|
||||||
|
#default_role = None
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
#add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
#add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
#show_authors = False
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
# A list of ignored prefixes for module index sorting.
|
||||||
|
#modindex_common_prefix = []
|
||||||
|
|
||||||
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||||
|
#keep_warnings = False
|
||||||
|
|
||||||
|
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||||
|
todo_include_todos = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
html_theme = 'classic'
|
||||||
|
|
||||||
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
# further. For a list of options available for each theme, see the
|
||||||
|
# documentation.
|
||||||
|
#html_theme_options = {}
|
||||||
|
|
||||||
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
|
#html_theme_path = []
|
||||||
|
|
||||||
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
|
# "<project> v<release> documentation".
|
||||||
|
#html_title = None
|
||||||
|
|
||||||
|
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||||
|
#html_short_title = None
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top
|
||||||
|
# of the sidebar.
|
||||||
|
#html_logo = None
|
||||||
|
|
||||||
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
|
# pixels large.
|
||||||
|
#html_favicon = None
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['_static']
|
||||||
|
|
||||||
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
# directly to the root of the documentation.
|
||||||
|
#html_extra_path = []
|
||||||
|
|
||||||
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
|
# using the given strftime format.
|
||||||
|
#html_last_updated_fmt = '%b %d, %Y'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
#html_use_smartypants = True
|
||||||
|
|
||||||
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
#html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
#html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#html_domain_indices = True
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
#html_use_index = True
|
||||||
|
|
||||||
|
# If true, the index is split into individual pages for each letter.
|
||||||
|
#html_split_index = False
|
||||||
|
|
||||||
|
# If true, links to the reST sources are added to the pages.
|
||||||
|
#html_show_sourcelink = True
|
||||||
|
|
||||||
|
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_sphinx = True
|
||||||
|
|
||||||
|
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_copyright = True
|
||||||
|
|
||||||
|
# If true, an OpenSearch description file will be output, and all pages will
|
||||||
|
# contain a <link> tag referring to it. The value of this option must be the
|
||||||
|
# base URL from which the finished HTML is served.
|
||||||
|
#html_use_opensearch = ''
|
||||||
|
|
||||||
|
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||||
|
#html_file_suffix = None
|
||||||
|
|
||||||
|
# Language to be used for generating the HTML full-text search index.
|
||||||
|
# Sphinx supports the following languages:
|
||||||
|
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
|
||||||
|
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
|
||||||
|
#html_search_language = 'en'
|
||||||
|
|
||||||
|
# A dictionary with options for the search language support, empty by default.
|
||||||
|
# Now only 'ja' uses this config value
|
||||||
|
#html_search_options = {'type': 'default'}
|
||||||
|
|
||||||
|
# The name of a javascript file (relative to the configuration directory) that
|
||||||
|
# implements a search results scorer. If empty, the default will be used.
|
||||||
|
#html_search_scorer = 'scorer.js'
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'cloudbase-initdoc'
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
#'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#'preamble': '',
|
||||||
|
|
||||||
|
# Latex figure (float) alignment
|
||||||
|
#'figure_align': 'htbp',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
(master_doc, 'cloudbase-init.tex', u'cloudbase-init Documentation',
|
||||||
|
u'Cloudbase Solutions Srl', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
# the title page.
|
||||||
|
#latex_logo = None
|
||||||
|
|
||||||
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
|
# not chapters.
|
||||||
|
#latex_use_parts = False
|
||||||
|
|
||||||
|
# If true, show page references after internal links.
|
||||||
|
#latex_show_pagerefs = False
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#latex_show_urls = False
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#latex_domain_indices = True
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
(master_doc, 'cloudbase-init', u'cloudbase-init Documentation',
|
||||||
|
[author], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#man_show_urls = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
(master_doc, 'cloudbase-init', u'cloudbase-init Documentation',
|
||||||
|
author, 'cloudbase-init', 'One line description of project.',
|
||||||
|
'Miscellaneous'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#texinfo_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#texinfo_domain_indices = True
|
||||||
|
|
||||||
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
|
#texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
|
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||||
|
#texinfo_no_detailmenu = False
|
||||||
|
26
doc/source/index.rst
Normal file
26
doc/source/index.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
.. cloudbase-init documentation master file, created by
|
||||||
|
sphinx-quickstart on Wed Jun 03 01:25:56 2015.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
Welcome to cloudbase-init's documentation!
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Contents:
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
intro
|
||||||
|
tutorial
|
||||||
|
services
|
||||||
|
plugins
|
||||||
|
userdata
|
||||||
|
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
43
doc/source/intro.rst
Normal file
43
doc/source/intro.rst
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
.. _intro:
|
||||||
|
|
||||||
|
Intro
|
||||||
|
=====
|
||||||
|
|
||||||
|
The open source `project <https://github.com/stackforge/cloudbase-init>`_
|
||||||
|
**cloudbase-init** is a service conceived and
|
||||||
|
maintained by Cloudbase Solutions Srl, currently working on NT systems.
|
||||||
|
It was designed to initialize and configure guest operating systems under
|
||||||
|
`OpenStack <https://www.openstack.org/>`_,
|
||||||
|
`OpenNebula <http://opennebula.org/>`_,
|
||||||
|
`CloudStack <https://cloudstack.apache.org/>`_,
|
||||||
|
`MaaS <https://maas.ubuntu.com/>`_ and many others.
|
||||||
|
Under `Cloudbase <http://www.cloudbase.it/cloud-init-windows/>`_ page,
|
||||||
|
beta and stable installers can be found and the service itself is very easy to
|
||||||
|
configure through configuration files. It can also customize instances based
|
||||||
|
on user input like local scripts and data.
|
||||||
|
|
||||||
|
More details on how you can use this can be found under :ref:`tutorial`.
|
||||||
|
|
||||||
|
|
||||||
|
Portable cloud initialization service
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
The main goal of this project is to provide guest cloud initialization for
|
||||||
|
*Windows* and other operating systems.
|
||||||
|
The architecture of the project is highly flexible and allows extensions for
|
||||||
|
additional clouds and plugins.
|
||||||
|
|
||||||
|
There's no limitation in the type of supported hypervisors. This service can be
|
||||||
|
used on instances running on Hyper-V, KVM, Xen, ESXi etc.
|
||||||
|
|
||||||
|
|
||||||
|
.. _download:
|
||||||
|
|
||||||
|
Binaries
|
||||||
|
--------
|
||||||
|
|
||||||
|
The following x64 and x86 builds are automatically generated by a Jenkins
|
||||||
|
job at every commit:
|
||||||
|
|
||||||
|
* https://www.cloudbase.it/downloads/CloudbaseInitSetup_x64.msi
|
||||||
|
* https://www.cloudbase.it/downloads/CloudbaseInitSetup_x86.msi
|
239
doc/source/plugins.rst
Normal file
239
doc/source/plugins.rst
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
.. _plugins:
|
||||||
|
|
||||||
|
Plugins
|
||||||
|
=======
|
||||||
|
|
||||||
|
Plugins execute actions based on the metadata obtained by the loaded service.
|
||||||
|
They are intended to actually configure your instance using data provided by
|
||||||
|
the cloud and even by the user.
|
||||||
|
|
||||||
|
Current list of supported plugins:
|
||||||
|
|
||||||
|
|
||||||
|
Setting host name
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin
|
||||||
|
|
||||||
|
Sets the instance's hostname. It may be truncated to 15 characters for Netbios
|
||||||
|
compatibility reasons using the option below.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* netbios_host_name_compatibility (bool: True)
|
||||||
|
|
||||||
|
.. warning:: This may require a system restart.
|
||||||
|
|
||||||
|
|
||||||
|
Creating user
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.createuser.CreateUserPlugin
|
||||||
|
|
||||||
|
Creates (or updates if existing) a new user and adds it to a
|
||||||
|
set of provided local groups. By default, it creates the user "Admin" under
|
||||||
|
"Administrators" group, but this can be changed under configuration file.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* username (string: "Admin")
|
||||||
|
* groups (list of strings: ["Administrators"])
|
||||||
|
|
||||||
|
|
||||||
|
Setting password
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin
|
||||||
|
|
||||||
|
Sets the cloud user's password. If a password has been provided in the metadata
|
||||||
|
during boot it will be used, otherwise a random password will be generated,
|
||||||
|
encrypted with the user's SSH public key and posted to the metadata provider
|
||||||
|
(currently supported only by the OpenStack HTTP metadata provider).
|
||||||
|
An option called `inject_user_password` is set *True* by default to make
|
||||||
|
available the use of metadata password which is found under the "admin_pass"
|
||||||
|
field or through an URL request. If the option is set to *False* or if the
|
||||||
|
password isn't found in metadata, then an attempt of using an already set
|
||||||
|
password is done (usually a random value by the `createuser` plugin).
|
||||||
|
With `first_logon_behaviour` you can control what happens with the password at
|
||||||
|
the next logon. If this option is set to "always", the user will be forced to
|
||||||
|
change the password at the next logon. If it is set to "clear_text_injected_only",
|
||||||
|
the user will be forced to change the password only if the password is a
|
||||||
|
clear text password, coming from the metadata. The last option is "no",
|
||||||
|
when the user is never forced.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* inject_user_password (bool: True)
|
||||||
|
* first_logon_behaviour (string: "clear_text_injected_only")
|
||||||
|
|
||||||
|
.. note:: This plugin can run multiple times (for posting the password if the
|
||||||
|
metadata service supports this).
|
||||||
|
|
||||||
|
|
||||||
|
Static networking
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin
|
||||||
|
|
||||||
|
Statically configures each network adapter for which corresponding details
|
||||||
|
are found into metadata. The details/addresses association is done using
|
||||||
|
MAC matching and if this fails, then name or interface index matching.
|
||||||
|
The basic setting is based on IPv4 addresses, but it supports IPv6 addresses
|
||||||
|
too if they are enabled and exposed to the metadata.
|
||||||
|
The purpose of this plugin is to configure network adapters, for which the
|
||||||
|
DHCP server is disabled, to have internet access and static IPs.
|
||||||
|
|
||||||
|
.. warning:: This may require a system restart.
|
||||||
|
|
||||||
|
|
||||||
|
Saving public keys
|
||||||
|
------------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin
|
||||||
|
|
||||||
|
Creates an **authorized_keys** file in the user's home directory containing
|
||||||
|
the SSH keys provided in the metadata. It is needed by the plugin responsible
|
||||||
|
for encrypting and setting passwords.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* username (string: "Admin")
|
||||||
|
|
||||||
|
|
||||||
|
Volume expanding
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin
|
||||||
|
|
||||||
|
Extends automatically a disk partition to its maximum size. This is useful
|
||||||
|
when booting images with different flavors. By default, all the volumes are
|
||||||
|
extended, but you can select specific ones by populating with their indexes the
|
||||||
|
`volumes_to_extend` option.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* volumes_to_extend (list of integers: None)
|
||||||
|
|
||||||
|
.. note:: This plugin will run at every boot.
|
||||||
|
|
||||||
|
|
||||||
|
WinRM listener
|
||||||
|
--------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin
|
||||||
|
|
||||||
|
Configures a WinRM HTTPS listener to allow remote management via
|
||||||
|
`WinRM <https://msdn.microsoft.com/en-us/library/aa384426(v=vs.85).aspx>`_
|
||||||
|
or PowerShell.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* winrm_enable_basic_auth (bool: True)
|
||||||
|
|
||||||
|
.. note:: This plugin will run until a full and proper configuration
|
||||||
|
will take place.
|
||||||
|
|
||||||
|
|
||||||
|
.. _certificate:
|
||||||
|
|
||||||
|
WinRM certificate
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.winrmcertificateauth.ConfigWinRMCertificateAuthPlugin
|
||||||
|
|
||||||
|
Enables password-less authentication for remote management via WinRS or
|
||||||
|
PowerShell. Usually uses x509 embedded with UPN certificates.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* username (string: "Admin")
|
||||||
|
|
||||||
|
.. note:: http://www.cloudbase.it/windows-without-passwords-in-openstack/
|
||||||
|
|
||||||
|
|
||||||
|
.. _scripts:
|
||||||
|
|
||||||
|
Scripts execution
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
|
||||||
|
|
||||||
|
Executes any script (powershell, batch, python etc.) located in the following
|
||||||
|
path indicated by `local_scripts_path` option.
|
||||||
|
More details about the supported scripts and content can be found
|
||||||
|
in :ref:`tutorial` on :ref:`file execution <execution>` subject.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* local_scripts_path (string: None)
|
||||||
|
|
||||||
|
.. warning:: This may require a system restart.
|
||||||
|
|
||||||
|
.. note:: This plugin may run multiple times (depending on the script(s)
|
||||||
|
return code).
|
||||||
|
|
||||||
|
|
||||||
|
Licensing
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin
|
||||||
|
|
||||||
|
Activates the Windows instance if the `activate_windows` option is *True*.
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* activate_windows (bool: False)
|
||||||
|
|
||||||
|
|
||||||
|
Clock synchronization
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin
|
||||||
|
|
||||||
|
Applies NTP client info based on the DHCP server options, if available. This
|
||||||
|
behavior is enabled only when the `ntp_use_dhcp_config` option is set
|
||||||
|
to *True* (which by default is *False*).
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* ntp_use_dhcp_config (bool: False)
|
||||||
|
|
||||||
|
.. note:: This plugin will run until the NTP client is configured.
|
||||||
|
|
||||||
|
|
||||||
|
MTU customization
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.common.mtu.MTUPlugin
|
||||||
|
|
||||||
|
Sets the network interfaces MTU based on the value provided by the DHCP server
|
||||||
|
options, if available and enabled (by default is *True*).
|
||||||
|
This is particularly useful for cases in which a lower MTU value is required
|
||||||
|
for networking (e.g. OpenStack GRE Neutron Open vSwitch configurations).
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* mtu_use_dhcp_config (bool: True)
|
||||||
|
|
||||||
|
.. note:: This plugin will run at every boot.
|
||||||
|
|
||||||
|
|
||||||
|
User data
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.plugins.common.userdata.UserDataPlugin
|
||||||
|
|
||||||
|
Executes custom scripts provided by user data metadata as plain text or
|
||||||
|
compressed with Gzip.
|
||||||
|
More details, examples and possible formats here: :ref:`userdata`.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Configuring selected plugins
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
By default, all plugins are executed, but a custom list of them can be
|
||||||
|
specified through the `plugins` option in the configuration file.
|
||||||
|
|
||||||
|
For more details on doing this, see :ref:`configuration <config>`
|
||||||
|
file in :ref:`tutorial`.
|
193
doc/source/services.rst
Normal file
193
doc/source/services.rst
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
.. _services:
|
||||||
|
|
||||||
|
Services
|
||||||
|
========
|
||||||
|
|
||||||
|
A **metadata service** has the role of pulling the guest provided data
|
||||||
|
(configuration information) and exposing it to the :ref:`plugins` for a
|
||||||
|
general and basic initialization of the instance.
|
||||||
|
These sub-services can change their behavior according to custom
|
||||||
|
configuration options, if they are specified, which are documented below.
|
||||||
|
|
||||||
|
Supported metadata services (cloud specific):
|
||||||
|
|
||||||
|
|
||||||
|
.. _httpservice:
|
||||||
|
|
||||||
|
OpenStack (web API)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.metadata.services.httpservice.HttpService
|
||||||
|
|
||||||
|
A complete service which also supports password related capabilities and
|
||||||
|
can be usually accessed with http://169.254.169.254/ magic address, which can
|
||||||
|
also be changed using `metadata_base_url` option under the config file. A
|
||||||
|
default value of *True* for `add_metadata_private_ip_route` option is used
|
||||||
|
to add a route for the IP address to the gateway. This is needed for supplying
|
||||||
|
a bridge between different VLANs in order to get access to the web server.
|
||||||
|
|
||||||
|
Capabilities:
|
||||||
|
|
||||||
|
* instance ID
|
||||||
|
* host name
|
||||||
|
* public keys
|
||||||
|
* authentication certificates (metadata + user data)
|
||||||
|
* static network configuration addresses
|
||||||
|
* admin password
|
||||||
|
* user data
|
||||||
|
* user content (additional files)
|
||||||
|
* ability to post passwords
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* metadata_base_url (string: "http://169.254.169.254/")
|
||||||
|
* add_metadata_private_ip_route (bool: True)
|
||||||
|
|
||||||
|
|
||||||
|
.. _configdrive:
|
||||||
|
|
||||||
|
OpenStack (configuration drive)
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.metadata.services.configdrive.ConfigDriveService
|
||||||
|
|
||||||
|
This is similar to the web API, but it "serves" its files locally without
|
||||||
|
requiring network access. The data is generally retrieved from a
|
||||||
|
`cdrom <https://en.wikipedia.org/wiki/ISO_9660>`_,
|
||||||
|
`vfat <https://en.wikipedia.org/wiki/File_Allocation_Table#VFAT>`_ or
|
||||||
|
*raw* disks/partitions by enabling selective lookup across different devices.
|
||||||
|
Use the `config_drive_types` option to specify which types of config drive
|
||||||
|
content the service will search for and also on which devices using the
|
||||||
|
`config_drive_locations` option.
|
||||||
|
|
||||||
|
.. warning:: *deprecated options*
|
||||||
|
|
||||||
|
Using the option:
|
||||||
|
|
||||||
|
a. `config_drive_cdrom`
|
||||||
|
b. `config_drive_raw_hhd`
|
||||||
|
c. `config_drive_vfat`
|
||||||
|
|
||||||
|
It will search for metadata:
|
||||||
|
|
||||||
|
a. in mounted optical units
|
||||||
|
b. directly in the physical disk bytes
|
||||||
|
c. by exploring the physical disk as a vfat drive; which requires
|
||||||
|
*mtools* (specified by the `mtools_path` option)
|
||||||
|
|
||||||
|
The interesting part with this service is the fact that is quite fast in
|
||||||
|
comparison with the HTTP twin.
|
||||||
|
|
||||||
|
Capabilities:
|
||||||
|
|
||||||
|
* instance ID
|
||||||
|
* host name
|
||||||
|
* public keys (search in the entire metadata)
|
||||||
|
* authentication certificates (metadata + user data)
|
||||||
|
* static network configuration addresses
|
||||||
|
* admin password
|
||||||
|
* user data
|
||||||
|
* user content (additional files)
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* config_drive_types (list: ["vfat", "iso"])
|
||||||
|
* config_drive_locations (list: ["cdrom", "hdd", "partition"])
|
||||||
|
* mtools_path (string: None)
|
||||||
|
|
||||||
|
|
||||||
|
Amazon EC2
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.metadata.services.ec2service.EC2Service
|
||||||
|
|
||||||
|
This is similar to the OpenStack HTTP service but is using a different
|
||||||
|
format for URLs and is having general capabilities.
|
||||||
|
|
||||||
|
Capabilities:
|
||||||
|
|
||||||
|
* instance ID
|
||||||
|
* host name
|
||||||
|
* public keys
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* ec2_metadata_base_url (string: "http://169.254.169.254/")
|
||||||
|
* ec2_add_metadata_private_ip_route (bool: True)
|
||||||
|
|
||||||
|
.. note:: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
|
||||||
|
|
||||||
|
|
||||||
|
CloudStack
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.metadata.services.cloudstack.CloudStack
|
||||||
|
|
||||||
|
Another web-based service which usually uses "10.1.1.1" or DHCP addresses for
|
||||||
|
retrieving content.
|
||||||
|
|
||||||
|
Capabilities:
|
||||||
|
|
||||||
|
* instance ID
|
||||||
|
* host name
|
||||||
|
* public keys
|
||||||
|
* admin password (retrieval/deletion/polling)
|
||||||
|
* user data
|
||||||
|
|
||||||
|
Config options:
|
||||||
|
|
||||||
|
* cloudstack_metadata_ip (string: "10.1.1.1")
|
||||||
|
|
||||||
|
.. note:: By design, this service can update the password anytime, so it will
|
||||||
|
cause the `setuserpassword` plugin to run at every boot and
|
||||||
|
by security concerns, the password is deleted right after retrieval
|
||||||
|
and no updating will occur until a new password is available on the
|
||||||
|
server.
|
||||||
|
|
||||||
|
|
||||||
|
OpenNebula
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.metadata.services.opennebulaservice.OpenNebulaService
|
||||||
|
|
||||||
|
The *OpenNebula* provider is related to configuration drive and searches for
|
||||||
|
a specific context file which holds all the available info. The provided
|
||||||
|
details are exposed as bash variables gathered in a shell script.
|
||||||
|
|
||||||
|
Capabilities:
|
||||||
|
|
||||||
|
* instance ID (not present; usually a constant is returned)
|
||||||
|
* host name
|
||||||
|
* public keys
|
||||||
|
* static network configuration addresses
|
||||||
|
* user data
|
||||||
|
|
||||||
|
|
||||||
|
Ubuntu MaaS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
.. class:: cloudbaseinit.metadata.services.maasservice.MaaSHttpService
|
||||||
|
|
||||||
|
This one works with instances on bare metal and uses web requests for
|
||||||
|
retrieving the available exposed metadata. It uses
|
||||||
|
`OAuth <http://oauth.net/>`_ to secure the requests.
|
||||||
|
|
||||||
|
Capabilities:
|
||||||
|
|
||||||
|
* instance ID
|
||||||
|
* host name
|
||||||
|
* public keys
|
||||||
|
* authentication certificates (x509)
|
||||||
|
* user data
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Configuring available services
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Some of these classes can be specified manually in the configuration file
|
||||||
|
under `metadata_services` option. Based on this option, the service loader
|
||||||
|
will search across these providers and try to load the most suitable one.
|
||||||
|
|
||||||
|
For more details on doing this, see :ref:`configuration <config>`
|
||||||
|
file in :ref:`tutorial`.
|
115
doc/source/tutorial.rst
Normal file
115
doc/source/tutorial.rst
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
.. _tutorial:
|
||||||
|
|
||||||
|
Tutorial
|
||||||
|
========
|
||||||
|
|
||||||
|
First, download your desired type of installer from :ref:`here <download>`,
|
||||||
|
then install it and fill in configuration options which suits you best.
|
||||||
|
Based on the current selected *cloudbase-init* installer architecture, it'll
|
||||||
|
be available under *C:\\Program Files* or *C:\\Program Files (x86)* as
|
||||||
|
**Cloudbase Solutions\\Cloudbase-Init** directory. There, are located some
|
||||||
|
folders of interest like:
|
||||||
|
|
||||||
|
* bin - Executable files and other binaries.
|
||||||
|
* conf - Configuration files holding miscellaneous options.
|
||||||
|
* log - Here are the cloudbase-init logs.
|
||||||
|
* LocalScripts - User supplied :ref:`scripts <execution>`.
|
||||||
|
* Python - Bundle of executable and library files to support Python
|
||||||
|
scripts and core execution.
|
||||||
|
|
||||||
|
After install, cloudbase-init acts like a 2-step service which will read
|
||||||
|
metadata using :ref:`services` and will pass that to the executing
|
||||||
|
:ref:`plugins`, this way configuring all the supported things.
|
||||||
|
Depending on the platform, some plugins may request reboots.
|
||||||
|
|
||||||
|
|
||||||
|
Sysprepping
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The System Preparation (Sysprep) tool prepares an installation of Windows for
|
||||||
|
duplication, auditing, and customer delivery. Duplication, also called imaging,
|
||||||
|
enables you to capture a customized Windows image that you can reuse throughout
|
||||||
|
an organization.
|
||||||
|
The Sysprep phase uses the "Unattend.xml" which implies the service to run
|
||||||
|
using the "cloudbase-init-unattend.conf" configuration file.
|
||||||
|
|
||||||
|
|
||||||
|
.. _config:
|
||||||
|
|
||||||
|
Configuration file
|
||||||
|
------------------
|
||||||
|
|
||||||
|
In the chosen installation path, under the *conf* directory, are present
|
||||||
|
two config files named "cloudbase-init.conf" and
|
||||||
|
"cloudbase-init-unattend.conf".
|
||||||
|
These can hold various config options for picking up the desired available
|
||||||
|
services and plugins ready for execution and also customizing user experience.
|
||||||
|
|
||||||
|
*Explained example of configuration file:*
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
[DEFAULT]
|
||||||
|
# What user to create and in which group(s) to be put.
|
||||||
|
username=Admin
|
||||||
|
groups=Administrators
|
||||||
|
inject_user_password=true # Use password from the metadata (not random).
|
||||||
|
# Which devices to inspect for a possible configuration drive (metadata).
|
||||||
|
config_drive_raw_hhd=true
|
||||||
|
config_drive_cdrom=true
|
||||||
|
# Path to tar implementation from Ubuntu.
|
||||||
|
bsdtar_path=C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
|
||||||
|
# Logging debugging level.
|
||||||
|
verbose=true
|
||||||
|
debug=true
|
||||||
|
# Where to store logs.
|
||||||
|
logdir=C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\log\
|
||||||
|
logfile=cloudbase-init-unattend.log
|
||||||
|
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN
|
||||||
|
logging_serial_port_settings=
|
||||||
|
# Enable MTU and NTP plugins.
|
||||||
|
mtu_use_dhcp_config=true
|
||||||
|
ntp_use_dhcp_config=true
|
||||||
|
# Where are located the user supplied scripts for execution.
|
||||||
|
local_scripts_path=C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
|
||||||
|
# Services that will be tested for loading until one of them succeeds.
|
||||||
|
metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService,
|
||||||
|
cloudbaseinit.metadata.services.httpservice.HttpService,
|
||||||
|
cloudbaseinit.metadata.services.ec2service.EC2Service,
|
||||||
|
cloudbaseinit.metadata.services.maasservice.MaaSHttpService
|
||||||
|
# What plugins to execute.
|
||||||
|
plugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,
|
||||||
|
cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin
|
||||||
|
# Miscellaneous.
|
||||||
|
allow_reboot=false # allow the service to reboot the system
|
||||||
|
stop_service_on_exit=false
|
||||||
|
|
||||||
|
The "cloudbase-init-unattend.conf" configuration file is similar to the
|
||||||
|
default one and is used by the Sysprepping phase. It was designed for the
|
||||||
|
scenario where the minimum user intervention is required and it only runs
|
||||||
|
the MTU and host name plugins, leaving the image ready for further
|
||||||
|
initialization cases.
|
||||||
|
|
||||||
|
More of these explained options are available under the :ref:`services`,
|
||||||
|
:ref:`plugins` and :ref:`userdata` documentation.
|
||||||
|
|
||||||
|
|
||||||
|
.. _execution:
|
||||||
|
|
||||||
|
File execution
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Cloudbase-init has the ability to execute user provided scripts, usually
|
||||||
|
found in the default path
|
||||||
|
*C:\\Program Files (x86)\\Cloudbase Solutions\\Cloudbase-Init\\LocalScripts*,
|
||||||
|
through a specific :ref:`plugin <scripts>` for doing this stuff. Depending on
|
||||||
|
the platform used, the files should be valid MZPEs, PowerShell, Python,
|
||||||
|
Batch or Bash scripts, containing the actual code. The user data plugin is
|
||||||
|
also capable of executing various script types and return code value handling.
|
||||||
|
|
||||||
|
Based on their return codes, you can instruct the system to reboot or even
|
||||||
|
re-execute the plugin on the next boot:
|
||||||
|
|
||||||
|
* 1001 - reboot and don't run the plugin again on next boot
|
||||||
|
* 1002 - don't reboot now and run the plugin again on next boot
|
||||||
|
* 1003 - reboot and run the plugin again on next boot
|
221
doc/source/userdata.rst
Normal file
221
doc/source/userdata.rst
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
.. _userdata:
|
||||||
|
|
||||||
|
Userdata
|
||||||
|
========
|
||||||
|
|
||||||
|
The *userdata* is the user custom content exposed to the guest instance
|
||||||
|
by the currently deployed and running cloud infrastructure. Its purpose is
|
||||||
|
to provide additional data for the instance to customize it as much as you
|
||||||
|
need, if the cloud initialization service does support this feature.
|
||||||
|
|
||||||
|
Fortunately, *cloudbase-init* is able to interpret and use this kind of user
|
||||||
|
specific data in multiple ways. In most of the cases, the thing that indicates
|
||||||
|
of what type is the processed data is usually the **first line**.
|
||||||
|
|
||||||
|
Currently supported contents:
|
||||||
|
|
||||||
|
|
||||||
|
PEM certificate
|
||||||
|
---------------
|
||||||
|
|
||||||
|
**-----BEGIN CERTIFICATE-----**
|
||||||
|
|
||||||
|
This one should start with a PEM specific beginning header, which will
|
||||||
|
be eventually parsed by the :ref:`configuration drive <configdrive>`
|
||||||
|
and :ref:`web API <httpservice>` OpenStack services and used by the
|
||||||
|
:ref:`certificate` plugin for storing and using it.
|
||||||
|
|
||||||
|
|
||||||
|
Batch
|
||||||
|
-----
|
||||||
|
|
||||||
|
**rem cmd**
|
||||||
|
|
||||||
|
The file is executed in a *cmd.exe* shell (can be changed with the `COMSPEC`
|
||||||
|
environment variable).
|
||||||
|
|
||||||
|
|
||||||
|
PowerShell
|
||||||
|
----------
|
||||||
|
|
||||||
|
**#ps1_sysnative** (system native)
|
||||||
|
|
||||||
|
**#ps1_x86** (Windows On Windows 32bit)
|
||||||
|
|
||||||
|
Execute PowerShell scripts using the desired executable. For finding out more
|
||||||
|
about the system nativeness thing, click :ref:`here <sysnative>`.
|
||||||
|
|
||||||
|
|
||||||
|
Bash
|
||||||
|
----
|
||||||
|
|
||||||
|
**#!/bin/bash**
|
||||||
|
|
||||||
|
A bash shell needs to be installed in the system and available in the `PATH`
|
||||||
|
in order to use this feature.
|
||||||
|
|
||||||
|
|
||||||
|
Python
|
||||||
|
------
|
||||||
|
|
||||||
|
**#!/usr/bin/env python**
|
||||||
|
|
||||||
|
Python is available by default with the build itself, but also it must be in
|
||||||
|
the system `PATH`.
|
||||||
|
|
||||||
|
|
||||||
|
EC2 format
|
||||||
|
----------
|
||||||
|
|
||||||
|
There is no "first line" here, but the content should follow a XML pattern
|
||||||
|
with valid Batch/PowerShell script contents under **script** or **powershell**
|
||||||
|
enclosing tags like in this example:
|
||||||
|
|
||||||
|
.. code-block:: xml
|
||||||
|
|
||||||
|
<script>
|
||||||
|
set root=%SystemDrive%
|
||||||
|
echo ec2dir>%root%\ec2file.txt
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<powershell>
|
||||||
|
$root = $env:SystemDrive
|
||||||
|
$dname = Get-Content "$root\ec2file.txt"
|
||||||
|
New-Item -path "$root\$dname" -type directory
|
||||||
|
</powershell>
|
||||||
|
|
||||||
|
.. note:: http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html
|
||||||
|
|
||||||
|
|
||||||
|
Cloud config
|
||||||
|
------------
|
||||||
|
|
||||||
|
**#cloud-config**
|
||||||
|
|
||||||
|
Cloud-config YAML configuration as supported by *cloud-init*, excluding Linux
|
||||||
|
specific content.
|
||||||
|
The following cloud-config directives are supported:
|
||||||
|
|
||||||
|
* write_files - Defines a set of files which will be created on the local
|
||||||
|
filesystem. It can be a list of items or only one item,
|
||||||
|
with the following attributes:
|
||||||
|
|
||||||
|
1. path - Absolute path on disk where the content should be written.
|
||||||
|
2. content - The content which will be written in the given file.
|
||||||
|
3. permissions - Integer representing file permissions.
|
||||||
|
4. encoding - The encoding of the data in content. Supported encodings
|
||||||
|
are: b64, base64 for base64-encoded content, gz,
|
||||||
|
gzip for gzip encoded content, gz+b64, gz+base64,
|
||||||
|
gzip+b64, gzip+base64 for base64 encoded gzip content.
|
||||||
|
|
||||||
|
*Examples:*
|
||||||
|
|
||||||
|
.. code-block:: xml
|
||||||
|
|
||||||
|
# One item
|
||||||
|
write_files:
|
||||||
|
encoding: b64
|
||||||
|
content: NDI=
|
||||||
|
path: C:\test
|
||||||
|
permissions: '0o466'
|
||||||
|
|
||||||
|
.. code-block:: xml
|
||||||
|
|
||||||
|
# Multiple items
|
||||||
|
write_files:
|
||||||
|
- encoding: b64
|
||||||
|
content: NDI=
|
||||||
|
path: C:\b64
|
||||||
|
permissions: '0644'
|
||||||
|
- encoding: base64
|
||||||
|
content: NDI=
|
||||||
|
path: C:\b64_1
|
||||||
|
permissions: '0644'
|
||||||
|
- encoding: gzip
|
||||||
|
content: !!binary |
|
||||||
|
H4sIAGUfoFQC/zMxAgCIsCQyAgAAAA==
|
||||||
|
path: C:\gzip
|
||||||
|
permissions: '0644'
|
||||||
|
|
||||||
|
* set_timezone - Change the underlying timezone.
|
||||||
|
|
||||||
|
*Example:*
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
set_timezone: Asia/Tbilisi
|
||||||
|
|
||||||
|
* set_hostname - Override the already default set host name value. (metadata)
|
||||||
|
|
||||||
|
*Example:*
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
set_hostname: newhostname
|
||||||
|
|
||||||
|
|
||||||
|
Multi-part content
|
||||||
|
------------------
|
||||||
|
|
||||||
|
MIME multi-part user data is supported. The content will ne handled based on
|
||||||
|
the content type.
|
||||||
|
|
||||||
|
* text/x-shellscript - Any script to be executed: PowerShell, Batch, Bash
|
||||||
|
or Python.
|
||||||
|
|
||||||
|
* text/part-handler - A script that can manage other content type parts.
|
||||||
|
This is used in particular by Heat / CFN templates,
|
||||||
|
although Linux specific.
|
||||||
|
|
||||||
|
* text/x-cfninitdata - Heat / CFN content. Written to the path provided by
|
||||||
|
`heat_config_dir` option which defaults to "C:\\cfn".
|
||||||
|
(examples of Heat Windows `templates`_)
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
.. _sysnative:
|
||||||
|
|
||||||
|
Sysnativeness
|
||||||
|
-------------
|
||||||
|
|
||||||
|
*When deciding which path to use for system executable files...*
|
||||||
|
|
||||||
|
On 32bit OSes, the return value will be the *System32* directory,
|
||||||
|
which contains 32bit programs.
|
||||||
|
On 64bit OSes, the return value may be different, depending on the
|
||||||
|
Python bits and the `sysnative` parameter. If the Python interpreter is
|
||||||
|
32bit, the return value will be *System32* (containing 32bit
|
||||||
|
programs) if `sysnative` is set to False and *Sysnative* otherwise. But
|
||||||
|
if the Python interpreter is 64bit and `sysnative` is False, the return
|
||||||
|
value will be *SysWOW64* and *System32* for a True value of `sysnative`.
|
||||||
|
|
||||||
|
Why this behavior and what is the purpose of `sysnative` parameter?
|
||||||
|
|
||||||
|
On a 32bit OS the things are clear, there is one *System32* directory
|
||||||
|
containing 32bit applications and that's all. On a 64bit OS, there's a
|
||||||
|
*System32* directory containing 64bit applications and a compatibility
|
||||||
|
one named *SysWOW64* (WindowsOnWindows) containing the 32bit version of
|
||||||
|
them. Depending on the Python interpreter's bits, the `sysnative` flag
|
||||||
|
will try to bring the appropriate version of the system directory, more
|
||||||
|
exactly, the physical *System32* or *SysWOW64* found on disk. On a WOW case
|
||||||
|
(32bit interpreter on 64bit OS), a return value of *System32* will point
|
||||||
|
to the physical *SysWOW64* directory and a return value of *Sysnative*,
|
||||||
|
which is consolidated by the existence of this alias, will point to the
|
||||||
|
real physical *System32* directory found on disk. If the OS is still
|
||||||
|
64bit and there is no WOW case (that means the interpreter is 64bit),
|
||||||
|
the system native concept is out of discussion and each return value
|
||||||
|
will point to the physical location it intends to.
|
||||||
|
|
||||||
|
On a 32bit OS the `sysnative` parameter has no meaning, but on a 64bit
|
||||||
|
one, based on its value, it will provide a real/alias path pointing to
|
||||||
|
system native applications if set to True (64bit programs) and to
|
||||||
|
system compatibility applications if set to False (32bit programs). Its
|
||||||
|
purpose is to provide the correct system paths by taking into account
|
||||||
|
the Python interpreter bits too, because on a 32bit interpreter
|
||||||
|
version, *System32* is not the same with the *System32* on a 64bit
|
||||||
|
interpreter. Also, using a 64bit interpreter, the *Sysnative* alias will
|
||||||
|
not work, but the `sysnative` parameter will take care to return
|
||||||
|
*SysWOW64* if you explicitly want 32bit applications, by setting it to False.
|
||||||
|
|
||||||
|
|
||||||
|
.. _templates: https://github.com/openstack/heat-templates/tree/master/hot/Windows
|
@ -2,7 +2,7 @@ hacking<0.11,>=0.10.0
|
|||||||
coverage>=3.6
|
coverage>=3.6
|
||||||
fixtures>=0.3.14
|
fixtures>=0.3.14
|
||||||
mock>=1.0
|
mock>=1.0
|
||||||
sphinx>=1.1.2,<1.1.999
|
sphinx
|
||||||
oslosphinx
|
oslosphinx
|
||||||
testtools>=0.9.32
|
testtools>=0.9.32
|
||||||
testrepository>=0.0.18
|
testrepository>=0.0.18
|
||||||
|
Loading…
x
Reference in New Issue
Block a user