forked from ungleich-public/cdist
Implement preos
This commit is contained in:
parent
eab540bd0f
commit
799ec72369
95 changed files with 9997 additions and 4 deletions
137
docs/src/cdist-preos.rst
Normal file
137
docs/src/cdist-preos.rst
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
PreOS
|
||||
=====
|
||||
|
||||
Description
|
||||
-----------
|
||||
With cdist you can install and configure new machines. You can use cdist to
|
||||
create PreOS, minimal OS which purpose is to boot new machine.
|
||||
After PreOS is booted machine is ready for installing desired OS and
|
||||
then it is ready for configuration.
|
||||
|
||||
PreOS creation
|
||||
--------------
|
||||
With cdist you can create PreOS.
|
||||
Currently supported PreOS-es include:
|
||||
|
||||
* debian
|
||||
* ubuntu
|
||||
* devuan.
|
||||
|
||||
PreOS is created using cdist preos command. preos command has subcommands that
|
||||
create the desired PreOS.
|
||||
|
||||
For example, to create ubuntu PreOS:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
$ cdist preos ubuntu /preos/preos-ubuntu -b -C \
|
||||
-k ~/.ssh/id_rsa.pub -p /preos/pxe-ubuntu
|
||||
|
||||
For more info about available options see cdist manual page.
|
||||
|
||||
This will bootstrap (``-b``) ubuntu PreOS in ``/preos/preos-ubuntu`` directory, it
|
||||
will be configured (``-C``) using default built-in initial manifest and with
|
||||
specified ssh authorized key (``-k``).
|
||||
After bootstrapping and configuration PXE
|
||||
boot directory will be created (``-p``) in ``/preos/pxe-ubuntu``.
|
||||
|
||||
After PreOS is created new machines can be booted using created PXE (after
|
||||
proper dhcp, tftp setting).
|
||||
|
||||
Since PreOS is configured with ssh authorized key it can be accessed throguh
|
||||
ssh, i.e. it can be further installed and configured with cdist.
|
||||
|
||||
Implementing new PreOS sub-command
|
||||
----------------------------------
|
||||
preos command is implemented as a plugin system. This plugin system scans for
|
||||
preos subcommands in ``cdist/preos/`` distribution directory and also in
|
||||
``~/.cdist/preos/`` directory if it exists.
|
||||
|
||||
preos subcommand is a module or a class that satisfies the following:
|
||||
|
||||
* it has attribute ``_cdist_preos`` set to ``True``
|
||||
* it has function/method ``commandline``.
|
||||
|
||||
For a module based preos subcommand ``commandline`` function accepts a module
|
||||
object as its first argument and the list of command line
|
||||
arguments (``sys.argv[2:]``).
|
||||
|
||||
For a class preos subcommand ``commandline`` method should be staticmethod and
|
||||
it accepts a class object as its first argument and the list of command line
|
||||
arguments(``sys.argv[2:]``).
|
||||
|
||||
If preos scanning finds a module/class that has ``_cdist_preos`` set
|
||||
to ``True`` and it has function/method ``commandline`` then this module/class is
|
||||
registered to preos subcommands. The name of the command is set to ``_preos_name``
|
||||
attribute if it exists, otherwise it is set to the module/class name, lowercase.
|
||||
When registered preos subcommand is specified as preos command then ``commandline``
|
||||
will be called with first argument set to module/class object and second argument
|
||||
set to ``sys.argv[2:]``.
|
||||
|
||||
Example writing new dummy preos sub-command
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Module based preos:
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
#. Create directory ``~/.cdist/preos/`` if it does not exist
|
||||
#. Create ``~/.cdist/preos/netbsd.py`` with the following contents:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
_preos_name = 'netbsd'
|
||||
_cdist_preos = True
|
||||
|
||||
def commandline(cls, args):
|
||||
print("NetBSD PreOS: {}".format(args))
|
||||
|
||||
When you try to run this new preos you will get:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
$ cdist preos -h
|
||||
usage: cdist preos [-h] preos
|
||||
|
||||
Create PreOS
|
||||
|
||||
positional arguments:
|
||||
preos PreOS to create, one of: {'netbsd', 'debian', 'ubuntu'}
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
$ cdist preos netbsd
|
||||
NetBSD PreOS: []
|
||||
|
||||
Class based preos:
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
#. Create directory ``~/.cdist/preos/`` if it does not exist
|
||||
#. Create ``~/.cdist/preos/freebsd.py`` with the following contents:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
class FreeBSD(object):
|
||||
_cdist_preos = True
|
||||
|
||||
@classmethod
|
||||
def commandline(cls, args):
|
||||
print("FreeBSD dummy preos: {}".format(args))
|
||||
|
||||
When you try to run this new preos you will get:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
$ cdist preos -h
|
||||
usage: cdist preos [-h] preos
|
||||
|
||||
Create PreOS
|
||||
|
||||
positional arguments:
|
||||
preos PreOS to create, one of: {'freebsd', 'debian', 'ubuntu'}
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
$ cdist preos freebsd
|
||||
FreeBSD dummy preos: []
|
||||
|
||||
In the ``commandline`` function/method you have all the freedom to actually create
|
||||
PreOS.
|
||||
|
|
@ -67,6 +67,9 @@ cdist/inventory/
|
|||
The distribution inventory directory.
|
||||
This path is relative to cdist installation directory.
|
||||
|
||||
cdist/preos/
|
||||
The distribution PreOS plugins directory.
|
||||
|
||||
confdir
|
||||
Cdist will use all available configuration directories and create
|
||||
a temporary confdir containing links to the real configuration directories.
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ is being used in small up to enterprise grade environments.
|
|||
cdist-messaging
|
||||
cdist-parallelization
|
||||
cdist-inventory
|
||||
cdist-preos
|
||||
cdist-integration
|
||||
cdist-reference
|
||||
cdist-best-practice
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ SYNOPSIS
|
|||
|
||||
::
|
||||
|
||||
cdist [-h] [-V] {banner,config,install,inventory,shell} ...
|
||||
cdist [-h] [-V] {banner,config,install,inventory,preos,shell} ...
|
||||
|
||||
cdist banner [-h] [-l LOGLEVEL] [-q] [-v]
|
||||
|
||||
|
|
@ -59,6 +59,29 @@ SYNOPSIS
|
|||
[-I INVENTORY_DIR] [-a] [-f HOSTFILE] [-H] [-t]
|
||||
[host [host ...]]
|
||||
|
||||
cdist preos [-h] preos
|
||||
|
||||
cdist preos debian [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B]
|
||||
[-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC]
|
||||
[-i MANIFEST] [-k KEYFILE ] [-m MIRROR]
|
||||
[-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r]
|
||||
[-S SCRIPT] [-s SUITE] [-y REMOTE_COPY]
|
||||
target_dir
|
||||
|
||||
cdist preos devuan [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B]
|
||||
[-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC]
|
||||
[-i MANIFEST] [-k KEYFILE ] [-m MIRROR]
|
||||
[-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r]
|
||||
[-S SCRIPT] [-s SUITE] [-y REMOTE_COPY]
|
||||
target_dir
|
||||
|
||||
cdist preos ubuntu [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B]
|
||||
[-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC]
|
||||
[-i MANIFEST] [-k KEYFILE ] [-m MIRROR]
|
||||
[-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r]
|
||||
[-S SCRIPT] [-s SUITE] [-y REMOTE_COPY]
|
||||
target_dir
|
||||
|
||||
cdist shell [-h] [-l LOGLEVEL] [-q] [-v] [-s SHELL]
|
||||
|
||||
|
||||
|
|
@ -432,6 +455,135 @@ List inventory database.
|
|||
all hosts that contain any of specified tags.
|
||||
|
||||
|
||||
PREOS
|
||||
-----
|
||||
Create PreOS. Currently, the following PreOS-es are supported:
|
||||
|
||||
* debian
|
||||
* ubuntu
|
||||
* devuan
|
||||
|
||||
|
||||
PREOS DEBIAN/DEVUAN
|
||||
-------------------
|
||||
|
||||
**target_dir**
|
||||
target directory where PreOS will be bootstrapped
|
||||
|
||||
**-a ARCH, --arch ARCH**
|
||||
target debootstrap architecture, by default 'amd64'
|
||||
|
||||
**-B, --bootstrap**
|
||||
do bootstrap step
|
||||
|
||||
**-b, --beta**
|
||||
Enable beta functionality.
|
||||
|
||||
**-C, --configure**
|
||||
do configure step
|
||||
|
||||
**-c CDIST_PARAMS, --cdist-params CDIST_PARAMS**
|
||||
parameters that will be passed to cdist config, by
|
||||
default '-v' is used
|
||||
|
||||
**-D DRIVE, --drive-boot DRIVE**
|
||||
create bootable PreOS on specified drive
|
||||
|
||||
**-e REMOTE_EXEC, --remote-exec REMOTE_EXEC**
|
||||
remote exec that cdist config will use, by default
|
||||
internal script is used
|
||||
|
||||
**-i MANIFEST, --init-manifest MANIFEST**
|
||||
init manifest that cdist config will use, by default
|
||||
internal init manifest is used
|
||||
|
||||
**-k KEYFILE, --keyfile KEYFILE**
|
||||
ssh key files that will be added to cdist config;
|
||||
'``__ssh_authorized_keys root ...``' type is appended to initial manifest
|
||||
|
||||
**-m MIRROR, --mirror MIRROR**
|
||||
use specified mirror for debootstrap
|
||||
|
||||
**-P ROOT_PASSWORD, --root-password ROOT_PASSWORD**
|
||||
Set specified password for root, generated by default
|
||||
|
||||
**-p PXE_BOOT_DIR, --pxe-boot-dir PXE_BOOT_DIR**
|
||||
PXE boot directory
|
||||
|
||||
**-r, --rm-bootstrap-dir**
|
||||
remove target directory after finishing
|
||||
|
||||
**-S SCRIPT, --script SCRIPT**
|
||||
use specified script for debootstrap
|
||||
|
||||
**-s SUITE, --suite SUITE**
|
||||
suite used for debootstrap, by default 'stable'
|
||||
|
||||
**-y REMOTE_COPY, --remote-copy REMOTE_COPY**
|
||||
remote copy that cdist config will use, by default
|
||||
internal script is used
|
||||
|
||||
|
||||
PREOS UBUNTU
|
||||
------------
|
||||
|
||||
**target_dir**
|
||||
target directory where PreOS will be bootstrapped
|
||||
|
||||
**-a ARCH, --arch ARCH**
|
||||
target debootstrap architecture, by default 'amd64'
|
||||
|
||||
**-B, --bootstrap**
|
||||
do bootstrap step
|
||||
|
||||
**-b, --beta**
|
||||
Enable beta functionality.
|
||||
|
||||
**-C, --configure**
|
||||
do configure step
|
||||
|
||||
**-c CDIST_PARAMS, --cdist-params CDIST_PARAMS**
|
||||
parameters that will be passed to cdist config, by
|
||||
default '-v' is used
|
||||
|
||||
**-D DRIVE, --drive-boot DRIVE**
|
||||
create bootable PreOS on specified drive
|
||||
|
||||
**-e REMOTE_EXEC, --remote-exec REMOTE_EXEC**
|
||||
remote exec that cdist config will use, by default
|
||||
internal script is used
|
||||
|
||||
**-i MANIFEST, --init-manifest MANIFEST**
|
||||
init manifest that cdist config will use, by default
|
||||
internal init manifest is used
|
||||
|
||||
**-k KEYFILE, --keyfile KEYFILE**
|
||||
ssh key files that will be added to cdist config;
|
||||
'``__ssh_authorized_keys root ...``' type is appended to initial manifest
|
||||
|
||||
**-m MIRROR, --mirror MIRROR**
|
||||
use specified mirror for debootstrap
|
||||
|
||||
**-P ROOT_PASSWORD, --root-password ROOT_PASSWORD**
|
||||
Set specified password for root, generated by default
|
||||
|
||||
**-p PXE_BOOT_DIR, --pxe-boot-dir PXE_BOOT_DIR**
|
||||
PXE boot directory
|
||||
|
||||
**-r, --rm-bootstrap-dir**
|
||||
remove target directory after finishing
|
||||
|
||||
**-S SCRIPT, --script SCRIPT**
|
||||
use specified script for debootstrap
|
||||
|
||||
**-s SUITE, --suite SUITE**
|
||||
suite used for debootstrap, by default 'xenial'
|
||||
|
||||
**-y REMOTE_COPY, --remote-copy REMOTE_COPY**
|
||||
remote copy that cdist config will use, by default
|
||||
internal script is used
|
||||
|
||||
|
||||
SHELL
|
||||
-----
|
||||
This command allows you to spawn a shell that enables access
|
||||
|
|
@ -540,12 +692,16 @@ FILES
|
|||
~/.cdist/inventory
|
||||
The home inventory directory. If ~/.cdist exists it will be used as
|
||||
default inventory directory.
|
||||
~/.cdist/preos
|
||||
PreOS plugins directory, if existing.
|
||||
cdist/conf
|
||||
The distribution configuration directory. It contains official types and
|
||||
explorers. This path is relative to cdist installation directory.
|
||||
cdist/inventory
|
||||
The distribution inventory directory.
|
||||
This path is relative to cdist installation directory.
|
||||
cdist/preos
|
||||
The distribution PreOS plugins directory.
|
||||
/etc/cdist.cfg
|
||||
Global cdist configuration file, if exists.
|
||||
~/.cdist.cfg or $XDG_CONFIG_HOME/cdist/cdist.cfg
|
||||
|
|
@ -635,6 +791,20 @@ EXAMPLES
|
|||
# Configure all hosts from inventory db
|
||||
$ cdist config -b -A
|
||||
|
||||
# Create default debian PreOS in debug mode
|
||||
$ cdist preos debian /preos/preos-debian -b -vvvv -C \
|
||||
-k ~/.ssh/id_rsa.pub -p /preos/pxe-debian
|
||||
|
||||
# Create ubuntu PreOS
|
||||
$ cdist preos ubuntu /preos/preos-ubuntu -b -C \
|
||||
-k ~/.ssh/id_rsa.pub -p /preos/pxe-ubuntu
|
||||
|
||||
# Create ubuntu PreOS on drive /dev/sdb
|
||||
# and set root password to 'password'.
|
||||
$ cdist preos ubuntu /mnt -b -B -C \
|
||||
-k ~/.ssh/id_rsa.pub -D /dev/sdb \
|
||||
-P password
|
||||
|
||||
|
||||
ENVIRONMENT
|
||||
-----------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue