94 lines
4.2 KiB
ReStructuredText
94 lines
4.2 KiB
ReStructuredText
Why should I use cdist?
|
|
=======================
|
|
|
|
There are several motivations to use cdist, these
|
|
are probably the most popular ones.
|
|
|
|
No need to learn a new language
|
|
-------------------------------
|
|
|
|
When adopting cdist, your staff does not need to learn a new
|
|
`DSL <https://en.wikipedia.org/wiki/Domain-specific_language>`_
|
|
or programming language, as cdist can be configured
|
|
and extended in **any scripting language**, the recommended one
|
|
being `shell scripts <https://en.wikipedia.org/wiki/Shell_script>`_.
|
|
|
|
Shell scripts enjoy ubiquity: they have been widely used by UNIX system engineers
|
|
for decades, and a suitable interpreter (:code:`/bin/sh`) is all but
|
|
guaranteed to be widely available on target hosts.
|
|
|
|
|
|
Easy idempotance -- without having to give up control
|
|
-----------------------------------------------------------------------------
|
|
|
|
For the sake of `idempotence <https://en.wikipedia.org/wiki/Idempotence>`_, many **contemporary SCMs** choose to ditch the power and versatality of general purpose programming languages, and adopt some form of
|
|
declarative `DSL <https://en.wikipedia.org/wiki/Domain-specific_language>`_ for describing the desired end states on target systems.
|
|
|
|
:program:`Cdist` takes a quite different approach, enabling *both* `idempotence <https://en.wikipedia.org/wiki/Idempotence>`_ *and* a decent level of programming power.
|
|
|
|
Unlike other SCMs, :program:`cdist` allows you to use a general purpose scripting language (POSIX shell is recommended) for describing the desired end states on target systems, instead of some declarative `DSL <https://en.wikipedia.org/wiki/Domain-specific_language>`_.
|
|
|
|
Unlike regular scripting, however, you are not left on your own for ensuring `idempotence <https://en.wikipedia.org/wiki/Idempotence>`_. :program:`Cdist` makes this really easy.
|
|
|
|
It does not matter how many times you "invoke" **cdist types** and in which order: :program:`cdist` will ensure that the actual code associated with each type will be executed only once (in dependency order) which, in turn, may effectively end up becoming a no-op, if the actual state is already the same as the desired one.
|
|
|
|
.. TODO: It would be great if there were an "architectural overview" page which could be referenced from here.
|
|
|
|
|
|
Powerful language
|
|
--------------------
|
|
|
|
Compared to a typical `DSL <https://en.wikipedia.org/wiki/Domain-specific_language>`_,
|
|
shell scripts feature a much more powerful language.
|
|
Here are some features which make daily work easy:
|
|
|
|
* Ability to dynamically adapt configuration based on information
|
|
*explored* from target hosts;
|
|
* High level string manipulation (using sed, awk, grep)
|
|
* Conditional support (**if, case**)
|
|
* Loop support (**for, while**)
|
|
* Variable expansion
|
|
* Support for dependencies between cdist types and objects
|
|
|
|
If and when needed, it's always possible to simply
|
|
make use of **any other scripting language** at your disposal
|
|
*(albeit at the expense of adding a dependency on the corresponding interpreter
|
|
and libraries)*.
|
|
|
|
|
|
|
|
Zero dependency configuration management
|
|
-----------------------------------------
|
|
|
|
Cdist requires very little on a target system. Even better,
|
|
in almost all cases all dependencies are usually already
|
|
fulfilled.
|
|
Cdist does not require an agent or high level programming
|
|
languages on the target host: it will run on any host that
|
|
has a **ssh server running** and a POSIX compatible shell
|
|
(**/bin/sh**). Compared to other configuration management systems,
|
|
it does not require to open up an additional port.
|
|
|
|
Push based distribution
|
|
-----------------------
|
|
|
|
Cdist uses the push based model for configuration. In this
|
|
scenario, one (or more) computers connect to the target hosts
|
|
and apply the configuration. That way the source host has
|
|
very little requirements: Cdist can even run on a sysadmin
|
|
notebook that is loosely connected to the network and has
|
|
limited amount of resources.
|
|
|
|
Furthermore, from a security point of view, only one machine
|
|
needs access to the target hosts. No target hosts will ever
|
|
need to connect back to the source host, which contains the
|
|
full configuration.
|
|
|
|
Highly scalable
|
|
---------------
|
|
|
|
If at some point you manage more hosts than can be handled from
|
|
a single source host, you can simply add more resources: Either
|
|
add more cores to one host or add hosts.
|
|
Cdist will utilise the given resources in parallel.
|