diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..859a7a2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +vendor/ +dist/ +.envrc +.idea/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2744858 --- /dev/null +++ b/LICENSE @@ -0,0 +1,191 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2014 Docker, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fff16ca --- /dev/null +++ b/Makefile @@ -0,0 +1,105 @@ +# golang-client Makefile +# Follows the interface defined in the Golang CTI proposed +# in https://review.openstack.org/410355 + +#REPO_VERSION?=$(shell git describe --tags) + +GIT_HOST = git.openstack.org + +PWD := $(shell pwd) +BASE_DIR := $(shell basename $(PWD)) +# Keep an existing GOPATH, make a private one if it is undefined +GOPATH_DEFAULT := $(PWD)/.go +export GOPATH ?= $(GOPATH_DEFAULT) +PKG := $(shell awk '/^package: / { print $$2 }' glide.yaml) +DEST := $(GOPATH)/src/$(GIT_HOST)/openstack/$(BASE_DIR) +DEST := $(GOPATH)/src/$(PKG) + +# CTI targets + +depend: work + cd $(DEST) && glide install + +depend-update: work + cd $(DEST) && glide update + +build: + cd $(DEST) && go build + +test: unit functional + +unit: depend + cd $(DEST) && go test -tags=unit $(shell glide novendor) + +functional: + @echo "$@ not yet implemented" + +fmt: work + cd $(DEST) && CGO_ENABLED=0 go fmt ./... + +lint: + @echo "$@ not yet implemented" + +cover: + @echo "$@ not yet implemented" + +docs: + @echo "$@ not yet implemented" + +godoc: + @echo "$@ not yet implemented" + +releasenotes: + @echo "Reno not yet implemented for this repo" + +translation: + @echo "$@ not yet implemented" + +# Do the work here + +# Set up the development environment +env: + @echo "PWD: $(PWD)" + @echo "BASE_DIR: $(BASE_DIR)" + @echo "GOPATH: $(GOPATH)" + @echo "GOROOT: $(GOROOT)" + @echo "DEST: $(DEST)" + @echo "PKG: $(PKG)" + +# Get our dev/test dependencies in place +bootstrap: + tools/test-setup.sh + +work: $(GOPATH) $(DEST) + +$(GOPATH): + mkdir -p $(GOPATH) + +$(DEST): $(GOPATH) + mkdir -p $(shell dirname $(DEST)) + ln -s $(PWD) $(DEST) + +.bindep: + virtualenv .bindep + .bindep/bin/pip install bindep + +bindep: .bindep + @.bindep/bin/bindep -b -f bindep.txt || true + +install-distro-packages: + tools/install-distro-packages.sh + +clean: + rm -rf .bindep docker-machine-openstack + +realclean: clean + rm -rf vendor + if [ "$(GOPATH)" = "$(GOPATH_DEFAULT)" ]; then \ + rm -rf $(GOPATH); \ + fi + +shell: work + cd $(DEST) && $(SHELL) -i + +.PHONY: bindep build clean cover depend docs fmt functional lint realclean \ + relnotes test translation diff --git a/drivers/openstack/client.go b/driver/client.go similarity index 99% rename from drivers/openstack/client.go rename to driver/client.go index 0bf32ca..9e67165 100644 --- a/drivers/openstack/client.go +++ b/driver/client.go @@ -400,7 +400,7 @@ func (c *GenericClient) getNovaNetworkFloatingIPs(d *Driver) ([]FloatingIP, erro ips := []FloatingIP{} err := pager.EachPage(func(page pagination.Page) (continue_paging bool, err error) { continue_paging, err = true, nil - ipListing, err := compute_ips.ExtractFloatingIPs(page) + ipListing, _ := compute_ips.ExtractFloatingIPs(page) for _, ip := range ipListing { if ip.InstanceID == "" && ip.Pool == d.FloatingIpPool { diff --git a/drivers/openstack/openstack.go b/driver/openstack.go similarity index 100% rename from drivers/openstack/openstack.go rename to driver/openstack.go diff --git a/drivers/openstack/openstack_test.go b/driver/openstack_test.go similarity index 100% rename from drivers/openstack/openstack_test.go rename to driver/openstack_test.go diff --git a/glide.lock b/glide.lock new file mode 100644 index 0000000..52ffd8b --- /dev/null +++ b/glide.lock @@ -0,0 +1,64 @@ +hash: 2ae414367804198c51ad47534bc4a00c8b68b2eddb850ffcfdf5f3a112b68b65 +updated: 2017-03-16T16:09:29.619642963-04:00 +imports: +- name: github.com/docker/docker + version: a8a31eff10544860d2188dddabdee4d727545796 + subpackages: + - pkg/term +- name: github.com/docker/machine + version: 0f08d3c510bc8c2a2c087cabd6614d8776ca8687 + subpackages: + - libmachine/drivers + - libmachine/drivers/plugin + - libmachine/drivers/plugin/localbinary + - libmachine/drivers/rpc + - libmachine/log + - libmachine/mcnflag + - libmachine/mcnutils + - libmachine/ssh + - libmachine/state + - libmachine/version + - version +- name: github.com/mitchellh/mapstructure + version: 740c764bc6149d3f1806231418adb9f52c11bcbf +- name: github.com/rackspace/gophercloud + version: ce0f487f6747ab43c4e4404722df25349385bebd + subpackages: + - openstack + - openstack/compute/v2/extensions/floatingip + - openstack/compute/v2/extensions/keypairs + - openstack/compute/v2/extensions/startstop + - openstack/compute/v2/flavors + - openstack/compute/v2/images + - openstack/compute/v2/servers + - openstack/identity/v2/tenants + - openstack/identity/v2/tokens + - openstack/identity/v3/tokens + - openstack/networking/v2/extensions/layer3/floatingips + - openstack/networking/v2/networks + - openstack/networking/v2/ports + - openstack/utils + - pagination + - rackspace + - rackspace/identity/v2/tokens + - testhelper + - testhelper/client +- name: github.com/stretchr/testify + version: 4d4bfba8f1d1027c4fdbe371823030df51419987 + subpackages: + - assert +- name: golang.org/x/crypto + version: beef0f4390813b96e8e68fd78570396d0f4751fc + subpackages: + - curve25519 + - ssh + - ssh/terminal +testImports: +- name: github.com/davecgh/go-spew + version: 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d + subpackages: + - spew +- name: github.com/pmezard/go-difflib + version: 792786c7400a136282c1664665ae0a8db921c6c2 + subpackages: + - difflib diff --git a/glide.yaml b/glide.yaml new file mode 100644 index 0000000..48aba72 --- /dev/null +++ b/glide.yaml @@ -0,0 +1,4 @@ +package: git.openstack.org/openstack/docker-machine-openstack +import: +- package: github.com/docker/machine +- package: github.com/stretchr/testify \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..8f9a78c --- /dev/null +++ b/main.go @@ -0,0 +1,10 @@ +package main + +import ( + "git.openstack.org/openstack/docker-machine-openstack/driver" + "github.com/docker/machine/libmachine/drivers/plugin" +) + +func main() { + plugin.RegisterDriver(openstack.NewDriver("default", "path")) +} diff --git a/tools/install-distro-packages.sh b/tools/install-distro-packages.sh new file mode 100755 index 0000000..ee6e032 --- /dev/null +++ b/tools/install-distro-packages.sh @@ -0,0 +1,40 @@ +#!/bin/bash -xe + +# Local version to install bindep packages +# Suitable for use for development + +function is_fedora { + [ -f /usr/bin/yum ] && cat /etc/*release | grep -q -e "Fedora" +} + +PACKAGES="" +if ! which virtualenv; then + PACKAGES="$PACKAGES virtualenv" +fi +if ! which make; then + PACKAGES="$PACKAGES make" +fi +if [[ -n $PACKAGES ]]; then + sudo apt-get -q --assume-yes install virtualenv +fi + +# Check for bindep +if ! which bindep; then + make bindep +fi + +PACKAGES=$(make bindep || true) + +# inspired from project-config install-distro-packages.sh +if apt-get -v >/dev/null 2>&1 ; then + sudo apt-get -qq update + sudo PATH=/usr/sbin:/sbin:$PATH DEBIAN_FRONTEND=noninteractive \ + apt-get -q --option "Dpkg::Options::=--force-confold" \ + --assume-yes install $PACKAGES +elif emerge --version >/dev/null 2>&1 ; then + sudo emerge -uDNq --jobs=4 @world + sudo PATH=/usr/sbin:/sbin:$PATH emerge -q --jobs=4 $PACKAGES +else + is_fedora && YUM=dnf || YUM=yum + sudo PATH=/usr/sbin:/sbin:$PATH $YUM install -y $PACKAGES +fi diff --git a/tools/test-setup.sh b/tools/test-setup.sh new file mode 100755 index 0000000..4ae7853 --- /dev/null +++ b/tools/test-setup.sh @@ -0,0 +1,54 @@ +#!/bin/bash -xe +# test-setup.sh - Install required stuffs +# Used in both CI jobs and locally +# +# Install the following tools: +# * glide + +# Get OS +case $(uname -s) in + Darwin) + OS=darwin + ;; + Linux) + if LSB_RELEASE=$(which lsb_release); then + OS=$($LSB_RELEASE -s -c) + else + # No lsb-release, trya hack or two + if which dpkg 1>/dev/null; then + OS=debian + elif which yum 1>/dev/null || which dnf 1>/dev/null; then + OS=redhat + else + echo "Linux distro not yet supported" + exit 1 + fi + fi + ;; + *) + echo "Unsupported OS" + exit 1 + ;; +esac + +case $OS in + darwin) + if which brew 1>/dev/null; then + if ! which glide 1>/dev/null; then + brew install glide + fi + else + echo "Homebrew not found, install Glide from source?" + fi + ;; + xenial) + APT_GET="DEBIAN_FRONTEND=noninteractive \ + apt-get -q --option "Dpkg::Options::=--force-confold" \ + --assume-yes" + if ! which add-apt-repository 1>/dev/null; then + sudo $APT_GET install software-properties-common + fi + sudo add-apt-repository --yes ppa:masterminds/glide && sudo apt-get update + sudo $APT_GET install glide + ;; +esac