Changelog for Touchdown
=======================

0.0.10 (2015-05-07)
-------------------

- The parallel resolver introduced in 0.0.7 is now enabled by default.

- We've added more validation! Bucket names are now validated with the same
  rules as the web console. You can only use storage_encrypted with a subset of
  RDS instance sizes. We know capture that before making a single AWS call.

- asg: We now wait for there to be at least one healthy instance when creating
  a new auto scaling group.

- asg: We now clean up old launch configs (you can only create a hundred, and
  with 5 server types you can hit that in 20 deployments!).

- kms: Add initial support for managing Key and Alias resources.

- ssh: Fix streaming from paramiko channels. It was racy, and this meant that
  short lived commands (such as ``whoami``) were prone to not returning all
  their stdout. This mean that our connection health checks would fail.

- ssh: When using ssh-over-ssh the inner connection might fail with
  ChannelException. Assuming that an instance might still be booting we now
  retry in this case.

- elb: Fix failure in elb teardown.

- cloudfront: If resuming a teardown touchdown will now resume waiting for
  web distributions to enter the 'deployed' state before attempting to delete
  them.

- Of interested to developers: we've switched to stricter flake8 settings. We
  are no longer inhibiting any of the default errors. Our ``max-line-length``
  is 150 and our ``max-complexity`` is 11. We will be reducing these further in
  the coming months.


0.0.9 (2015-04-22)
------------------

- s3: Add very basic support for syncing entire folders to s3.

- rds: Add point in time restore and snashot restore.

- cloudfront: By setting cname to '' you can create a alias-less distribution.
  [@mitchellrj]

- Any field can now accept a serializer. This means any field can be set
  dynamically based on other resources outputs.
  [@mitchellrj]

- We now run our tests on AppVeyor on python 2.7 (32 bit) and python 3.4
  (32 bit and 64 bit).

- elb: Now waits for Elastic Network Interfaces to go away before considering
  an elb deleted.


0.0.8 (2015-03-26)
------------------

- The s3 describe step now retrieves the location a bucket was created in.

- S3 buckets are now created with a LocationConstraint based on the account
  resource. For example::

      aws = workspace.add_aws(region='eu-central-1')
      aws.add_bucket(name='my-bucket')

  Will now create the bucket in eu-central-1, like you would expect.

- Add's support for copying images created with ``add_image`` to other regions.


0.0.7 (2015-03-23)
------------------

- Add an experimental threaded resolver for deploying infrastructure in
  parallel. If you are using the command line tool you can pass
  ``--parallel``::

    touchdown --parallel apply

  Users consuming the python API can switch from the ``Runner`` class to
  ``ThreadedRunner``.

- StreamingDistribution should now work. It's API has been simplified too. You
  can set one up with::

      aws.add_streaming_distribution(
          name="streaming.example.com",
          bucket=mybucket,
      )

  Where ``mybucket`` was previously defined with ``aws.add_bucket``.

- You can now create ``ALIAS`` records for Distribution and
  StreamingDistribution resources::

      aws.add_hosted_zone(
          name="example.com",
          records=[
              {"name": "backend",   "type": "A", "alias": my_load_balancer},
              {"name": "www",       "type": "A", "alias": my_distribution},
              {"name": "streaming", "type": "A", "alias": my_streaming_distribution},
          ],
      )

- You can now set CORS and policy for S3 buckets. You can also do simple file
  uploads with the new file resource::

      bucket = aws.add_bucket(name="my-test-bucket")
      bucket.add_file(
          name="crossdomain.xml",
          contents=open("crossdomain.xml").read(),
      )

  You can set canned ACL's on the files as well.

- You can now set the ``origin_path`` attribute of CloudFront.

- Improved python 3 support.


0.0.6 (2015-03-04)
------------------

- Fix python 3 release.


0.0.5 (2015-03-04)
------------------

- More useful/verbose console output.

- Timeouts when operations take longer than expected are handled more
  gracefully. Fixes #6.

- The dependency solver now sorts within batches, fixing #4.


0.0.4 (2015-02-26)
------------------

- Brown paper bag.


0.0.3 (2015-02-26)
------------------

- The CloudFront abstraction has been revisited to flatten and simplify the
  structure (as the actual payload for CloudFront is quite complicated). The
  docs have been updated accordingly.

- Tearing down a CloudFront distribution now correctly refreshes the ETag after
  disabling a distribution, allowing it to suceed.

- The VPN Gateway handling has been improved. They are now correctly attached
  and detached from a VPC when creating and destroying them.


0.0.2 (2015-02-18)
------------------

- Basic support for Amazon SQS.

- Basic support for Amazon SNS.

- Basic support for Amazon CloudFront Streaming Distributions.

- Pipeline sbould now be able to create one.

- Strings fields are now validated against their annotations:

    * `min` enforces a minimum length for a value
    * `max` enforces a maximum length for a value
    * `choices` enforces that the value is one of a pre-determined list
    * `regex` enforces that the value matches a guard expression

- More types now have proper ``signature`` annotations for their ``Apply``
  policy. For example, you will now be warned at plan time if a
  SecurityGroup doesn't have the required ``description`` field (#10).
