==============================
Salt Cloud 0.8.6 Release Notes
==============================

Welcome to 0.8.6! This is an exciting release, especially for EC2 users. To see
what new features are available, read on.

Documentation
=============

The documentation for Salt Cloud can be found on Read the Docs:
https://salt-cloud.readthedocs.io

Download
========

Salt Cloud can be downloaded and install via pypi:

https://pypi.python.org/packages/source/s/salt-cloud/salt-cloud-0.8.6.tar.gz

Some packages have been made available for salt-cloud and more on their
way. Packages for Arch and FreeBSD are being made available thanks to the
work of Christer Edwards, and packages for RHEL and Fedora are being created
by Clint Savage. The Ubuntu PPA is being managed by Sean Channel. Package
availability will be announced on the salt mailing list.

Updated libcloud
================
This version of Salt Cloud now depends upon libcloud version 0.12.1. Be sure to
update your packages accordingly.


Salt Outputter
==============
Previously, output from Salt Cloud was a mix of log output and print
statements, while the Salt outputter system has grown into a beautiful,
configurable tool. This release of Salt Cloud now takes advantage of the Salt
outputter system, making the output from the salt-cloud command much more
beautiful, easy to read, and usable from other scripts.


Experimental EC2 Driver
=======================
A new driver has been introduced for Amazon EC2, to potentially replace the
existing AWS driver. This driver contains several optimizations which have been
found to greatly improve instance creation and deployment. They also allow for
extra functionality to be added, which is not currently available in the AWS
driver. However, it should be noted that the EC2 driver is currently considered
to be experiemental. While existing AWS usage should not currently differ, it
should be expected to change between versions until it is declared stable.

Many of the features of this release are specific to the EC2 driver. Please
check the AWS documentation for configuration and usage of the EC2 driver.


AWS/EC2 Rename on Destroy
=========================
When instances on AWS are destroyed, there will be a lag between the time that
the action is sent, and the time that Amazon cleans up the instance. During this
time, the instance still retails a Name tag, which will cause a collision if the
creation of an instance with the same name is attempted before the cleanup
occurs. In order to avoid such collisions, Salt Cloud can be configured to
rename instances when they are destroyed. The new name will look something like:

.. code-block:: bash

    myinstance-DEL20f5b8ad4eb64ed88f2c428df80a1a0c

In order to enable this, add AWS.rename_on_destroy line to the main
configuration file:

.. code-block:: yaml

    AWS.rename_on_destroy: True


New Action: show_instance
=========================
This action is a thin wrapper around --full-query, which displays details on a
single instance only. In an environment with several machines, this will save a
user from having to sort through all instance data, just to examine a single
instance.

.. code-block:: bash

    $ salt-cloud -a show_instance myinstance


Actions vs Functions
====================
Salt Cloud 0.8.3 introduced the concept of provider-specific actions. However,
these actions were designed to operate on specific instances within a provider.
In order to perform calls on a provider, but not on specific instances,
functions have been added. Currently, only EC2 takes advantage of these.


New Function: show_image
========================
This is a function that describes an AMI on EC2. This will give insight as to
the defaults that will be applied to an instance using a particular AMI.

.. code-block:: bash

    $ salt-cloud -f show_image ec2 image=ami-fd20ad94


EC2: delvol_on_destroy
======================
This argument overrides the default DeleteOnTermination setting in the AMI for
the root EBS volume for an instance. Many AMIs contain 'false' as a default,
resulting in orphaned volumes in the EC2 account, which may unknowingly be
charged to the account. This setting can be added to the profile or map file
for an instance.

.. code-block:: yaml

    delvol_on_destroy: True


This can also be set as a global setting in the EC2 cloud configuration:

.. code-block:: yaml

    EC2.delvol_on_destroy: True


The setting for this may be changed on an existing instance using one of the
following commands:

.. code-block:: bash

    salt-cloud -a delvol_on_destroy myinstance
    salt-cloud -a keepvol_on_destroy myinstance


EC2 Termination Protection
==========================
AWS allows the user to enable and disable termination protection on a specific
instance. An instance with this protection enabled cannot be destroyed. The EC2
driver adds a show_term_protect action to the regular AWS functionality.

.. code-block:: bash

    salt-cloud -a show_term_protect mymachine
    salt-cloud -a enable_term_protect mymachine
    salt-cloud -a disable_term_protect mymachine


EC2 Alternate Endpoint
======================
Normally, ec2 endpoints are build using the region and the service_url. The
resulting endpoint would follow this pattern:

.. code-block:: yaml

    ec2.<region>.<service_url>

This results in an endpoint that looks like:

.. code-block:: yaml

    ec2.us-east-1.amazonaws.com

There are other projects that support an EC2 compatibility layer, which this
scheme does not account for. This can be overridden by specifying the endpoint
directly in the main cloud configuration file:

.. code-block:: yaml

    EC2.endpoint: myendpoint.example.com:1138/services/Cloud


EC2 Volume Management
=====================
The EC2 driver has several functions and actions for management of EBS volumes.


Creating Volumes
----------------
A volume may be created, independent of an instance. A zone must be specified.
A size or a snapshot may be specified (in GiB). If neither is given, a default
size of 10 GiB will be used. If a snapshot is given, the size of the snapshot
will be used.

.. code-block:: bash

    salt-cloud -f create_volume ec2 zone=us-east-1b
    salt-cloud -f create_volume ec2 zone=us-east-1b size=10
    salt-cloud -f create_volume ec2 zone=us-east-1b snapshot=snap12345678


Attaching Volumes
-----------------
Unattached volumes may be attached to an instance. The following values are
required: name or instance_id, volume_id, and device.

.. code-block:: bash

    salt-cloud -a attach_volume myinstance volume_id=vol-12345 device=/dev/sdb1


Show a Volume
-------------
The details about an existing volume may be retrieved.

.. code-block:: bash

    salt-cloud -a show_volume myinstance volume_id=vol-12345
    salt-cloud -f show_volume ec2 volume_id=vol-12345


Detaching Volumes
-----------------
An existing volume may be detached from an instance.

.. code-block:: bash

    salt-cloud -a detach_volume myinstance volume_id=vol-12345


Deleting Volumes
----------------
A volume that is not attached to an instance may be deleted.

.. code-block:: bash

    salt-cloud -f delete_volume ec2 volume_id=vol-12345


Managing Key Pairs on EC2
=========================
The EC2 driver has the ability to manage key pairs.


Creating a Key Pair
-------------------
A key pair is required in order to create an instance. When creating a key pair
with this function, the return data will contain a copy of the private key.
This private key is not stored by Amazon, and will not be obtainable past this
point, and should be stored immediately.

.. code-block:: bash

    salt-cloud -f create_keypair ec2 keyname=mykeypair


Show a Key Pair
---------------
This function will show the details related to a key pair, not including the
private key itself (which is not stored by Amazon).

.. code-block:: bash

    salt-cloud -f delete_keypair ec2 keyname=mykeypair


Delete a Key Pair
-----------------
This function removes the key pair from Amazon.

.. code-block:: bash

    salt-cloud -f delete_keypair ec2 keyname=mykeypair
