== Gophercloud -- V0.0.0
The Go ecosystem seems to lack a comprehensive cloud services API (at the time this README was first written). As both Go and cloud services are trending in many businesses, and with Go used increasingly in infrastructure, it seems like an odd omission. To fill this gap, Gophercloud provides a Go binding to OpenStack cloud APIs.  Many providers offer many APIs that are compatible with OpenStack; thus, building your infrastructure automation projects around Openstack is a natural way to avoid vendor lock-in.

WARNING: This library is still in the very early stages of development. Unless you want to contribute, it probably isn't what you want.

=== Getting Started
==== Install the Go Programming Language
Gophercloud provides an Openstack-compatible SDK binding to the Go community.
As such, to either use it or contribute code, you'll need to have Go installed.  Please http://golang.org/doc/install[refer to the Go installation instructions] for detailed steps to install the latest stable release of Go.

==== Familiarize Yourself with Go
To use or contribute to Gophercloud, you'll need some passing familiarity with Go, and how it uses certain concepts.  If you've never worked with Go before, I _strongly_ encourage the interested reader to follow through the excellent online book titled http://golang.org/doc/effective_go.html[Effective Go].

==== Installing Gophercloud in a Workspace

IMPORTANT: *Please* do not just clone this repository expecting it to work like any other Python, Ruby, Java, or C/C++ repo.  Go packages don't work that way!  (You _did_ read Effective Go, right?)

===== Installing Into an Existing Project
Assuming you have a project underway already and its `$GOPATH` environment variable holds the correct path, you can include the Gophercloud package in the usual manner using `go get`:

    go get github.com/rackspace/gophercloud

The remainder of this document, and supporting materials, assumes a correct `$GOPATH` configuration, but further assumes that an environment variable `$GOPHERCLOUD` points to the Gophercloud installation directory as well.  E.g.,

    export GOPHERCLOUD=$GOPATH/src/github.com/rackspace/gophercloud

===== Creating a New Gophercloud Project
If you're just starting out with Go, a convenience script exists which lets you create a new Go workspace preconfigured with Gophercloud for you.

-----------------------------------------------------------------------------------------------------
You can execute the following command to create a brand new Go workspace that is minimally configured for use with Gophercloud.  This should work for any reasonable POSIX-compatible environment.

	source <(curl "https://raw.github.com/rackspace/Gophercloud/master/scripts/create-env.sh")
-----------------------------------------------------------------------------------------------------

This script will not only install the software, but also create a shell script `env.sh` which, when executed, restores both `$GOPATH` and `$GOPHERCLOUD` to their correct values.  The project will be installed in `$HOME/go/gophercloud`.

==== Make Sure Gophercloud Works For You
You should follow these steps to make sure your local installation works as expected.

-----
export SDK_USERNAME=jack_frost                             <1>
export SDK_PROVIDER=santa-telecom                          <2>
SDK_PASSWORD=c0ldnbr33zy $GOPHERCLOUD/scripts/test-all.sh  <3>
-----
<1> Use your cloud provider's API user name.
<2> Use your provider's unique Gophercloud identifier.  This is how Gophercloud will know which API endpoints to use.
<3> Do not export your password unless you don't care that it may reside in memory after the tests have all run.  You might want to remove it from your shell's history file afterwards too.

If everything goes well, you should only see output indicating the Go commands for each of the acceptance tests being run.  Errors can be caused by several factors:

1. Your provider diverges from established Openstack standards.
2. Gophercloud incorrectly implements the relevant Openstack standards.
3. Mistake in setting up the `SDK_*` environment variables above.

If a problem occurs, https://github.com/rackspace/gophercloud/issues[we'd love to hear about it in the issue tracker!]

==== Using Gophercloud
Simply list Gophercloud in the import section of relevant source listings, and you will be able to issue cloud requests through Gophercloud.  For examples, either refer to the detailed SDK documentation, or https://github.com/rackspace/gophercloud/tree/master/acceptance[take a look at the acceptance-level tests in the `acceptance` subdirectory.]

==== Contributing Features or Bug-Fixes
After using Gophercloud for a while, you might find that it lacks some useful feature, or that existing behavior seems buggy.  We welcome contributions from our users for both missing functionality as well as for bug fixes.

