:orphan: Deployment ========== Compute part of the API exposes a simple deployment functionality through the :func:`libcloud.compute.base.NodeDriver.deploy_node` method. This functionality is there to help you bootstrap a new server. It allows you to perform tasks such as: * Install your public SSH key on the server * Install configuration management software * Add an initial user account * Install an initial set of SSL certificates and keys on the server As noted above, this functionality is there to help you bootstrap a server and is not a replacement for a configuration management software such as `Chef`_ `Puppet`_, `Salt`_, `CFEngine`_ and others. Once your server has been bootstrapped, libcloud.deploy task should be done and replaced by other tools such as previously mentioned configuration management software. Deployment classes ------------------ Deployment module exposes multiple classes which make running common bootstrap tasks such as installing a file and running a shell command on a server easier. All the available classes are listed below. .. autoclass:: libcloud.compute.deployment.SSHKeyDeployment .. autoclass:: libcloud.compute.deployment.FileDeployment .. autoclass:: libcloud.compute.deployment.ScriptDeployment .. autoclass:: libcloud.compute.deployment.ScriptFileDeployment .. autoclass:: libcloud.compute.deployment.MultiStepDeployment Using deployment functionality ------------------------------ This section describes how to use deployment functionality and :func:`libcloud.compute.base.NodeDriver.deploy_node` method. deploy_node method allows you to create a cloud server and run bootstrap commands on it. It works in the following steps: 1. Create a server (same as ``create_node``, in fact it calls ``create_node`` underneath) 2. Wait for the server to come online and SSH server to become available 3. Run provided bootstrap step(s) on the server As noted above, second step waits for node to become available which means it can take a while. If for some reason deploy_node is timing out, make sure you are using a correct ``ssh_username``. You can troubleshoot deployment issues using LIBCLOUD_DEBUG method which is described on the :ref:`troubleshooting page `. :func:`libcloud.compute.base.NodeDriver.deploy_node` takes the same base keyword arguments as the :func:`libcloud.compute.base.NodeDriver.create_node` method and couple of additional arguments. The most important ones are ``deploy`` and ``auth``: * ``deploy`` argument specifies which deployment step or steps to run after the server has been created. * ``auth`` arguments tells how to login in to the created server. If this argument is not specified it is assumed that the provider API returns a root password once the server has been created and this password is then used to log in. For more information, please see the create_node and deploy_node method docstring. Some examples which demonstrate how this method can be used are displayed below. Run a single deploy step using ScriptDeployment class ----------------------------------------------------- The example below runs a single step and installs your public key on the server. .. literalinclude:: /examples/compute/deployment_single_step_install_public_key.py :language: python Run multiple deploy steps using MultiStepDeployment class --------------------------------------------------------- The example below runs two steps on the server using ``MultiStepDeployment`` class. As a first step it installs you SSH key and as a second step it runs a shell script. .. literalinclude:: /examples/compute/bootstrapping_puppet_on_node.py :language: python .. _`Chef`: http://www.opscode.com/chef/ .. _`Puppet`: http://puppetlabs.com/ .. _`Salt`: http://docs.saltstack.com/topics/ .. _`CFEngine`: http://cfengine.com/