v1.14.2 - May 13, 2015

Databases

    Removed custom cipher list for SSL/TLS connections

v1.14.1 - 2015-05-07

Object Store

    Allow users to override the default URL type when generating temporary URLs. Internal services can now generate public URLs.
    Fixed an issue where the wrong data type was populating CDN containers.

Other

    Fixed composer.json regression which only installed Guzzle/Http rather than all packages.
    Fixed typos in core service class.

v1.14.0 - 2015-04-29

:new: CDN feature

    @ycombinator did a lot of great work to introduce CDN support into the SDK

Doc fixes

    @AdamMerrifield fixed the argument naming for the Guzzle backoff plugin docs.

v1.13.0 - 2015-04-02

Project installation

    We are bumping the minimum PHP version required from 5.3 to 5.4, since 5.3 has officially entered end of life and no longer receives security updates.

Object Store

    Added symlink functionality (#565 - added by @markchalloner)
    Added sample of how to retrieve over 10,000 objects (#568 - added by @ilithium)
    Performance improvement with how CDN containers are instantiated (#570)

Compute

    Add support for Availability Zones (#576)

DNS

    Added convenience method for retrieving domain by name rather than ID (#574)

Documentation

    Added more links to our new official docs
    Fixed incorrect reference to URL type (#578 - added by @AdamMerrifield )
    Fixing dead links (#580)

v1.13.0-alpha1 - 2015-01-7

:new: CDN

    Alpha support for OpenStack and Rackspace CDN service (#505)

The "alpha" tag on this release indicates that the PHP API provided by the SDK for the new CDN service might change in a backwards-incompatible manner. Once stable, we will release the new CDN service as part of a regular, non-alpha release.

v1.12.1 - 2014-12-9

Object Store

    Bug fix: Fix issue with not being able to delete empty containers (#490 — bug reported and fixed by @joshrencher)

Common

    Bug fix: Fix breaking change introduced during version negotation (#492 — bug reported by @JeroenVanOort)
    Typo fixes in documentation (#489 — added by @vlajos)

v1.12.0 -2014-12-4

:new: Networking

    Full support for OpenStack Networking service (#444, #448, #465)
    Typo fixes in documentation (#475, #476)
    Standardizing code samples (#470)

Object Storage

    Improve bulk delete algorithm (#478)
    Refactoring delete container operation to make it more reliable (#479, #481)
    Setting container TTL is now a lot easier (#439)
    More code samples (#464)
    Standardizing code samples (#471)

Load Balancers

    Certificate Mappings feature now supported (#482 — added by @tylerturk, @JPry, and @ttaylor-wpe)
    HTTPS Redirect is now a configurable option when creating LBs (#454)
    Standardizing code samples (#457)
    More code samples (#464)
    Bug fix: Fixed typo in documentation (#438 — bug reported by @jjtroberts)

Compute

    Start and stop actions added for servers (#462 — added by @notFloran)
    Diagnostics feature added for server (#460 — added by @notFloran)
    Added "create server with networks" sample (#468)
    Standardizing code samples (#461)

Identity

    Standardizing code samples (#458)
    Bug fix: Fix to how users are created (#442 — bug reported by @hexusio)

Databases

    Standardizing code samples (#470)

Orchestration

    Standardizing code samples (#474)

Volumes

    Standardizing code samples (#469)

Queues

    More code samples (#464)
    Bug fix: Fix to list messages iterator (#448)

Common

    Added a more robust solution to negotiating versions in service catalog (#463)
    Table of contents added to userguide (#452)
    Bug fix: X-Auth-Token header was not being reset before authentication, causing OpenStack auth calls to fail (#484 — bug reported by @notFloran)
    Bug fix: Fixed typo in constants file (#480 - bug reported and fixed by @ficus)
    Bug fix: Tenant IDs can now be imported as strings, rather than as integers (#456 — bug reported by @JeroenVanOort)

v1.11.0 - 2014-10-24

Compute

    Servers can now be suspended and resumed (#425 — added by @asusk7m550)
    Added extended status server properties (#386 — added by @cs278)
    Servers can now be booted up from a volume (#407)
    Added sample code for creating a server and retrieving its IP address (#416)

Database

    Added support for datastores and configurations (#409)

DNS

    Added methods for asynchronous job retrieval (#372)
    Bug fix: Fixed broken path in user guide (#392 — bug reported by @jsbodine)
    Bug fix: Made cross-links in documentation use relative paths (#394 — bug reported by @jsbodine)

Load Balancer

    Added httpsRedirect as an updatable attribute (#367)
    Bug fix: Nodes are added only if they are new (#400)
    Bug fix: Removed call to non-existent list with details HTTP API (#426 — bug reported by @jjtroberts)

Monitoring

    Bug fix: PaginatedIterator from fetchDataPoints now returns MetricDataPoints instead of Metrics (#387 — bug fixed by @Ben-Speakman)
    Bug fix: Memory agent host info is now treated consistently (#385 — bug reported by @Ben-Speakman)

:new: Orchestration

    New service added! (#390, #430, #431)

Object Store

    More code samples (#413, #420)
    Bug fix: CORS header are no longer prefixed with X-*-Meta-* (#403 — bug reported and fixed by @killswitch)

Queues

    Bug fix: Fixed regex to not assume presence of claim_id (#382)

Common

    Released responsibility for logging onto PSR interfaces (#368)
    Bug fix: Fixed to how iterator traverses collection with next url (#370 — bug reported by @mastef)

Packaging

    Let composer automatically decide what version constraint to use (#423 — added by @GrahamCampbell)
    Fixed license (#399)
    Started a Conventions section for contributors (#411, #414)
    Added automatic lint-checking at build time (#433)
    Added automatic PSR-2 compliance checking at build time (#434)

v1.10.0 - 2014-06-16

    Rackspace Cloud Images / OpenStack Glance now supported
    Sample scripts added for Compute and Object Storage services
    Fixes to various pieces of documentation
    Fix to how PTR records are deleted in DNS service
    Adding Load Balancer access lists is now easier
    Adding multiple scaling policies is now easier
    Convenience methods added to Queues, allowing for easy deletion of members for a queue
    More specific and clear dependency versioning in composer file
    Fix to DNS import method which now adds the appropriate HTTP headers
    Enabling Compute v1.1 to work, which beforehand wasn't supported due to an overly strict wildcard
    Fixes to how the catalog handles region-specific UK DNS
    Servers can now be provisioned using flavor/image IDs instead of fully instantiated objects

v1.9.2 - 2014-02-06

    New container migration strategy. With the deprecation of default regions, a use case arose where people might want to migrate the contents of a Swift container to another geographic region. The copy method only supports cross-container migrations in one region. For more information about how to implement this, please consult the documentation.

    Cloud init now supported for VM creation (see #288)

    CDN enabled check fixed for containers (fixes #292)

    Paths are now added as strings. This arose because integers paths were being ignored, which was fixed with a PR to Guzzle (see here).

    More sympathetic errors when object not found (see 70e807)

    Setting tenant now accounts for numerical strings, rather than just integers (fixes #290)

    New doc for caching credentials

    More documentation for load balancers

    Updated docs for setting metadata when uploading object

v1.9.1 - 2014-01-13

    Fix to server keypairs in how the JSON schema was generated for server creation (fixes #272)

    Removal of abstract method in AbstractService, since the method was already defined in ServiceInterface - this caused problems with versions of 5.3

    Bug fix with Data Objects, allowing 0 content size to be returned (fixes #273)

    Bug fix with Paginated Collections. Previously, the "should append" rule was incorrect - meaning that subsequent requests were not being executed (fixes #274)

    Bug fix with LoadBalancer access resources which prohibited them from being created

    More graceful error handling with Container deletion. If a 409 Conflict response is returned, a more meaningful error will be sent to the end-user (fixes #252)

    Adding OpenCloud\Version class for greater clarity

    Updated Guzzle dependency version to v2.8

    Copyright notices updated to 2014

    New "Getting Started" guide for OpenStack

    Updated documentation for spawning Cloud Servers with keypair authentication

    Adding --prefer-source flag to Travis builds to get around Github API rate-limits

v1.9.0 - 2014-01-07

    Removal of default regions. We want to ensure that the user retains control over where their data is stored, rather than making that decision on their behalf.

    Identity/Keystone support. We now have full support for Rackspace Cloud Identity, and also support for OpenStack Keystone. The resources that you can interact with are Users, Roles, Tokens and Tenants

    Coveralls integration. We have externalized our test coverage with Coveralls and are currently in the process of bumping it to 100%. This allows for greater transparency and holds the project to a far higher standard.

    New iterator for DNS collections that fixes #258

    Changes to Swift object metadata, making it easier and more efficient to update

    Removal of callable type hint in OpenCloud\Common\Collection\ResourceIterator that was causing errors (fixes #249)

    Fix to OpenStack\Rackspace so it references the correct CredentialError class (fixes #253)

    Updating various Orchestration models to reference the correct PersistentObject class path

    Addition of Keystone docs

    Addition and improvement of Nova docs

    Fix to Swift object doc so that the mode is included in fopen() (fixes #262)

    Fix to sprintf in code sample in Getting Started guide (fixes #254, #259)

v1.8.2 - 2013-12-13

    Load Balancer nodes can now be updated (to change condition, weight or type).
    Better garbage collection for Directory syncing -- streams are now explicitly closed after use (#246).
    Static website methods are now available for Containers; if used on CDNContainers, a deprecation warning is thrown.
    Claim IDs can now be extracted from Messages that have been claimed (#247).
    New getter method for Messages (#247).

v1.8.1 2013-12-12

    Directory syncing with Cloud Files. Now you can synchronize local directories with remote containers, allowing for easy deployment for static sites, etc. Documentation here.
    New method allowing for partial downloads of Swift objects (i.e. just metadata). Addresses #243.
    Fix to an issue with iterators where the first element was not populating its resource object correctly (#237)
    Documentation fixes (#240)
    Fix to OpenStack client which allows for the default X-Auth-Token header to be set when importing credentials (#236)
    Fix to recurring issue with Content-Type header (#198)
    Fix ObjectStore being incompatible with CDN-less/OpenStack setups (#238)

v1.8.0 - 2013-11-29

    New and improved Iterators. Users always had problems traversing paginated collections, sometimes having to construct nested loops. Now, everything is offered in an easy-to-use manner that harnesses the power of PHP's native interfaces. For more information, please consult the documentation for this new feature.

    Tenant names and tenant IDs added to OpenStack authentication. Users can now authenticate more specifically. Also fixes an issue one customer had regarding empty Service Catalogs.

    Greater use of Symfony's EventDispatcher. The decision was made to rely more on event dispatching, rather than inheritance, to provide additional features. One of the immediate benefits of this is that there is less repetition in the Request and Response classes.

    Uploading single objects to CloudFiles uses less bandwidth. Previously, when a single object was uploaded, another request was executed afterwards to populate the new object. This was relatively expensive operation - especially for large files. Now we populate the new object using information provided in the response for the PUT operation.

    Fix to BulkExtract content-type uploads. Now the API is allowed to type guess the archived files in a tarball. Previously, they were manually set to application/json.

    Better documentation for authentication, cloud monitoring, queues and iterators.

    More consistent use of mock objects in unit tests. We are now using the MockPlugin for Guzzle to create FIFO request queues.


v1.7.3 - 2013-11-15

    CDN Container logging can now be enabled and disabled (#223 and #225)
    Content-Type is now set to application/json by default for all entity-enclosing request (#221 and #222)
    File handles for multiple file uploads are now closed after the request is executed. On some OSs files are locked during stream handling (#219)
    Changes to "Getting Started" guide
    Fixing typos for ObjectStorage guide


v1.7.2 - 2013-11-08

    Better documentation for Swift
    Fix to content-type handling with DataObjects (#198)
    When using Swift with ServiceNet, you can now access its CDN container information over public URL (#56)
    Added more methods to DataObject to allow access to more state (#211, #216). See docs for a list of supported methods.
    Updated quick reference (#152)
    Better API docs


v1.7.1 - 2013-11-06

    Globals removed in favor of class constants, where possible
    Service signatures are more consistent
    Fixes to Cloud Queues: better handling of Client UUIDs, event dispatching added for the Service, and other small fixes
    Fixes to Monitoring: resource models have clearer methods and better relations to their Service and Parent objects
    More documentation for key services like ObjectStorage and Cloud Queues. The README and "Getting Started" guide have also been rewritten for clarity and succinctness
    Acceptance tests added for Cloud Queues and Monitoring
    Fix for DataObject temporary URLs
    CONTRIBUTING has clearer instructions for running test suites


v1.7.0 - 2013-10-31

Integration with Guzzle HTTP component

    Uploading files is now much quicker
        Parallel requests using multi-cURL, which means files can be uploaded concurrently
        Files over 5GB are fragmented and uploaded using multibyte chunking
    URLs are now treated as fully fledged objects (Guzzle\Http\Url), allowing for greater functionality
    Requests that send content now have the benefit of using the Guzzle\Http\EntityBody object, which extends and builds on the native functionality offered by PHP streams. Now there is a cool abstraction layer that offers a lot of consistency
    Progress functionality (either by dedicated methods or by anonymous functions)
    Event dispatching so all of your objects now have access to, and can also modify, the HTTP workflow. See Symfony's Event Dispatcher Component for more info.

For a complete list of features, view the official page.
Keypair support

Although code now exists in the SDK for API compatability for creating servers with keypairs, there has been a recent bug in Nova where certain endpoints (DFW, IAD and ORD) do not exhibit the desired functionality. A patch will be released in the near future. For reference, you just need to add in an extra array key:

try {
    $server->create(array(
        'name'     => 'test',
        'image'    => $image,
        'flavor'   => $flavor,
        'networks' => array(
            $service->network(RAX_PUBLIC),
            $service->network(RAX_PRIVATE)
        ),
        'OS-DCF:diskConfig' => 'AUTO',
        'keypair' => array(
            'name'      => 'id_rsa.pub',
            'publicKey' => file_get_contents('/path/to/local/key')
        )
    ));
} catch (\Guzzle\Http\Exception\ClientErrorResponseException $e) {
    var_dump($e->getResponse());
}

Better handling of services

    Endpoints, the Service Catalog, and Catalog Items are now treated as objects
    Factory methods in the core OpenStack client have been renamed for greater clarity
    Services are now constructed with a ServiceBuilder for efficiency
    Namespace changes to all resource models for greater consistency

Major upgrade of CloudFiles

    Near 100% API consistency for Cloud Files
    Complete documentation, both technical and non-technical, for all functionality
    Better handling of resource objects: Account, Container, CDNContainer, DataObject
    The ability to upload files in 3 different ways (each one has a different use case):
        Sequential uploads for simple files
        Parallel batched uploads for multiple files
        An OpenCloud\ObjectStore\Upload\TransferBuilder factory for handling large uploads (+5GB) that require chunking
    Conditional requests for getting objects (If-Match, If-None-Match, If-Modified-Since and If-Unmodified-Since). Range is also now supported for partial content returns.
    Bulk extract and bulk delete now better supported

Unit test structure overhaul

    Completely refactored unit tests
        All unit tests now inherit from one centralized test case
        Use of singletons for client object re-use
        New implementation of mock responses
        Request capturing using Event dispatchers

Other changes

    Refactoring of Autoscale/Monitoring to keep things DRY
    New docblock for every file with up-to-date license
    Fix to logging output functionality
    Fixes to server metadata
    Minor changes to Metadata
    Core change to method/property overloading. For every private model property, the end-user now has access to a dynamic getter/setter methods that ensure better encapsulation. For finer-grained control, they can specify concrete methods which supercede the magic methods. I want to get into the habit of encouraging filtered access through methods rather than raw property access.


v1.6.0 - 2013-09-06

    AutoScale. This feature allows people to scale their servers up or down based on "scaling policies". A policy determines the behaviour of a particular scaling action. Webhooks activate policies - and can be tied to Cloud Monitoring (i.e. if CPU falls beneath a certain number), or executed anonymously using a unique link. Each group also has its own configuration sets: one that dictates the general state of the group (its name, etc.) and another that dictates the behaviour of a new server which is spawned (flavor ID, networks, personality file, load balancers, etc.)

    Unit test coverage reaches 100%. We've significantly added to our unit tests and brought the overall coverage to one hundred percent: this includes lines, classes and files. Existing tests are reformatted for PSR, and the stub connection classes have been upgraded.

    Image scheduling for servers. You can now schedule image for your servers programmatically.

    iOS Streaming is now available for containers through a unique URL.

    New logging functionality. We have released a new logging feature compliant with PSR. It provides different levels of reporting, and can be customized to output to a specific file or stream context. With this refactoring, we plan to add in support for Airbrake in the near future.

    Bug fixes to CDN container metadata, exporting credentials, and many others.

    TODO list added to make it clearer for people to help contribute.


v1.5.10 - 2013-08-01

    patch to support the diskConfig (Auto, Manual) or other attributes on Server::Create()
    created CONTRIBUTING.md file to support Github feature
    fixed release notes
    save file to stream
    minor fixes


v1.5.8 - 2013-06-27

    #106 - problem with urlencoded paths for TEMP_URL feature
    #111 - slowness in listing swift containers
    OMG ADDED HEAT (Orchestration) SUPPORT! (Thanks, Stephen!)
    OMG ADDED Cloud Monitoring support! (Thanks, Jamie!)
    numerous other bug fixes, updated docs


v1.5.7 - 2013-05-27

    #102 - Etag support on create
    #104 - function signature mismatch
    #105 - CDN object not associated with container


v1.5.6 - 2013-05-10

    Support for DNS\Domain::CloneDomain() feature


v1.5.5 - 2013-05-07

    PSR-2 implementation (code formatting)
    issue #95 - attempt to fix default timezone to satisfy folks


v1.5.4 - 2013-04-30

    Issue #38 - added support for Cloud Files TEMP_URL feature
    Revised structure around namespaces
    new entrypoint: php-opencloud.php (rackspace.php and openstack.php are still available for backwards compatibility)
    Fixed issue #94
    Added scripts/ver++.sh to increment version patch number


v1.4.1 - 2013-02-21

    Added __DIR__ to all internal require() calls. [Issue #40]
    Added support for Rackspace Cloud DNS (see the quick reference in docs/ for the details)
    Other bug fixes that I can't remember, but which are really good. Really.


v1.4 - do not use

Release had a bug that was immediately fixed in 1.4.1


v1.3 - 2013-02-10

    IMPORTANT: The file extension for include files is now .php (instead of .inc). This came at the request of numerous individuals. However, it means that all of your scripts that use php-opencloud must be edited.
    DataObject::Create() now uses content_type; using the older type parameter is deprecated and will cause an UnknownParameterError exception.
    New global constant RAXSDK_CACERTPEM; if defined, this should be a path to a cacert.pem file that defines the root certificate servers. Defining this provides an extra degree of security in the HTTP transfer operations.
    Fixed a bug (issue #25) wherein the entire DataObject was retrieved in the constructor. This was incorrect; the constructor now does a HEAD request, and you need to use the SaveToFilename() or SaveToString() methods to actually fetch the data from Swift/Cloud Files. If your code relies upon the previous behavior, this might cause it to break.
    Support for Rackspace Cloud Load Balancers
    Fix to remove requirement for Tenant ID in authentication
    Added ExportCredentials() and ImportCredentials() methods to the OpenStack class to permit caching of tokens.