After installing Gophercloud and after running its `env.sh` script (only needed once per shell session), you will find the source files in the `$GOPHERCLOUD` directory.  Feel free to open your favorite editor inside that directory and poke around.

Features and bug-fixes *must* appear on their own *feature branches*, even if you fork the Gophercloud repository.  The name of the branch should be fairly descriptive, but try to avoid verbosity for verbosity's sake.  Examples of good feature branch names include:

.........................
script-environment-setup 
server-creation
issue-43-memory-leak-fix
.........................

Some examples of not-so-good branch names include:

.........................
cloud-server-api-server-creation-endpoint-support   <1>
tk                                                  <2>
anything/with/slashes                               <3>
.........................
<1>  This branch name is lengthy without delivering much value.
<2>  This branch name is too short to be useful to anyone other than the submitter.
<3>  This branch name exacerbates some Git usability issues, where some commands separate origins from branch names using slashes and others do not.  Thus, using these kinds of branch names increases chances for easily preventable errors.

For example, if you're looking to fix a memory leak that is documented in, just to pick a number, issue 42, you might follow a sequence of commands such as the following:

............................................
cd $GOPHERCLOUD
git checkout working
git checkout -b issue-42-fix-memory-leak
# edit edit edit ...
# commits happen here ...
git push -u origin issue-42-fix-memory-leak
............................................

At this point, you may now switch to the GitHub user interface, and open a pull-request for the feature branch.  This pull request should be descriptive.  Basically, you want to give a small code walkthrough in the pull request summary.  You should be able to answer, at a minimum, four basic questions, as appropriate for the nature of the patch:

1.  What is the problem?
2.  Why is it a problem?
3.  What is your solution?
4.  How does your solution actually work?

Here's a made-up example:

......................................................................
Fix memory leak detailed in issue #42.

The Rackspace provider interface tended to leak memory every fifth
Saturday of February.  Over the course of several decades, we find
we run out of memory.  Killing and restarting the process periodically
restores service, but is a burden on the ops team.  This PR fixes this
bug permanently.

The barProvider structure found in
provider/barisp.go defines a FooSet as a slice, as seen on line 314.
Per services/auth/keystone2.go line 628, Keystone authentication
only ever uses the first three	elements of this FooSet.  Line 42 shows
where FooSet is initialized to an empty slice, but on line 512, we see
a function that appends to this slice unconditionally.

I'm not sure where the logic exists to determine where this function is
called; so, I've adjusted the provider/barisp.go file to truncate this
FooSet to only three items, maximum on behalf of the caller.  This seems
to solve the problem in my test cases.  See included tests.
......................................................................

Obviously, please use common sense!  In situations where these questions do not apply, please don't make up filler information.

NOTE: All bug-fix PRs **MUST** reference at least one open issue.  New feature PRs **SHOULD** reference at least one open issue.  This convention helps track *why* certain code is written the way it is, and maintains historical context.  Lengthy design discussions should be moved to the https://groups.google.com/forum/#!forum/gophercloud-dev[gophercloud-dev mailing list] if they occur; links to appropriate discussions should be made in the issue, again to maintain context.

TIP: You may elide answers to the questions above if the answers already appear in the referenced PR(s), issues, or mailing list discussions.  We care that the answers exist and may be easily found, not so much about *where* the answers may be found.

==== Master Branch vs. Working Branch

Many projects will happily let you create a feature branch off the master branch.  However, Go environments place special significance on master branches of packages.  Because the `go get` command *is not* intended to perform complete package management tasks, but merely serve as a convenience for establishing your Go work environment, it will always fetch from the master branch of any repository you specify.  *Therefore, the master branch MUST always represent a customer-installable package.*  Not only that, but interface changes **must** be backward compatible at all times.

To facilitate development efforts, then, we maintain a *working* branch.  New features and bug fixes merge into the `working` branch, where it remains staged for some future release date.  Ideally, every push to github and every merge to `working` should kick off a batch of tests to validate the product still works.  Assuming that `working` tests all pass, *and* your features or bug-fixes are both code- and feature-complete, then and only then should `working` be merged into `master`.
