├── .gitignore ├── .goreleaser.yml ├── .travis.yml ├── LICENSE ├── README.md ├── examples └── virtualbox │ └── virtualbox.tf ├── main.go ├── provider ├── provider.go ├── resource.go ├── resource_create.go ├── resource_delete.go ├── resource_exists.go ├── resource_read.go ├── resource_update.go └── utils.go └── vendor └── vendor.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.dll 4 | *.so 5 | *.dylib 6 | terraform-provider-dockermachine 7 | 8 | # Test binary, build with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 15 | .glide/ 16 | 17 | # Vendor dependencies folder 18 | vendor/*/ 19 | 20 | # Dist folder 21 | dist/ 22 | 23 | # Miscellanea 24 | .DS_Store 25 | 26 | # Terraform 27 | .terraform 28 | -------------------------------------------------------------------------------- /.goreleaser.yml: -------------------------------------------------------------------------------- 1 | build: 2 | binary: terraform-provider-dockermachine 3 | goos: 4 | - darwin 5 | - linux 6 | - windows 7 | goarch: 8 | - amd64 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | go: 3 | - 1.8.x 4 | install: 5 | - go get -d github.com/kardianos/govendor 6 | - (cd $GOPATH/src/github.com/kardianos/govendor && git checkout v1.0.8 && go install) 7 | - govendor sync 8 | script: go test $(go list ./... 2>/dev/null | grep -v /vendor/) 9 | after_success: test -n "$TRAVIS_TAG" && curl -s https://raw.githubusercontent.com/goreleaser/get/master/latest | bash 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | Copyright 2017 Giacomo Cariello 179 | 180 | Licensed under the Apache License, Version 2.0 (the "License"); 181 | you may not use this file except in compliance with the License. 182 | You may obtain a copy of the License at 183 | 184 | http://www.apache.org/licenses/LICENSE-2.0 185 | 186 | Unless required by applicable law or agreed to in writing, software 187 | distributed under the License is distributed on an "AS IS" BASIS, 188 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 189 | See the License for the specific language governing permissions and 190 | limitations under the License. 191 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # terraform-provider-dockermachine 2 | Docker machine provider for Terraform 3 | 4 | [![Go Report Card](https://goreportcard.com/badge/github.com/gstruct/terraform-provider-dockermachine)](https://goreportcard.com/report/github.com/gstruct/terraform-provider-dockermachine) [![Build Status](https://travis-ci.org/gstruct/terraform-provider-dockermachine.svg?branch=master)](https://travis-ci.org/gstruct/terraform-provider-dockermachine) 5 | 6 | ## Requisites 7 | 8 | * [Terraform](https://www.terraform.io/) 9 | 10 | **Note**: docker-machine is not required as its library is embedded into the provider. 11 | 12 | ## Install 13 | ``` 14 | $ go get github.com/gstruct/terraform-provider-dockermachine 15 | ``` 16 | 17 | ## Usage 18 | 19 | This provider makes available to Terraform all the docker-machine drivers as resources named "dockermachine\_\". 20 | All the creation flags of each driver (common or specific) are available as attributes of the resource, with dash characters ("-") replaced by underlines ("_"). 21 | Furthermore, the following computed attributes are available: 22 | 23 | * **address**: IP address of the docker machine 24 | * **docker\_url**: URL of the docker daemon 25 | * **docker\_version**: version of the docker daemon 26 | * **ssh\_hostname**: SSH hostname 27 | * **ssh\_keypath**: SSH private key path 28 | * **ssh\_port**: SSH port 29 | * **ssh\_username**: SSH username 30 | 31 | Finally the state of the machine can be set using the attribute "state", either "running" or "stopped". Upon refresh, state will contain the actual state of the machine, lowercased. 32 | 33 | Currently, any change to resource attributes, except for the "state" attribute, will trigger a destroy-create cycle. 34 | 35 | The following parameters can be set at provider level: 36 | 37 | * **debug**: boolean, enables docker-machine debug output in Terraform log 38 | * **storage_path**: set default storage path for docker-machine 39 | * **certs_directory**: set default path for docker-machine certs directory 40 | 41 | ### Example 42 | 43 | ``` 44 | resource "dockermachine_virtualbox" "node" { 45 | count = 2 46 | name = "${format("node-%02d", count.index+1)}" 47 | virtualbox_cpu_count = 2 48 | virtualbox_memory = 1024 49 | 50 | provisioner "remote-exec" { 51 | inline = [ 52 | "touch /tmp/this_is_a_test", 53 | ] 54 | connection { 55 | type = "ssh" 56 | host = "${self.ssh_hostname}" 57 | port = "${self.ssh_port}" 58 | user = "${self.ssh_username}" 59 | private_key = "${file("${self.ssh_keypath}")}" 60 | } 61 | } 62 | } 63 | ``` 64 | -------------------------------------------------------------------------------- /examples/virtualbox/virtualbox.tf: -------------------------------------------------------------------------------- 1 | 2 | resource "dockermachine_virtualbox" "node" { 3 | count = 2 4 | name = "${format("node-%02d", count.index+1)}" 5 | virtualbox_cpu_count = 2 6 | virtualbox_memory = 1024 7 | 8 | provisioner "remote-exec" { 9 | inline = [ 10 | "touch /tmp/this_is_a_test", 11 | ] 12 | connection { 13 | type = "ssh" 14 | host = "${self.ssh_hostname}" 15 | port = "${self.ssh_port}" 16 | user = "${self.ssh_username}" 17 | private_key = "${file("${self.ssh_keypath}")}" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | "os" 7 | 8 | "github.com/docker/machine/drivers/amazonec2" 9 | "github.com/docker/machine/drivers/azure" 10 | "github.com/docker/machine/drivers/digitalocean" 11 | "github.com/docker/machine/drivers/exoscale" 12 | "github.com/docker/machine/drivers/generic" 13 | "github.com/docker/machine/drivers/google" 14 | "github.com/docker/machine/drivers/hyperv" 15 | "github.com/docker/machine/drivers/none" 16 | "github.com/docker/machine/drivers/openstack" 17 | "github.com/docker/machine/drivers/rackspace" 18 | "github.com/docker/machine/drivers/softlayer" 19 | "github.com/docker/machine/drivers/virtualbox" 20 | "github.com/docker/machine/drivers/vmwarefusion" 21 | "github.com/docker/machine/drivers/vmwarevcloudair" 22 | "github.com/docker/machine/drivers/vmwarevsphere" 23 | "github.com/docker/machine/libmachine/drivers/plugin" 24 | "github.com/docker/machine/libmachine/drivers/plugin/localbinary" 25 | 26 | terraform "github.com/hashicorp/terraform/plugin" 27 | 28 | "github.com/gstruct/terraform-provider-dockermachine/provider" 29 | ) 30 | 31 | func main() { 32 | log.SetFlags(log.Lshortfile) 33 | log.SetPrefix(fmt.Sprintf("pid-%d-", os.Getpid())) 34 | if os.Getenv(localbinary.PluginEnvKey) == localbinary.PluginEnvVal { 35 | driverName := os.Getenv(localbinary.PluginEnvDriverName) 36 | runDriver(driverName) 37 | return 38 | } 39 | localbinary.CurrentBinaryIsDockerMachine = true 40 | 41 | terraform.Serve(&terraform.ServeOpts{ 42 | ProviderFunc: provider.Provider, 43 | }) 44 | } 45 | 46 | func runDriver(driverName string) { 47 | switch driverName { 48 | case "amazonec2": 49 | plugin.RegisterDriver(amazonec2.NewDriver("", "")) 50 | case "azure": 51 | plugin.RegisterDriver(azure.NewDriver("", "")) 52 | case "digitalocean": 53 | plugin.RegisterDriver(digitalocean.NewDriver("", "")) 54 | case "exoscale": 55 | plugin.RegisterDriver(exoscale.NewDriver("", "")) 56 | case "generic": 57 | plugin.RegisterDriver(generic.NewDriver("", "")) 58 | case "google": 59 | plugin.RegisterDriver(google.NewDriver("", "")) 60 | case "hyperv": 61 | plugin.RegisterDriver(hyperv.NewDriver("", "")) 62 | case "none": 63 | plugin.RegisterDriver(none.NewDriver("", "")) 64 | case "openstack": 65 | plugin.RegisterDriver(openstack.NewDriver("", "")) 66 | case "rackspace": 67 | plugin.RegisterDriver(rackspace.NewDriver("", "")) 68 | case "softlayer": 69 | plugin.RegisterDriver(softlayer.NewDriver("", "")) 70 | case "virtualbox": 71 | plugin.RegisterDriver(virtualbox.NewDriver("", "")) 72 | case "vmwarefusion": 73 | plugin.RegisterDriver(vmwarefusion.NewDriver("", "")) 74 | case "vmwarevcloudair": 75 | plugin.RegisterDriver(vmwarevcloudair.NewDriver("", "")) 76 | case "vmwarevsphere": 77 | plugin.RegisterDriver(vmwarevsphere.NewDriver("", "")) 78 | default: 79 | fmt.Fprintf(os.Stderr, "Unsupported driver: %s\n", driverName) 80 | os.Exit(1) 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /provider/provider.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "fmt" 5 | 6 | "github.com/hashicorp/terraform/helper/schema" 7 | "github.com/hashicorp/terraform/terraform" 8 | 9 | "github.com/docker/machine/commands/mcndirs" 10 | "github.com/docker/machine/libmachine" 11 | "github.com/docker/machine/libmachine/drivers/plugin/localbinary" 12 | "github.com/docker/machine/libmachine/log" 13 | ) 14 | 15 | func Provider() terraform.ResourceProvider { 16 | resourceMap := make(map[string]*schema.Resource) 17 | for _, str := range localbinary.CoreDrivers { 18 | resourceMap[fmt.Sprintf("dockermachine_%s", str)] = resource(str) 19 | } 20 | //resourceMap["dockermachine_external"] = resourceExternal() 21 | return &schema.Provider{ 22 | ConfigureFunc: providerConfigure, 23 | ResourcesMap: resourceMap, 24 | Schema: map[string]*schema.Schema{ 25 | "debug": { 26 | Type: schema.TypeBool, 27 | Optional: true, 28 | Default: false, 29 | Description: "docker-machine debug output", 30 | }, 31 | "storage_path": { 32 | Type: schema.TypeString, 33 | Optional: true, 34 | DefaultFunc: storagePathDefault, 35 | Description: "docker-machine storage path", 36 | }, 37 | "certs_directory": { 38 | Type: schema.TypeString, 39 | Optional: true, 40 | DefaultFunc: certsDirDefault, 41 | Description: "docker-machine certificates directory", 42 | }, 43 | }, 44 | } 45 | } 46 | 47 | func storagePathDefault() (interface{}, error) { 48 | return mcndirs.GetBaseDir(), nil 49 | } 50 | 51 | func certsDirDefault() (interface{}, error) { 52 | return mcndirs.GetMachineCertDir(), nil 53 | } 54 | 55 | func providerConfigure(d *schema.ResourceData) (interface{}, error) { 56 | log.SetDebug(d.Get("debug").(bool)) 57 | return libmachine.NewClient(d.Get("storage_path").(string), d.Get("certs_directory").(string)), nil 58 | } 59 | -------------------------------------------------------------------------------- /provider/resource.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "strings" 5 | 6 | "github.com/docker/machine/libmachine/drivers" 7 | "github.com/docker/machine/libmachine/drivers/rpc" 8 | "github.com/docker/machine/libmachine/mcnflag" 9 | 10 | "github.com/docker/machine/drivers/amazonec2" 11 | "github.com/docker/machine/drivers/azure" 12 | "github.com/docker/machine/drivers/digitalocean" 13 | "github.com/docker/machine/drivers/exoscale" 14 | "github.com/docker/machine/drivers/generic" 15 | "github.com/docker/machine/drivers/google" 16 | "github.com/docker/machine/drivers/hyperv" 17 | "github.com/docker/machine/drivers/none" 18 | "github.com/docker/machine/drivers/openstack" 19 | "github.com/docker/machine/drivers/rackspace" 20 | "github.com/docker/machine/drivers/softlayer" 21 | "github.com/docker/machine/drivers/virtualbox" 22 | "github.com/docker/machine/drivers/vmwarefusion" 23 | "github.com/docker/machine/drivers/vmwarevcloudair" 24 | "github.com/docker/machine/drivers/vmwarevsphere" 25 | 26 | "github.com/hashicorp/terraform/helper/schema" 27 | "github.com/hashicorp/terraform/helper/validation" 28 | ) 29 | 30 | func resource(driverName string) *schema.Resource { 31 | drv := getDriver(driverName, "", "") 32 | resourceSchema := map[string]*schema.Schema{ 33 | "name": { 34 | Type: schema.TypeString, 35 | Required: true, 36 | ForceNew: true, 37 | }, 38 | "certs_directory": { 39 | Type: schema.TypeString, 40 | Computed: true, 41 | ForceNew: true, 42 | }, 43 | "tls_ca_cert": { 44 | Type: schema.TypeString, 45 | Optional: true, 46 | ForceNew: true, 47 | }, 48 | "tls_ca_key": { 49 | Type: schema.TypeString, 50 | Optional: true, 51 | ForceNew: true, 52 | }, 53 | "tls_client_cert": { 54 | Type: schema.TypeString, 55 | Optional: true, 56 | ForceNew: true, 57 | }, 58 | "tls_client_key": { 59 | Type: schema.TypeString, 60 | Optional: true, 61 | ForceNew: true, 62 | }, 63 | "tls_server_cert": { 64 | Type: schema.TypeString, 65 | Computed: true, 66 | }, 67 | "tls_server_key": { 68 | Type: schema.TypeString, 69 | Computed: true, 70 | }, 71 | "storage_path": { 72 | Type: schema.TypeString, 73 | Optional: true, 74 | ForceNew: true, 75 | }, 76 | "storage_path_computed": { 77 | Type: schema.TypeString, 78 | Computed: true, 79 | }, 80 | "tls_san": { 81 | Type: schema.TypeList, 82 | Optional: true, 83 | Elem: &schema.Schema{ 84 | Type: schema.TypeString, 85 | }, 86 | ForceNew: true, 87 | }, 88 | "engine_opt": { 89 | Type: schema.TypeList, 90 | Optional: true, 91 | Elem: &schema.Schema{ 92 | Type: schema.TypeString, 93 | }, 94 | ForceNew: true, 95 | }, 96 | "engine_env": { 97 | Type: schema.TypeList, 98 | Optional: true, 99 | Elem: &schema.Schema{ 100 | Type: schema.TypeString, 101 | }, 102 | ForceNew: true, 103 | }, 104 | "engine_insecure_registry": { 105 | Type: schema.TypeList, 106 | Optional: true, 107 | Elem: &schema.Schema{ 108 | Type: schema.TypeString, 109 | }, 110 | ForceNew: true, 111 | }, 112 | "engine_label": { 113 | Type: schema.TypeList, 114 | Optional: true, 115 | Elem: &schema.Schema{ 116 | Type: schema.TypeString, 117 | }, 118 | ForceNew: true, 119 | }, 120 | "engine_registry_mirror": { 121 | Type: schema.TypeList, 122 | Optional: true, 123 | Elem: &schema.Schema{ 124 | Type: schema.TypeString, 125 | }, 126 | ForceNew: true, 127 | }, 128 | "engine_storage_driver": { 129 | Type: schema.TypeString, 130 | Optional: true, 131 | ForceNew: true, 132 | }, 133 | "engine_install_url": { 134 | Type: schema.TypeString, 135 | Optional: true, 136 | ForceNew: true, 137 | }, 138 | "swarm": { 139 | Type: schema.TypeBool, 140 | Optional: true, 141 | Default: false, 142 | ForceNew: true, 143 | }, 144 | "swarm_master": { 145 | Type: schema.TypeBool, 146 | Optional: true, 147 | Default: false, 148 | ForceNew: true, 149 | }, 150 | "swarm_image": { 151 | Type: schema.TypeString, 152 | Optional: true, 153 | ForceNew: true, 154 | }, 155 | "swarm_discovery": { 156 | Type: schema.TypeString, 157 | Optional: true, 158 | ForceNew: true, 159 | }, 160 | "swarm_addr": { 161 | Type: schema.TypeString, 162 | Optional: true, 163 | ForceNew: true, 164 | }, 165 | "swarm_host": { 166 | Type: schema.TypeString, 167 | Optional: true, 168 | ForceNew: true, 169 | }, 170 | "swarm_strategy": { 171 | Type: schema.TypeString, 172 | Optional: true, 173 | ForceNew: true, 174 | }, 175 | "swarm_opt": { 176 | Type: schema.TypeList, 177 | Optional: true, 178 | Elem: &schema.Schema{ 179 | Type: schema.TypeString, 180 | }, 181 | ForceNew: true, 182 | }, 183 | "swarm_join_opt": { 184 | Type: schema.TypeList, 185 | Optional: true, 186 | Elem: &schema.Schema{ 187 | Type: schema.TypeString, 188 | }, 189 | ForceNew: true, 190 | }, 191 | "swarm_experimental": { 192 | Type: schema.TypeBool, 193 | Optional: true, 194 | Default: false, 195 | ForceNew: true, 196 | }, 197 | "ssh_hostname": { 198 | Type: schema.TypeString, 199 | Computed: true, 200 | }, 201 | "ssh_port": { 202 | Type: schema.TypeInt, 203 | Computed: true, 204 | }, 205 | "ssh_username": { 206 | Type: schema.TypeString, 207 | Computed: true, 208 | }, 209 | "ssh_keypath": { 210 | Type: schema.TypeString, 211 | Computed: true, 212 | }, 213 | "address": { 214 | Type: schema.TypeString, 215 | Computed: true, 216 | }, 217 | "docker_url": { 218 | Type: schema.TypeString, 219 | Computed: true, 220 | }, 221 | "docker_version": { 222 | Type: schema.TypeString, 223 | Computed: true, 224 | }, 225 | "state": { 226 | Type: schema.TypeString, 227 | Optional: true, 228 | Default: "running", 229 | ValidateFunc: validation.StringInSlice([]string{"running", "stopped"}, false), 230 | }, 231 | } 232 | for _, flag := range drv.GetCreateFlags() { 233 | flagName := strings.Replace(flag.String(), "-", "_", -1) 234 | switch f := flag.(type) { 235 | case mcnflag.StringFlag: 236 | resourceSchema[flagName] = &schema.Schema{ 237 | Type: schema.TypeString, 238 | Optional: true, 239 | ForceNew: true, 240 | Default: f.Value, 241 | } 242 | case mcnflag.StringSliceFlag: 243 | resourceSchema[flagName] = &schema.Schema{ 244 | Type: schema.TypeList, 245 | Optional: true, 246 | ForceNew: true, 247 | Elem: &schema.Schema{ 248 | Type: schema.TypeString, 249 | }, 250 | } 251 | case mcnflag.IntFlag: 252 | resourceSchema[flagName] = &schema.Schema{ 253 | Type: schema.TypeInt, 254 | Optional: true, 255 | ForceNew: true, 256 | Default: f.Value, 257 | } 258 | case mcnflag.BoolFlag: 259 | resourceSchema[flagName] = &schema.Schema{ 260 | Type: schema.TypeBool, 261 | Optional: true, 262 | ForceNew: true, 263 | } 264 | } 265 | } 266 | return &schema.Resource{ 267 | Schema: resourceSchema, 268 | Exists: resourceExists(drv.DriverName()), 269 | Create: resourceCreate(drv.DriverName()), 270 | Read: resourceRead(drv.DriverName()), 271 | Update: resourceUpdate(drv.DriverName()), 272 | Delete: resourceDelete(drv.DriverName()), 273 | } 274 | } 275 | 276 | func getDriver(driverName, machineName, storePath string) drivers.Driver { 277 | switch driverName { 278 | case "amazonec2": 279 | return amazonec2.NewDriver(machineName, storePath) 280 | case "azure": 281 | return azure.NewDriver(machineName, storePath) 282 | case "digitalocean": 283 | return digitalocean.NewDriver(machineName, storePath) 284 | case "exoscale": 285 | return exoscale.NewDriver(machineName, storePath) 286 | case "generic": 287 | return generic.NewDriver(machineName, storePath) 288 | case "google": 289 | return google.NewDriver(machineName, storePath) 290 | case "hyperv": 291 | return hyperv.NewDriver(machineName, storePath) 292 | case "none": 293 | return none.NewDriver(machineName, storePath) 294 | case "openstack": 295 | return openstack.NewDriver(machineName, storePath) 296 | case "rackspace": 297 | return rackspace.NewDriver(machineName, storePath) 298 | case "softlayer": 299 | return softlayer.NewDriver(machineName, storePath) 300 | case "virtualbox": 301 | return virtualbox.NewDriver(machineName, storePath) 302 | case "vmwarefusion": 303 | return vmwarefusion.NewDriver(machineName, storePath) 304 | case "vmwarevcloudair": 305 | return vmwarevcloudair.NewDriver(machineName, storePath) 306 | case "vmwarevsphere": 307 | return vmwarevsphere.NewDriver(machineName, storePath) 308 | default: 309 | return nil 310 | } 311 | } 312 | 313 | func getDriverOpts(d *schema.ResourceData, mcnflags []mcnflag.Flag) drivers.DriverOptions { 314 | driverOpts := rpcdriver.RPCFlags{ 315 | Values: make(map[string]interface{}), 316 | } 317 | 318 | for _, f := range mcnflags { 319 | driverOpts.Values[f.String()] = f.Default() 320 | 321 | if f.Default() == nil { 322 | driverOpts.Values[f.String()] = false 323 | } 324 | 325 | schemaOpt := strings.Replace(f.String(), "-", "_", -1) 326 | switch f.(type) { 327 | case *mcnflag.StringFlag: 328 | driverOpts.Values[f.String()] = d.Get(schemaOpt).(string) 329 | case *mcnflag.StringSliceFlag: 330 | var slice []string 331 | for _, s := range d.Get(schemaOpt).([]interface{}) { 332 | slice = append(slice, s.(string)) 333 | } 334 | driverOpts.Values[f.String()] = ss2is(slice) 335 | case *mcnflag.IntFlag: 336 | driverOpts.Values[f.String()] = d.Get(schemaOpt).(int) 337 | case *mcnflag.BoolFlag: 338 | driverOpts.Values[f.String()] = d.Get(schemaOpt).(bool) 339 | } 340 | } 341 | 342 | return driverOpts 343 | } 344 | -------------------------------------------------------------------------------- /provider/resource_create.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "path/filepath" 7 | "strings" 8 | "time" 9 | 10 | "github.com/docker/machine/libmachine" 11 | "github.com/docker/machine/libmachine/auth" 12 | "github.com/docker/machine/libmachine/crashreport" 13 | "github.com/docker/machine/libmachine/engine" 14 | "github.com/docker/machine/libmachine/host" 15 | "github.com/docker/machine/libmachine/mcnerror" 16 | "github.com/docker/machine/libmachine/state" 17 | "github.com/docker/machine/libmachine/swarm" 18 | 19 | "github.com/hashicorp/terraform/helper/schema" 20 | ) 21 | 22 | func resourceCreate(driverName string) func(*schema.ResourceData, interface{}) error { 23 | return func(d *schema.ResourceData, meta interface{}) error { 24 | client := meta.(*libmachine.Client) 25 | name := d.Get("name").(string) 26 | if !host.ValidateHostName(name) { 27 | return fmt.Errorf("Error creating machine: %s", mcnerror.ErrInvalidHostname) 28 | } 29 | drv := getDriver(driverName, name, client.Path) 30 | data, err := json.Marshal(drv) 31 | 32 | h, err := client.NewHost(drv.DriverName(), data) 33 | if err != nil { 34 | return err 35 | } 36 | 37 | storagePath := d.Get("storage_path").(string) 38 | if storagePath == "" { 39 | storagePath = filepath.Join(client.Path, "machines", name) 40 | } 41 | d.Set("storage_path_computed", storagePath) 42 | d.Set("tls_server_key", filepath.Join(storagePath, "server-key.pem")) 43 | d.Set("tls_server_cert", filepath.Join(storagePath, "server.pem")) 44 | 45 | certsDirectory := d.Get("certs_directory").(string) 46 | if certsDirectory == "" { 47 | certsDirectory = filepath.Join(client.Path, "certs") 48 | } 49 | 50 | h.HostOptions = &host.Options{ 51 | AuthOptions: &auth.Options{ 52 | CertDir: certsDirectory, 53 | StorePath: storagePath, 54 | ServerCertPath: d.Get("tls_server_cert").(string), 55 | ServerKeyPath: d.Get("tls_server_key").(string), 56 | CaCertPath: tlsPath(d, "tls_ca_cert", certsDirectory, "ca.pem"), 57 | CaPrivateKeyPath: tlsPath(d, "tls_ca_key", certsDirectory, "ca-key.pem"), 58 | ClientCertPath: tlsPath(d, "tls_client_cert", certsDirectory, "cert.pem"), 59 | ClientKeyPath: tlsPath(d, "tls_client_key", certsDirectory, "key.pem"), 60 | ServerCertSANs: is2ss(d.Get("tls_san").([]interface{})), 61 | }, 62 | EngineOptions: &engine.Options{ 63 | ArbitraryFlags: is2ss(d.Get("engine_opt").([]interface{})), 64 | Env: is2ss(d.Get("engine_env").([]interface{})), 65 | InsecureRegistry: is2ss(d.Get("engine_insecure_registry").([]interface{})), 66 | Labels: is2ss(d.Get("engine_label").([]interface{})), 67 | RegistryMirror: is2ss(d.Get("engine_registry_mirror").([]interface{})), 68 | StorageDriver: d.Get("engine_storage_driver").(string), 69 | TLSVerify: true, 70 | InstallURL: d.Get("engine_install_url").(string), 71 | }, 72 | SwarmOptions: &swarm.Options{ 73 | IsSwarm: d.Get("swarm").(bool) || d.Get("swarm_master").(bool), 74 | Image: d.Get("swarm_image").(string), 75 | Agent: d.Get("swarm").(bool), 76 | Master: d.Get("swarm_master").(bool), 77 | Discovery: d.Get("swarm_discovery").(string), 78 | Address: d.Get("swarm_addr").(string), 79 | Host: d.Get("swarm_host").(string), 80 | Strategy: d.Get("swarm_strategy").(string), 81 | ArbitraryFlags: is2ss(d.Get("swarm_opt").([]interface{})), 82 | ArbitraryJoinFlags: is2ss(d.Get("swarm_join_opt").([]interface{})), 83 | IsExperimental: d.Get("swarm_experimental").(bool), 84 | }, 85 | } 86 | 87 | exists, err := client.Exists(h.Name) 88 | if err != nil { 89 | return fmt.Errorf("Error checking if host exists: %s", err) 90 | } 91 | if exists { 92 | return mcnerror.ErrHostAlreadyExists{ 93 | Name: h.Name, 94 | } 95 | } 96 | 97 | driverOpts := getDriverOpts(d, h.Driver.GetCreateFlags()) 98 | 99 | if err := h.Driver.SetConfigFromFlags(driverOpts); err != nil { 100 | return fmt.Errorf("Error setting machine configuration from flags provided: %s", err) 101 | } 102 | 103 | if err := client.Create(h); err != nil { 104 | time.Sleep(2 * time.Second) 105 | 106 | vBoxLog := "" 107 | if h.DriverName == "virtualbox" { 108 | vBoxLog = filepath.Join(client.Path, "machines", h.Name, h.Name, "Logs", "VBox.log") 109 | } 110 | 111 | return crashreport.CrashError{ 112 | Cause: err, 113 | Command: "Create", 114 | Context: "client.performCreate", 115 | DriverName: h.DriverName, 116 | LogFilePath: vBoxLog, 117 | } 118 | } 119 | 120 | if err := client.Save(h); err != nil { 121 | return fmt.Errorf("Error attempting to save store: %s", err) 122 | } 123 | 124 | d.Set("ssh_username", h.Driver.GetSSHUsername()) 125 | d.Set("ssh_keypath", h.Driver.GetSSHKeyPath()) 126 | machineState, err := h.Driver.GetState() 127 | if err != nil { 128 | return fmt.Errorf("Error attempting to retrieve state: %s", err) 129 | } 130 | switch machineState { 131 | case state.Timeout: 132 | return fmt.Errorf("Machine is in timeout state") 133 | case state.Error: 134 | return fmt.Errorf("Machine is in error state") 135 | } 136 | switch d.Get("state").(string) { 137 | case "running": 138 | switch machineState { 139 | case state.Paused, state.Saved, state.Stopped, state.Stopping: 140 | if err = h.Start(); err != nil { 141 | return fmt.Errorf("Error while attempting to start machine: %s", err) 142 | } 143 | } 144 | case "stopped": 145 | switch machineState { 146 | case state.Running, state.Starting: 147 | if err = h.Stop(); err != nil { 148 | return fmt.Errorf("Error while attempting to stop machine: %s", err) 149 | } 150 | } 151 | } 152 | machineState, err = h.Driver.GetState() 153 | if err != nil { 154 | return fmt.Errorf("Error attempting to retrieve state: %s", err) 155 | } 156 | if machineState == state.Running { 157 | sshHostname, err := h.Driver.GetSSHHostname() 158 | if err != nil { 159 | return fmt.Errorf("Error attempting to retrieve ssh hostname: %s", err) 160 | } 161 | d.Set("ssh_hostname", sshHostname) 162 | sshPort, err := h.Driver.GetSSHPort() 163 | if err != nil { 164 | return fmt.Errorf("Error attempting to retrieve ssh port: %s", err) 165 | } 166 | d.Set("ssh_port", sshPort) 167 | address, err := h.Driver.GetIP() 168 | if err != nil { 169 | return fmt.Errorf("Error attempting to retrieve address: %s", err) 170 | } 171 | d.Set("address", address) 172 | dockerUrl, err := h.Driver.GetURL() 173 | if err != nil { 174 | return fmt.Errorf("Error attempting to retrieve docker url: %s", err) 175 | } 176 | d.Set("docker_url", dockerUrl) 177 | dockerVersion, err := h.DockerVersion() 178 | if err != nil { 179 | return fmt.Errorf("Error attempting to retrieve docker version: %s", err) 180 | } 181 | d.Set("docker_version", dockerVersion) 182 | } 183 | d.Set("state", strings.ToLower(machineState.String())) 184 | 185 | d.SetId(name) 186 | 187 | return nil 188 | } 189 | } 190 | 191 | func tlsPath(d *schema.ResourceData, option, directory, defaultValue string) string { 192 | ret := d.Get(option).(string) 193 | if len(ret) > 0 { 194 | return ret 195 | } 196 | return filepath.Join(directory, defaultValue) 197 | } 198 | -------------------------------------------------------------------------------- /provider/resource_delete.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "fmt" 5 | 6 | "github.com/docker/machine/libmachine" 7 | 8 | "github.com/hashicorp/terraform/helper/schema" 9 | ) 10 | 11 | func resourceDelete(driverName string) func(*schema.ResourceData, interface{}) error { 12 | return func(d *schema.ResourceData, meta interface{}) error { 13 | client := meta.(*libmachine.Client) 14 | name := d.Get("name").(string) 15 | var err error 16 | host, err := client.Load(name) 17 | if err != nil { 18 | return err 19 | } 20 | err = host.Driver.Remove() 21 | if err != nil { 22 | return fmt.Errorf("Error removing host %q: %s", name, err) 23 | } 24 | 25 | exist, err := client.Exists(name) 26 | if err != nil { 27 | return fmt.Errorf("Error removing host %q: %s", name, err) 28 | } 29 | if !exist { 30 | return fmt.Errorf("Error removing host %q: host does not exist.", name) 31 | } 32 | return client.Remove(name) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /provider/resource_exists.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "github.com/docker/machine/libmachine" 5 | 6 | "github.com/hashicorp/terraform/helper/schema" 7 | ) 8 | 9 | func resourceExists(driverName string) func(*schema.ResourceData, interface{}) (bool, error) { 10 | return func(d *schema.ResourceData, meta interface{}) (bool, error) { 11 | client := meta.(*libmachine.Client) 12 | name := d.Get("name").(string) 13 | exists, err := client.Exists(name) 14 | if err != nil { 15 | return false, err 16 | } 17 | if !exists { 18 | d.SetId(name) 19 | return false, nil 20 | } 21 | return true, nil 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /provider/resource_read.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | 7 | "github.com/docker/machine/libmachine" 8 | "github.com/docker/machine/libmachine/state" 9 | 10 | "github.com/hashicorp/terraform/helper/schema" 11 | ) 12 | 13 | func resourceRead(driverName string) func(*schema.ResourceData, interface{}) error { 14 | return func(d *schema.ResourceData, meta interface{}) error { 15 | client := meta.(*libmachine.Client) 16 | name := d.Get("name").(string) 17 | var err error 18 | h, err := client.Load(name) 19 | if err != nil { 20 | return err 21 | } 22 | machineState, err := h.Driver.GetState() 23 | if err != nil { 24 | return fmt.Errorf("Error attempting to retrieve state: %s", err) 25 | } 26 | if machineState == state.Running { 27 | sshHostname, err := h.Driver.GetSSHHostname() 28 | if err != nil { 29 | return fmt.Errorf("Error attempting to retrieve ssh hostname: %s", err) 30 | } 31 | d.Set("ssh_hostname", sshHostname) 32 | sshPort, err := h.Driver.GetSSHPort() 33 | if err != nil { 34 | return fmt.Errorf("Error attempting to retrieve ssh port: %s", err) 35 | } 36 | d.Set("ssh_port", sshPort) 37 | address, err := h.Driver.GetIP() 38 | if err != nil { 39 | return fmt.Errorf("Error attempting to retrieve address: %s", err) 40 | } 41 | d.Set("address", address) 42 | dockerUrl, err := h.Driver.GetURL() 43 | if err != nil { 44 | return fmt.Errorf("Error attempting to retrieve docker url: %s", err) 45 | } 46 | d.Set("docker_url", dockerUrl) 47 | dockerVersion, err := h.DockerVersion() 48 | if err != nil { 49 | return fmt.Errorf("Error attempting to retrieve docker version: %s", err) 50 | } 51 | d.Set("docker_version", dockerVersion) 52 | } else { 53 | d.Set("ssh_hostname", nil) 54 | d.Set("ssh_port", nil) 55 | d.Set("address", nil) 56 | d.Set("docker_url", nil) 57 | d.Set("docker_version", nil) 58 | } 59 | d.Set("state", strings.ToLower(machineState.String())) 60 | return nil 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /provider/resource_update.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | 7 | "github.com/docker/machine/libmachine" 8 | "github.com/docker/machine/libmachine/state" 9 | 10 | "github.com/hashicorp/terraform/helper/schema" 11 | ) 12 | 13 | func resourceUpdate(driverName string) func(*schema.ResourceData, interface{}) error { 14 | return func(d *schema.ResourceData, meta interface{}) error { 15 | client := meta.(*libmachine.Client) 16 | name := d.Get("name").(string) 17 | var err error 18 | h, err := client.Load(name) 19 | if err != nil { 20 | return err 21 | } 22 | if d.HasChange("state") { 23 | machineState, err := h.Driver.GetState() 24 | if err != nil { 25 | return fmt.Errorf("Error attempting to retrieve state: %s", err) 26 | } 27 | switch d.Get("state").(string) { 28 | case "running": 29 | switch machineState { 30 | case state.Paused, state.Saved, state.Stopped, state.Stopping: 31 | if err = h.Start(); err != nil { 32 | return fmt.Errorf("Error while attempting to start machine: %s", err) 33 | } 34 | } 35 | case "stopped": 36 | switch machineState { 37 | case state.Running, state.Starting: 38 | if err = h.Stop(); err != nil { 39 | return fmt.Errorf("Error while attempting to stop machine: %s", err) 40 | } 41 | } 42 | } 43 | machineState, err = h.Driver.GetState() 44 | if err != nil { 45 | return fmt.Errorf("Error attempting to retrieve state: %s", err) 46 | } 47 | if machineState == state.Running { 48 | sshHostname, err := h.Driver.GetSSHHostname() 49 | if err != nil { 50 | return fmt.Errorf("Error attempting to retrieve ssh hostname: %s", err) 51 | } 52 | d.Set("ssh_hostname", sshHostname) 53 | sshPort, err := h.Driver.GetSSHPort() 54 | if err != nil { 55 | return fmt.Errorf("Error attempting to retrieve ssh port: %s", err) 56 | } 57 | d.Set("ssh_port", sshPort) 58 | address, err := h.Driver.GetIP() 59 | if err != nil { 60 | return fmt.Errorf("Error attempting to retrieve address: %s", err) 61 | } 62 | d.Set("address", address) 63 | dockerUrl, err := h.Driver.GetURL() 64 | if err != nil { 65 | return fmt.Errorf("Error attempting to retrieve docker url: %s", err) 66 | } 67 | d.Set("docker_url", dockerUrl) 68 | dockerVersion, err := h.DockerVersion() 69 | if err != nil { 70 | return fmt.Errorf("Error attempting to retrieve docker version: %s", err) 71 | } 72 | d.Set("docker_version", dockerVersion) 73 | } else { 74 | d.Set("ssh_hostname", nil) 75 | d.Set("ssh_port", nil) 76 | d.Set("address", nil) 77 | d.Set("docker_url", nil) 78 | d.Set("docker_version", nil) 79 | } 80 | d.Set("state", strings.ToLower(machineState.String())) 81 | } 82 | return nil 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /provider/utils.go: -------------------------------------------------------------------------------- 1 | package provider 2 | 3 | func ss2is(s []string) []interface{} { 4 | ret := make([]interface{}, len(s)) 5 | for i := range s { 6 | ret[i] = s[i] 7 | } 8 | return ret 9 | } 10 | 11 | func is2ss(s []interface{}) []string { 12 | ret := make([]string, len(s)) 13 | for i := range s { 14 | ret[i] = s[i].(string) 15 | } 16 | return ret 17 | } 18 | -------------------------------------------------------------------------------- /vendor/vendor.json: -------------------------------------------------------------------------------- 1 | { 2 | "comment": "", 3 | "ignore": "test", 4 | "package": [ 5 | { 6 | "path": "appengine", 7 | "revision": "" 8 | }, 9 | { 10 | "path": "appengine/urlfetch", 11 | "revision": "" 12 | }, 13 | { 14 | "path": "appengine/user", 15 | "revision": "" 16 | }, 17 | { 18 | "path": "appengine_internal", 19 | "revision": "" 20 | }, 21 | { 22 | "path": "appengine_internal/base", 23 | "revision": "" 24 | }, 25 | { 26 | "path": "code.google.com/p/go.net/html/atom", 27 | "revision": "" 28 | }, 29 | { 30 | "path": "code.google.com/p/go.net/websocket", 31 | "revision": "" 32 | }, 33 | { 34 | "path": "code.google.com/p/gosqlite/sqlite3", 35 | "revision": "" 36 | }, 37 | { 38 | "path": "egoscale", 39 | "revision": "" 40 | }, 41 | { 42 | "checksumSHA1": "FUGZNnK1H+F2T2fkvPLMObsNyEg=", 43 | "path": "github.com/Azure/azure-sdk-for-go", 44 | "revision": "56332fec5b308fbb6615fa1af6117394cdba186d", 45 | "revisionTime": "2018-03-26T23:29:47Z", 46 | "tree": true 47 | }, 48 | { 49 | "checksumSHA1": "EzpLMcezj5wf2hZDs4C9uujtujI=", 50 | "path": "github.com/Azure/go-autorest", 51 | "revision": "d76573ed104b3ed06b95d47ec1b4e3474c9dfc48", 52 | "revisionTime": "2018-03-27T17:24:49Z" 53 | }, 54 | { 55 | "checksumSHA1": "eVSHe6GIHj9/ziFrQLZ1SC7Nn6k=", 56 | "path": "github.com/Azure/go-autorest/autorest", 57 | "revision": "0781901f19f1e7db3034d97ec57af753db0bf808" 58 | }, 59 | { 60 | "checksumSHA1": "4Z3yO++uYspufDkuaIydTpT787c=", 61 | "path": "github.com/Azure/go-autorest/autorest/adal", 62 | "revision": "d76573ed104b3ed06b95d47ec1b4e3474c9dfc48", 63 | "revisionTime": "2018-03-27T17:24:49Z" 64 | }, 65 | { 66 | "checksumSHA1": "z8FwqeLK0Pluo7FYC5k2MVBoils=", 67 | "path": "github.com/Azure/go-autorest/autorest/azure", 68 | "revision": "0781901f19f1e7db3034d97ec57af753db0bf808" 69 | }, 70 | { 71 | "checksumSHA1": "q9Qz8PAxK5FTOZwgYKe5Lj38u4c=", 72 | "path": "github.com/Azure/go-autorest/autorest/date", 73 | "revision": "0781901f19f1e7db3034d97ec57af753db0bf808" 74 | }, 75 | { 76 | "checksumSHA1": "Ev8qCsbFjDlMlX0N2tYAhYQFpUc=", 77 | "path": "github.com/Azure/go-autorest/autorest/to", 78 | "revision": "0781901f19f1e7db3034d97ec57af753db0bf808" 79 | }, 80 | { 81 | "checksumSHA1": "oBixceM+55gdk47iff8DSEIh3po=", 82 | "path": "github.com/Azure/go-autorest/autorest/validation", 83 | "revision": "0781901f19f1e7db3034d97ec57af753db0bf808" 84 | }, 85 | { 86 | "path": "github.com/Sirupsen/logrus/hooks/airbrake", 87 | "revision": "" 88 | }, 89 | { 90 | "checksumSHA1": "UmqKmwnOamBy/xzaUiXWkGIVN3k=", 91 | "path": "github.com/apparentlymart/go-cidr", 92 | "revision": "2bd8b58cf4275aeb086ade613de226773e29e853", 93 | "revisionTime": "2017-06-16T19:18:03Z" 94 | }, 95 | { 96 | "checksumSHA1": "FIL83loX9V9APvGQIjJpbxq53F0=", 97 | "path": "github.com/apparentlymart/go-cidr/cidr", 98 | "revision": "7e4b007599d4e2076d9a81be723b3912852dda2c" 99 | }, 100 | { 101 | "checksumSHA1": "soz7wRqC+tGpiCfh8OJ65tdAudU=", 102 | "path": "github.com/aws/aws-sdk-go", 103 | "revision": "ddfd17ec06eee10c24c5c474633273fd034afdda", 104 | "tree": true 105 | }, 106 | { 107 | "checksumSHA1": "oYZergvEgkC0OdIz7drLY5ZMzWg=", 108 | "path": "github.com/bgentry/go-netrc", 109 | "revision": "9fd32a8b3d3d3f9d43c341bfe098430e07609480", 110 | "revisionTime": "2014-04-22T17:41:19Z" 111 | }, 112 | { 113 | "checksumSHA1": "nqw2Qn5xUklssHTubS5HDvEL9L4=", 114 | "path": "github.com/bgentry/go-netrc/netrc", 115 | "revision": "9fd32a8b3d3d3f9d43c341bfe098430e07609480" 116 | }, 117 | { 118 | "checksumSHA1": "0ZWIVC8pi5ARzq2/VnsFVKPWwNo=", 119 | "path": "github.com/bugsnag/bugsnag-go", 120 | "revision": "02e952891c52fbcb15f113d90633897355783b6e" 121 | }, 122 | { 123 | "checksumSHA1": "zxHs+p2FrgwC6X2B+OlkKjSFWzo=", 124 | "path": "github.com/bugsnag/bugsnag-go/errors", 125 | "revision": "02e952891c52fbcb15f113d90633897355783b6e" 126 | }, 127 | { 128 | "checksumSHA1": "ERKaUVBHSzWn+qi2ESfDfjLp9lA=", 129 | "path": "github.com/bugsnag/osext", 130 | "revision": "0dd3f918b21bec95ace9dc86c7e70266cfc5c702" 131 | }, 132 | { 133 | "checksumSHA1": "TgjBk2ON7O1vJNdGj0H3z3bsMNI=", 134 | "path": "github.com/bugsnag/panicwrap", 135 | "revision": "aceac81c6e2f55f23844821679a0553b545e91df" 136 | }, 137 | { 138 | "checksumSHA1": "iULSzrqiXnh7srz9LCfiwYFnqWM=", 139 | "path": "github.com/cenkalti/backoff", 140 | "revision": "9831e1e25c874e0a0601b6dc43641071414eec7a" 141 | }, 142 | { 143 | "path": "github.com/coreos/etcd/Godeps/_workspace/src/github.com/ugorji/go/codec", 144 | "revision": "" 145 | }, 146 | { 147 | "path": "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context", 148 | "revision": "" 149 | }, 150 | { 151 | "checksumSHA1": "HqiaI6amAXL9ysj9EeAU+vlasyU=", 152 | "path": "github.com/coreos/go-systemd/activation", 153 | "revision": "bebb2b01b0473b183e4624aaf8e23ae6f4b22417", 154 | "revisionTime": "2018-03-28T15:49:44Z" 155 | }, 156 | { 157 | "checksumSHA1": "1txgvJO9bgE703kK2EQ/NATy1Rg=", 158 | "path": "github.com/coreos/go-systemd/dbus", 159 | "revision": "bebb2b01b0473b183e4624aaf8e23ae6f4b22417", 160 | "revisionTime": "2018-03-28T15:49:44Z" 161 | }, 162 | { 163 | "checksumSHA1": "EsJksAKyY2+r3mY+rdNocSCe1wg=", 164 | "path": "github.com/dgrijalva/jwt-go", 165 | "revision": "24c63f56522a87ec5339cc3567883f1039378fdb" 166 | }, 167 | { 168 | "checksumSHA1": "ssjeHp6Pauywq1sTax5hSq7tlpY=", 169 | "path": "github.com/digitalocean/godo", 170 | "revision": "d59ed2fe842bbb3cbee91c9df8bb7659dc9ee86f" 171 | }, 172 | { 173 | "checksumSHA1": "d4LymF0WIPa5mKmytQMSTcRs8+I=", 174 | "path": "github.com/docker/docker", 175 | "revision": "a8a31eff10544860d2188dddabdee4d727545796", 176 | "tree": true 177 | }, 178 | { 179 | "checksumSHA1": "qGXit74pcrjdCsusaYiwRsC4rnQ=", 180 | "path": "github.com/docker/go-units", 181 | "revision": "0bbddae09c5a5419a8c6dcdd7ff90da3d450393b" 182 | }, 183 | { 184 | "checksumSHA1": "WXaaah+jlIvyPKYxabeJN4s3nzA=", 185 | "path": "github.com/docker/libcontainer", 186 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 187 | "revisionTime": "2015-07-01T16:42:09Z" 188 | }, 189 | { 190 | "checksumSHA1": "jDZk3YmmOZdsF500h/oMWWDhJpU=", 191 | "path": "github.com/docker/libcontainer/apparmor", 192 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 193 | "revisionTime": "2015-07-01T16:42:09Z" 194 | }, 195 | { 196 | "checksumSHA1": "zHQor+b7eWXBMYHZvu4GxQjZ+7g=", 197 | "path": "github.com/docker/libcontainer/cgroups", 198 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 199 | "revisionTime": "2015-07-01T16:42:09Z" 200 | }, 201 | { 202 | "checksumSHA1": "IkJ8KAlXrS5aEuWE4jGL/c67csE=", 203 | "path": "github.com/docker/libcontainer/cgroups/fs", 204 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 205 | "revisionTime": "2015-07-01T16:42:09Z" 206 | }, 207 | { 208 | "checksumSHA1": "svlqJI7iqr+t+GBD6aLcRjb9vzQ=", 209 | "path": "github.com/docker/libcontainer/cgroups/systemd", 210 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 211 | "revisionTime": "2015-07-01T16:42:09Z" 212 | }, 213 | { 214 | "checksumSHA1": "WHuEPeLSp9K1xpTImAEyL1au9jI=", 215 | "path": "github.com/docker/libcontainer/configs", 216 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 217 | "revisionTime": "2015-07-01T16:42:09Z" 218 | }, 219 | { 220 | "checksumSHA1": "FM2Masl3DsATnWa9rIuQd6dh/GM=", 221 | "path": "github.com/docker/libcontainer/configs/validate", 222 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 223 | "revisionTime": "2015-07-01T16:42:09Z" 224 | }, 225 | { 226 | "path": "github.com/docker/libcontainer/console", 227 | "revision": "" 228 | }, 229 | { 230 | "checksumSHA1": "3SahTGA+X4Xb4gRfSLrJA893iNQ=", 231 | "path": "github.com/docker/libcontainer/criurpc", 232 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 233 | "revisionTime": "2015-07-01T16:42:09Z" 234 | }, 235 | { 236 | "checksumSHA1": "KaOCFOwDBO16mpz+X+OfQuiYrTc=", 237 | "path": "github.com/docker/libcontainer/devices", 238 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 239 | "revisionTime": "2015-07-01T16:42:09Z" 240 | }, 241 | { 242 | "checksumSHA1": "s+Mf+zo1epw22Po16R0lIrqSX+o=", 243 | "path": "github.com/docker/libcontainer/label", 244 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 245 | "revisionTime": "2015-07-01T16:42:09Z" 246 | }, 247 | { 248 | "path": "github.com/docker/libcontainer/mount", 249 | "revision": "" 250 | }, 251 | { 252 | "path": "github.com/docker/libcontainer/mount/nodes", 253 | "revision": "" 254 | }, 255 | { 256 | "path": "github.com/docker/libcontainer/namespaces", 257 | "revision": "" 258 | }, 259 | { 260 | "path": "github.com/docker/libcontainer/namespaces/nsenter", 261 | "revision": "" 262 | }, 263 | { 264 | "checksumSHA1": "Fse3ZkS03FfEN/kNFprH6hOoqlE=", 265 | "path": "github.com/docker/libcontainer/netlink", 266 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 267 | "revisionTime": "2015-07-01T16:42:09Z" 268 | }, 269 | { 270 | "path": "github.com/docker/libcontainer/network", 271 | "revision": "" 272 | }, 273 | { 274 | "checksumSHA1": "4Mhj+v2G7zMyhpxghh69pxMYN9k=", 275 | "path": "github.com/docker/libcontainer/seccomp", 276 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 277 | "revisionTime": "2015-07-01T16:42:09Z" 278 | }, 279 | { 280 | "path": "github.com/docker/libcontainer/security/capabilities", 281 | "revision": "" 282 | }, 283 | { 284 | "path": "github.com/docker/libcontainer/security/restrict", 285 | "revision": "" 286 | }, 287 | { 288 | "checksumSHA1": "FB4igpqu9PVP8x/DkzTqfTIJZnA=", 289 | "path": "github.com/docker/libcontainer/selinux", 290 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 291 | "revisionTime": "2015-07-01T16:42:09Z" 292 | }, 293 | { 294 | "checksumSHA1": "PRtu05/l4zdFkH+hadaJoJDnfWk=", 295 | "path": "github.com/docker/libcontainer/stacktrace", 296 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 297 | "revisionTime": "2015-07-01T16:42:09Z" 298 | }, 299 | { 300 | "checksumSHA1": "GpCtP9fo34oeMBfcDAjgD4e7lbI=", 301 | "path": "github.com/docker/libcontainer/system", 302 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 303 | "revisionTime": "2015-07-01T16:42:09Z" 304 | }, 305 | { 306 | "checksumSHA1": "/F+uaY6ZHhzuFdIIl1PVDQh4ey8=", 307 | "path": "github.com/docker/libcontainer/user", 308 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 309 | "revisionTime": "2015-07-01T16:42:09Z" 310 | }, 311 | { 312 | "checksumSHA1": "4bf5tjXkVTk8x5Wyhvq5Z9q69ps=", 313 | "path": "github.com/docker/libcontainer/utils", 314 | "revision": "83a102cc68a09d890cce3b6c2e5c14c49e6373a0", 315 | "revisionTime": "2015-07-01T16:42:09Z" 316 | }, 317 | { 318 | "checksumSHA1": "sNAU9ojYVUhO6dVXey6T3JhRQpw=", 319 | "path": "github.com/docker/libtrust", 320 | "revision": "aabc10ec26b754e797f9028f4589c5b7bd90dc20", 321 | "revisionTime": "2016-07-08T17:25:13Z" 322 | }, 323 | { 324 | "checksumSHA1": "UJ2Qo0ZJOiLZOpWyZSVPaCjRmio=", 325 | "path": "github.com/docker/libtrust/trustgraph", 326 | "revision": "aabc10ec26b754e797f9028f4589c5b7bd90dc20", 327 | "revisionTime": "2016-07-08T17:25:13Z" 328 | }, 329 | { 330 | "checksumSHA1": "+f0QNG2zDJHDGefy7/wHuu1wwvA=", 331 | "path": "github.com/docker/machine", 332 | "revision": "89b833253d9412716a0291cbdccc94454c33d1b5", 333 | "tree": true 334 | }, 335 | { 336 | "checksumSHA1": "7NP1qUMF8Kx1y0zANxx0e+oq9Oo=", 337 | "path": "github.com/fsnotify/fsnotify", 338 | "revision": "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9", 339 | "revisionTime": "2018-01-10T05:33:47Z" 340 | }, 341 | { 342 | "checksumSHA1": "4hocbI9NOOnPx4eAS71raiodFmc=", 343 | "path": "github.com/globalsign/mgo", 344 | "revision": "baa28fcb8e7d5dfab92026c0920cb6c9ae72faa2", 345 | "revisionTime": "2018-02-20T10:02:56Z" 346 | }, 347 | { 348 | "checksumSHA1": "kLUu2CnSDmvd0HDEf65nK+UAfs0=", 349 | "path": "github.com/globalsign/mgo/bson", 350 | "revision": "baa28fcb8e7d5dfab92026c0920cb6c9ae72faa2", 351 | "revisionTime": "2018-02-20T10:02:56Z" 352 | }, 353 | { 354 | "checksumSHA1": "//bXQG4HblBwxHJDIW/PklXAxu0=", 355 | "path": "github.com/globalsign/mgo/internal/json", 356 | "revision": "baa28fcb8e7d5dfab92026c0920cb6c9ae72faa2", 357 | "revisionTime": "2018-02-20T10:02:56Z" 358 | }, 359 | { 360 | "checksumSHA1": "zSNjAU41khuKovmSSkhVqXf5q4A=", 361 | "path": "github.com/globalsign/mgo/internal/sasl", 362 | "revision": "baa28fcb8e7d5dfab92026c0920cb6c9ae72faa2", 363 | "revisionTime": "2018-02-20T10:02:56Z" 364 | }, 365 | { 366 | "checksumSHA1": "YogZ7HaSnE0pxdiP48GdI1+CXeI=", 367 | "path": "github.com/globalsign/mgo/internal/scram", 368 | "revision": "baa28fcb8e7d5dfab92026c0920cb6c9ae72faa2", 369 | "revisionTime": "2018-02-20T10:02:56Z" 370 | }, 371 | { 372 | "checksumSHA1": "lShJkqhgbnAV8FkHJumek8CZ3LY=", 373 | "path": "github.com/go-fsnotify/fsnotify", 374 | "revision": "755488143daea2fdb7c6f803dc5e70a8b54ae265", 375 | "revisionTime": "2018-03-21T02:26:01Z" 376 | }, 377 | { 378 | "checksumSHA1": "xwl6RN1KelFEBET0MQ28xyTFqdo=", 379 | "path": "github.com/go-ini/ini", 380 | "revision": "03e0e7d51a13a91c765d8d0161246bc14a38001a" 381 | }, 382 | { 383 | "checksumSHA1": "ii4uiNEl2u4pGg30fAiesPdB7js=", 384 | "path": "github.com/godbus/dbus", 385 | "revision": "58352f4407cb8530de39c000a4db8a198b14a982", 386 | "revisionTime": "2018-03-12T08:14:47Z" 387 | }, 388 | { 389 | "checksumSHA1": "NrP46FPoALgKz3FY6puL3syMAAI=", 390 | "path": "github.com/godbus/dbus/introspect", 391 | "revision": "58352f4407cb8530de39c000a4db8a198b14a982", 392 | "revisionTime": "2018-03-12T08:14:47Z" 393 | }, 394 | { 395 | "checksumSHA1": "CkKjyrCOethydl6d20AkBORNUFo=", 396 | "path": "github.com/golang/protobuf", 397 | "revision": "e09c5db296004fbe3f74490e84dcd62c3c5ddb1b", 398 | "revisionTime": "2018-03-28T16:31:53Z" 399 | }, 400 | { 401 | "checksumSHA1": "Ph3AzJaMHZxUdyqWL+Lx3CufxRw=", 402 | "path": "github.com/golang/protobuf/proto", 403 | "revision": "3c84672111d91bb5ac31719e112f9f7126a0e26e" 404 | }, 405 | { 406 | "checksumSHA1": "whzP8RIlAM/Vzm39mlGjN0UZwyU=", 407 | "path": "github.com/google/go-querystring", 408 | "revision": "53e6ce116135b80d037921a7fdd5138cf32d7a8a", 409 | "revisionTime": "2017-01-11T10:11:55Z" 410 | }, 411 | { 412 | "checksumSHA1": "On40OyoVg299CRGxOcagycG34xU=", 413 | "path": "github.com/google/go-querystring/query", 414 | "revision": "30f7a39f4a218feb5325f3aebc60c32a572a8274" 415 | }, 416 | { 417 | "checksumSHA1": "g/V4qrXjUGG9B+e3hB+4NAYJ5Gs=", 418 | "path": "github.com/gorilla/context", 419 | "revision": "08b5f424b9271eedf6f9f0ce86cb9396ed337a42", 420 | "revisionTime": "2016-08-17T18:46:32Z" 421 | }, 422 | { 423 | "checksumSHA1": "KGBsAyAxS+hp4NHh1kbI6nIVDbI=", 424 | "path": "github.com/gorilla/mux", 425 | "revision": "4dbd923b0c9e99ff63ad54b0e9705ff92d3cdb06", 426 | "revisionTime": "2018-03-14T16:31:26Z" 427 | }, 428 | { 429 | "checksumSHA1": "l2CJX8X2+faB4Ja9jUaOFNdrzY0=", 430 | "path": "github.com/gucumber/gucumber", 431 | "revision": "7d5c79e832a25825dbed83e78f8484d4ffe8ec16", 432 | "revisionTime": "2018-01-27T02:13:36Z" 433 | }, 434 | { 435 | "checksumSHA1": "mTDYFrIKPm7wgUXfB9UEvCxk2Rw=", 436 | "path": "github.com/gucumber/gucumber/gherkin", 437 | "revision": "7d5c79e832a25825dbed83e78f8484d4ffe8ec16", 438 | "revisionTime": "2018-01-27T02:13:36Z" 439 | }, 440 | { 441 | "checksumSHA1": "cdOCt0Yb+hdErz8NAQqayxPmRsY=", 442 | "path": "github.com/hashicorp/errwrap", 443 | "revision": "7554cd9344cec97297fa6649b055a8c98c2a1e55" 444 | }, 445 | { 446 | "checksumSHA1": "N9ipwqAEQQ0gEsWMJZlFbRL/Mvk=", 447 | "path": "github.com/hashicorp/go-getter", 448 | "revision": "90b6568eac830f62a08e8f1f46375daa63e57015" 449 | }, 450 | { 451 | "checksumSHA1": "9J+kDr29yDrwsdu2ULzewmqGjpA=", 452 | "path": "github.com/hashicorp/go-getter/helper/url", 453 | "revision": "90b6568eac830f62a08e8f1f46375daa63e57015" 454 | }, 455 | { 456 | "checksumSHA1": "4fgV2vzKKVyIlQ9nMyXIP5muq9E=", 457 | "path": "github.com/hashicorp/go-multierror", 458 | "revision": "ed905158d87462226a13fe39ddf685ea65f1c11f" 459 | }, 460 | { 461 | "checksumSHA1": "1yCT08E6lcdNWc66aKWDJO4T87o=", 462 | "path": "github.com/hashicorp/go-plugin", 463 | "revision": "b7d6477501c13292d71fd3b8e688269e51b028ba" 464 | }, 465 | { 466 | "checksumSHA1": "mAkPa/RLuIwN53GbwIEMATexams=", 467 | "path": "github.com/hashicorp/go-uuid", 468 | "revision": "64130c7a86d732268a38cb04cfbaf0cc987fda98" 469 | }, 470 | { 471 | "checksumSHA1": "tUGxc7rfX0cmhOOUDhMuAZ9rWsA=", 472 | "path": "github.com/hashicorp/go-version", 473 | "revision": "03c5bf6be031b6dd45afec16b1cf94fc8938bc77" 474 | }, 475 | { 476 | "checksumSHA1": "7JBkp3EZoc0MSbiyWfzVhO4RYoY=", 477 | "path": "github.com/hashicorp/hcl", 478 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 479 | }, 480 | { 481 | "checksumSHA1": "XQmjDva9JCGGkIecOgwtBEMCJhU=", 482 | "path": "github.com/hashicorp/hcl/hcl/ast", 483 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 484 | }, 485 | { 486 | "checksumSHA1": "teokXoyRXEJ0vZHOWBD11l5YFNI=", 487 | "path": "github.com/hashicorp/hcl/hcl/parser", 488 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 489 | }, 490 | { 491 | "checksumSHA1": "z6wdP4mRw4GVjShkNHDaOWkbxS0=", 492 | "path": "github.com/hashicorp/hcl/hcl/scanner", 493 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 494 | }, 495 | { 496 | "checksumSHA1": "oS3SCN9Wd6D8/LG0Yx1fu84a7gI=", 497 | "path": "github.com/hashicorp/hcl/hcl/strconv", 498 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 499 | }, 500 | { 501 | "checksumSHA1": "c6yprzj06ASwCo18TtbbNNBHljA=", 502 | "path": "github.com/hashicorp/hcl/hcl/token", 503 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 504 | }, 505 | { 506 | "checksumSHA1": "PwlfXt7mFS8UYzWxOK5DOq0yxS0=", 507 | "path": "github.com/hashicorp/hcl/json/parser", 508 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 509 | }, 510 | { 511 | "checksumSHA1": "YdvFsNOMSWMLnY6fcliWQa0O5Fw=", 512 | "path": "github.com/hashicorp/hcl/json/scanner", 513 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 514 | }, 515 | { 516 | "checksumSHA1": "fNlXQCQEnb+B3k5UDL/r15xtSJY=", 517 | "path": "github.com/hashicorp/hcl/json/token", 518 | "revision": "392dba7d905ed5d04a5794ba89f558b27e2ba1ca" 519 | }, 520 | { 521 | "checksumSHA1": "M09yxoBoCEtG7EcHR8aEWLzMMJc=", 522 | "path": "github.com/hashicorp/hil", 523 | "revision": "fac2259da677551de1fb92b844c4d020a38d8468" 524 | }, 525 | { 526 | "checksumSHA1": "0S0KeBcfqVFYBPeZkuJ4fhQ5mCA=", 527 | "path": "github.com/hashicorp/hil/ast", 528 | "revision": "fac2259da677551de1fb92b844c4d020a38d8468" 529 | }, 530 | { 531 | "checksumSHA1": "P5PZ3k7SmqWmxgJ8Q0gLzeNpGhE=", 532 | "path": "github.com/hashicorp/hil/parser", 533 | "revision": "fac2259da677551de1fb92b844c4d020a38d8468" 534 | }, 535 | { 536 | "checksumSHA1": "DC1k5kOua4oFqmo+JRt0YzfP44o=", 537 | "path": "github.com/hashicorp/hil/scanner", 538 | "revision": "fac2259da677551de1fb92b844c4d020a38d8468" 539 | }, 540 | { 541 | "checksumSHA1": "uFE6CQQNceeWsgPkMLmu3iSsiiI=", 542 | "path": "github.com/hashicorp/nomad/client/config", 543 | "revision": "b4bb89d6da5953c32ff2387ef7a1d6ef4f81c2c4", 544 | "revisionTime": "2018-03-30T23:55:45Z" 545 | }, 546 | { 547 | "checksumSHA1": "RrgpFea0wcET7LbCC07rOFWjbu8=", 548 | "path": "github.com/hashicorp/nomad/client/driver/env", 549 | "revision": "b4bb89d6da5953c32ff2387ef7a1d6ef4f81c2c4", 550 | "revisionTime": "2018-03-30T23:55:45Z" 551 | }, 552 | { 553 | "checksumSHA1": "7JhmdzIwRkRCgzJZvYRCpfgHaRE=", 554 | "path": "github.com/hashicorp/nomad/client/stats", 555 | "revision": "b4bb89d6da5953c32ff2387ef7a1d6ef4f81c2c4", 556 | "revisionTime": "2018-03-30T23:55:45Z" 557 | }, 558 | { 559 | "checksumSHA1": "MhsdNtjXqJGdpJNyyHZZH0+s5kc=", 560 | "path": "github.com/hashicorp/nomad/client/structs", 561 | "revision": "b4bb89d6da5953c32ff2387ef7a1d6ef4f81c2c4", 562 | "revisionTime": "2018-03-30T23:55:45Z" 563 | }, 564 | { 565 | "checksumSHA1": "O4h+cB3kE3yxWpxYr0zq8CPV3Zk=", 566 | "path": "github.com/hashicorp/nomad/nomad/structs/config", 567 | "revision": "b4bb89d6da5953c32ff2387ef7a1d6ef4f81c2c4", 568 | "revisionTime": "2018-03-30T23:55:45Z" 569 | }, 570 | { 571 | "checksumSHA1": "FJd9xId531EVEbFppVc0FUyQgmc=", 572 | "path": "github.com/hashicorp/nomad/version", 573 | "revision": "b4bb89d6da5953c32ff2387ef7a1d6ef4f81c2c4", 574 | "revisionTime": "2018-03-30T23:55:45Z" 575 | }, 576 | { 577 | "checksumSHA1": "dAyng8yCdvTdtmAMIYF4beZVbZk=", 578 | "path": "github.com/hashicorp/terraform", 579 | "revision": "85e0979c6af6a15345c9131e4478ba712bb3c21d", 580 | "tree": true 581 | }, 582 | { 583 | "checksumSHA1": "ZhK6IO2XN81Y+3RAjTcVm1Ic7oU=", 584 | "path": "github.com/hashicorp/yamux", 585 | "revision": "d1caa6c97c9fc1cc9e83bbe34d0603f9ff0ce8bd" 586 | }, 587 | { 588 | "checksumSHA1": "40vJyUB4ezQSn/NSadsKEOrudMc=", 589 | "path": "github.com/inconshreveable/mousetrap", 590 | "revision": "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75", 591 | "revisionTime": "2014-10-17T20:07:13Z" 592 | }, 593 | { 594 | "checksumSHA1": "9dPHJ2IqSJok9bKZ6btWALYE/pA=", 595 | "path": "github.com/jmespath/go-jmespath", 596 | "revision": "3433f3ea46d9f8019119e7dd41274e112a2359a9" 597 | }, 598 | { 599 | "checksumSHA1": "ym3Koe72EEWlnhyjCmuC0FSlDyw=", 600 | "path": "github.com/kr/pty", 601 | "revision": "282ce0e5322c82529687d609ee670fac7c7d917c", 602 | "revisionTime": "2018-01-13T18:08:13Z" 603 | }, 604 | { 605 | "checksumSHA1": "NiPRC0JDsfCFir75S1TrFHPP8+M=", 606 | "path": "github.com/magiconair/properties", 607 | "revision": "2c9e9502788518c97fe44e8955cd069417ee89df", 608 | "revisionTime": "2018-02-17T13:45:45Z" 609 | }, 610 | { 611 | "checksumSHA1": "KKPhePaMSnZOjQ8SrZNDZFsUNv4=", 612 | "path": "github.com/marstr/collection", 613 | "revision": "e631537cb8c24c0ae72749bbf505cff6e692b6aa", 614 | "revisionTime": "2017-10-04T15:03:01Z" 615 | }, 616 | { 617 | "checksumSHA1": "spdbJmp6HnCUPsvFUer6Po/lSVE=", 618 | "path": "github.com/marstr/goalias/model", 619 | "revision": "3026ca7e18e829805b990b41e4ce28c92cb80caa", 620 | "revisionTime": "2017-09-11T19:40:08Z" 621 | }, 622 | { 623 | "checksumSHA1": "T9E+5mKBQ/BX4wlNxgaPfetxdeI=", 624 | "path": "github.com/marstr/guid", 625 | "revision": "8bdf7d1a087ccc975cf37dd6507da50698fd19ca", 626 | "revisionTime": "2017-04-27T23:51:15Z" 627 | }, 628 | { 629 | "checksumSHA1": "O6XwOGI3sV38kplNBEkJmVsV3Bc=", 630 | "path": "github.com/marstr/randname", 631 | "revision": "3ef1f47af99e66171417047e6f6fa334345e95e7", 632 | "revisionTime": "2017-11-10T22:24:28Z" 633 | }, 634 | { 635 | "checksumSHA1": "+p4JY4wmFQAppCdlrJ8Kxybmht8=", 636 | "path": "github.com/mitchellh/copystructure", 637 | "revision": "d23ffcb85de31694d6ccaa23ccb4a03e55c1303f" 638 | }, 639 | { 640 | "checksumSHA1": "V/quM7+em2ByJbWBLOsEwnY3j/Q=", 641 | "path": "github.com/mitchellh/go-homedir", 642 | "revision": "b8bc1bf767474819792c23f32d8286a45736f1c6" 643 | }, 644 | { 645 | "checksumSHA1": "j83WZHiKiPF86Hj5QMQdWboizls=", 646 | "path": "github.com/mitchellh/go-testing-interface", 647 | "revision": "477c2d05a845d8b55912a5a7993b9b24abcc5ef8" 648 | }, 649 | { 650 | "checksumSHA1": "Cs7lIWDshAVqcW+cF+5DRwwH2w0=", 651 | "path": "github.com/mitchellh/hashstructure", 652 | "revision": "9204ce590301a868e3e86938bc12eadd416b211e" 653 | }, 654 | { 655 | "checksumSHA1": "+OwSloMUOgkUXkJmGr7pQyNsh4Q=", 656 | "path": "github.com/mitchellh/mapstructure", 657 | "revision": "740c764bc6149d3f1806231418adb9f52c11bcbf" 658 | }, 659 | { 660 | "checksumSHA1": "KqsMqI+Y+3EFYPhyzafpIneaVCM=", 661 | "path": "github.com/mitchellh/reflectwalk", 662 | "revision": "8d802ff4ae93611b807597f639c19f76074df5c6" 663 | }, 664 | { 665 | "checksumSHA1": "qF0v8XQ53MGp26VQBaIu1mpfb14=", 666 | "path": "github.com/pelletier/go-toml", 667 | "revision": "66540cf1fcd2c3aee6f6787dfa32a6ae9a870f12", 668 | "revisionTime": "2018-03-23T18:52:43Z" 669 | }, 670 | { 671 | "checksumSHA1": "AbQByUWfKcVb6NNNGr2bzoi/t/Q=", 672 | "path": "github.com/pyr/egoscale", 673 | "revision": "906e88e3bb9cf8c559e45e248db1d09578acf47f" 674 | }, 675 | { 676 | "checksumSHA1": "CubOH5Oi1hpjX54FY2DCQkZ4w5o=", 677 | "path": "github.com/pyr/egoscale/src/egoscale", 678 | "revision": "906e88e3bb9cf8c559e45e248db1d09578acf47f" 679 | }, 680 | { 681 | "checksumSHA1": "6afi+ATbcQy7SUukrON/c5pb+nk=", 682 | "path": "github.com/rackspace/gophercloud", 683 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 684 | }, 685 | { 686 | "checksumSHA1": "GaEB5yobZ54ws+ddHBuNEj69i1k=", 687 | "path": "github.com/rackspace/gophercloud/openstack", 688 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 689 | }, 690 | { 691 | "checksumSHA1": "CntGaaU5gbxMktb7BmzLT6JoqK0=", 692 | "path": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/floatingip", 693 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 694 | }, 695 | { 696 | "checksumSHA1": "A8CBSjxtNeXBtM3M51qqs5FMVNE=", 697 | "path": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs", 698 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 699 | }, 700 | { 701 | "checksumSHA1": "G3pxSBafMhqdqvuDPsctv74nI2M=", 702 | "path": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/startstop", 703 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 704 | }, 705 | { 706 | "checksumSHA1": "G3R6XVim/zI69tuztObirR6MYK0=", 707 | "path": "github.com/rackspace/gophercloud/openstack/compute/v2/flavors", 708 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 709 | }, 710 | { 711 | "checksumSHA1": "rStIACJZC19CzXA8J/0tXrGvLpk=", 712 | "path": "github.com/rackspace/gophercloud/openstack/compute/v2/images", 713 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 714 | }, 715 | { 716 | "checksumSHA1": "dfyikUa7IjNWgO+LcYoum+faULA=", 717 | "path": "github.com/rackspace/gophercloud/openstack/compute/v2/servers", 718 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 719 | }, 720 | { 721 | "checksumSHA1": "kBNUmTmGZgMc7RA8b/MfF8mNLrw=", 722 | "path": "github.com/rackspace/gophercloud/openstack/identity/v2/tenants", 723 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 724 | }, 725 | { 726 | "checksumSHA1": "3f10Vj3hWqAenvvh8FIJjrv9Wzc=", 727 | "path": "github.com/rackspace/gophercloud/openstack/identity/v2/tokens", 728 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 729 | }, 730 | { 731 | "checksumSHA1": "eR8ZuyY6HiAGtu75bQwDGNg9uQE=", 732 | "path": "github.com/rackspace/gophercloud/openstack/identity/v3/tokens", 733 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 734 | }, 735 | { 736 | "checksumSHA1": "i8z1iISsBN6mJBXgU+W0p5N6Dt8=", 737 | "path": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/floatingips", 738 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 739 | }, 740 | { 741 | "checksumSHA1": "jA5BmlsFrs9sNuy6/klvWkLmLAc=", 742 | "path": "github.com/rackspace/gophercloud/openstack/networking/v2/networks", 743 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 744 | }, 745 | { 746 | "checksumSHA1": "Z9j6hEuLex9IkWvgOsmDEu1IGIY=", 747 | "path": "github.com/rackspace/gophercloud/openstack/networking/v2/ports", 748 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 749 | }, 750 | { 751 | "checksumSHA1": "e4ussrqujJHizWbdBaLjIpWYmgY=", 752 | "path": "github.com/rackspace/gophercloud/openstack/utils", 753 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 754 | }, 755 | { 756 | "checksumSHA1": "Rr8Te9+8y6yx5oR9aQdxxLl8mPE=", 757 | "path": "github.com/rackspace/gophercloud/pagination", 758 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 759 | }, 760 | { 761 | "checksumSHA1": "yLIJ6A+ORqSR+m03UyIyBokQgTo=", 762 | "path": "github.com/rackspace/gophercloud/rackspace", 763 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 764 | }, 765 | { 766 | "checksumSHA1": "nZvGpVUe3zTfT5nhKkJloOud2/I=", 767 | "path": "github.com/rackspace/gophercloud/rackspace/identity/v2/tokens", 768 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 769 | }, 770 | { 771 | "checksumSHA1": "U2yzK8GFNeHZqcoeotcHmK57lAI=", 772 | "path": "github.com/rackspace/gophercloud/testhelper", 773 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 774 | }, 775 | { 776 | "checksumSHA1": "fXtvTbQBML8QLu/qpD9sAt53J00=", 777 | "path": "github.com/rackspace/gophercloud/testhelper/client", 778 | "revision": "ce0f487f6747ab43c4e4404722df25349385bebd" 779 | }, 780 | { 781 | "checksumSHA1": "giSKj4XG0/eJoXgjMg1ED4l52rQ=", 782 | "path": "github.com/samalba/dockerclient", 783 | "revision": "f661dd4754aa5c52da85d04b5871ee0e11f4b59c" 784 | }, 785 | { 786 | "checksumSHA1": "zmC8/3V4ls53DJlNTKDZwPSC/dA=", 787 | "path": "github.com/satori/go.uuid", 788 | "revision": "5bf94b69c6b68ee1b541973bb8e1144db23a194b" 789 | }, 790 | { 791 | "checksumSHA1": "v5CCEZdC63TIkIL8TUeURBcZzNc=", 792 | "path": "github.com/shiena/ansicolor", 793 | "revision": "a422bbe96644373c5753384a59d678f7d261ff10", 794 | "revisionTime": "2015-11-19T15:19:21Z" 795 | }, 796 | { 797 | "checksumSHA1": "q14d3C3xvWevU3dSv4P5K0+OSD0=", 798 | "path": "github.com/shirou/gopsutil/cpu", 799 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 800 | "revisionTime": "2018-03-31T13:05:15Z" 801 | }, 802 | { 803 | "checksumSHA1": "W2vjoKDPna2OX6Cnw1xknW8Dm/Q=", 804 | "path": "github.com/shirou/gopsutil/disk", 805 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 806 | "revisionTime": "2018-03-31T13:05:15Z" 807 | }, 808 | { 809 | "checksumSHA1": "Wzf7Fw/A9ekprY/FJwRN2qaBayw=", 810 | "path": "github.com/shirou/gopsutil/host", 811 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 812 | "revisionTime": "2018-03-31T13:05:15Z" 813 | }, 814 | { 815 | "checksumSHA1": "ElneFnzdyg/mWfMFukLUHdy9DHY=", 816 | "path": "github.com/shirou/gopsutil/internal/common", 817 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 818 | "revisionTime": "2018-03-31T13:05:15Z" 819 | }, 820 | { 821 | "checksumSHA1": "xDiGYW5oZ/EZ0UevCzMhoBhnHjU=", 822 | "path": "github.com/shirou/gopsutil/mem", 823 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 824 | "revisionTime": "2018-03-31T13:05:15Z" 825 | }, 826 | { 827 | "checksumSHA1": "cqp+0Xxb51xFf3ekjlaS/EpipZU=", 828 | "path": "github.com/shirou/gopsutil/net", 829 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 830 | "revisionTime": "2018-03-31T13:05:15Z" 831 | }, 832 | { 833 | "checksumSHA1": "KD6zkJ8i3mQVdhMNPHN/4RBkk+M=", 834 | "path": "github.com/shirou/gopsutil/process", 835 | "revision": "fc04d2dd9a512906a2604242b35275179e250eda", 836 | "revisionTime": "2018-03-31T13:05:15Z" 837 | }, 838 | { 839 | "checksumSHA1": "Nve7SpDmjsv6+rhkXAkfg/UQx94=", 840 | "path": "github.com/shirou/w32", 841 | "revision": "bb4de0191aa41b5507caa14b0650cdbddcd9280b", 842 | "revisionTime": "2016-09-30T03:27:40Z" 843 | }, 844 | { 845 | "checksumSHA1": "+e+1f0Ktd8jP9pybIWSlinDprNE=", 846 | "path": "github.com/shopspring/decimal", 847 | "revision": "2df3e6ddaf6e9531dd02d7b6337f2d310f5e4f22", 848 | "revisionTime": "2018-03-19T17:08:23Z" 849 | }, 850 | { 851 | "checksumSHA1": "P4yvHwYcMQsDfhwCCBLMG3nzA50=", 852 | "path": "github.com/spf13/afero", 853 | "revision": "a880a37ed1804d98f64b3b7d58b5e3f8fbf421c4", 854 | "revisionTime": "2018-03-22T22:50:04Z" 855 | }, 856 | { 857 | "checksumSHA1": "X6RueW0rO55PbOQ0sMWSQOxVl4I=", 858 | "path": "github.com/spf13/afero/mem", 859 | "revision": "a880a37ed1804d98f64b3b7d58b5e3f8fbf421c4", 860 | "revisionTime": "2018-03-22T22:50:04Z" 861 | }, 862 | { 863 | "checksumSHA1": "Hc2i9OOK34PAImuNftTaHdbdLgs=", 864 | "path": "github.com/spf13/cast", 865 | "revision": "8965335b8c7107321228e3e3702cab9832751bac", 866 | "revisionTime": "2018-02-14T17:35:30Z" 867 | }, 868 | { 869 | "checksumSHA1": "imvfVf7lRxu0Fz7V2G43CUC6Ff0=", 870 | "path": "github.com/spf13/cobra", 871 | "revision": "4dab30cb33e6633c33c787106bafbfbfdde7842d", 872 | "revisionTime": "2018-03-31T12:36:20Z" 873 | }, 874 | { 875 | "checksumSHA1": "+JFKK0z5Eutk29rUz1lEhLxHMfk=", 876 | "path": "github.com/spf13/jwalterweatherman", 877 | "revision": "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394", 878 | "revisionTime": "2018-01-09T13:55:06Z" 879 | }, 880 | { 881 | "checksumSHA1": "AB/VGCv0NIjGYZXhJUBSbVIsOJw=", 882 | "path": "github.com/spf13/viper", 883 | "revision": "b5e8006cbee93ec955a89ab31e0e3ce3204f3736", 884 | "revisionTime": "2018-03-19T18:50:19Z" 885 | }, 886 | { 887 | "checksumSHA1": "rNiFOe9cjpXtDfEQ4xQiiw2fy/g=", 888 | "path": "github.com/syndtr/gocapability/capability", 889 | "revision": "33e07d32887e1e06b7c025f27ce52f62c7990bc0", 890 | "revisionTime": "2018-02-23T01:37:46Z" 891 | }, 892 | { 893 | "checksumSHA1": "AHk1Y+L/rkf1jKAmqttDefEWeJw=", 894 | "path": "github.com/tchap/go-patricia/patricia", 895 | "revision": "5ad6cdb7538b0097d5598c7e57f0a24072adf7dc", 896 | "revisionTime": "2017-09-01T15:15:52Z" 897 | }, 898 | { 899 | "checksumSHA1": "GQ9bu6PuydK3Yor1JgtVKUfEJm8=", 900 | "path": "github.com/tent/http-link-go", 901 | "revision": "ac974c61c2f990f4115b119354b5e0b47550e888" 902 | }, 903 | { 904 | "checksumSHA1": "t5xEpCG6CFRGqk+Mw1IeSCRcKfM=", 905 | "path": "github.com/tobi/airbrake-go", 906 | "revision": "a3cdd910a3ffef88a20fbecc10363a520ad61a0a", 907 | "revisionTime": "2015-10-05T18:14:55Z" 908 | }, 909 | { 910 | "checksumSHA1": "2Y6vxEKm2ZtgT5C/X8phUEIZh+s=", 911 | "path": "github.com/vmware/govcloudair", 912 | "revision": "66a23eaabc61518f91769939ff541886fe1dceef" 913 | }, 914 | { 915 | "checksumSHA1": "GnhGQSIXVGTcaE2O44bojeY0tCc=", 916 | "path": "github.com/vmware/govcloudair/types/v56", 917 | "revision": "66a23eaabc61518f91769939ff541886fe1dceef" 918 | }, 919 | { 920 | "checksumSHA1": "empfGwOio3Qoclm9ZuGAmk3nr6g=", 921 | "path": "github.com/vmware/govmomi", 922 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 923 | }, 924 | { 925 | "checksumSHA1": "xyxo9nWPro79ae/TGNZOlWKSPUk=", 926 | "path": "github.com/vmware/govmomi/find", 927 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 928 | }, 929 | { 930 | "checksumSHA1": "L8Axur6ltsxzW8rodqg+EBLfqbM=", 931 | "path": "github.com/vmware/govmomi/guest", 932 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 933 | }, 934 | { 935 | "checksumSHA1": "lHxDz/33BD9IKrlJ3lRUicXWVfg=", 936 | "path": "github.com/vmware/govmomi/list", 937 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 938 | }, 939 | { 940 | "checksumSHA1": "Tu98nr2K8FL8Bz/88ufPBWYR1xQ=", 941 | "path": "github.com/vmware/govmomi/object", 942 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 943 | }, 944 | { 945 | "checksumSHA1": "+QicEDJib9U9fSb1yc1qjW4m8/E=", 946 | "path": "github.com/vmware/govmomi/property", 947 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 948 | }, 949 | { 950 | "checksumSHA1": "LTzDdLTnB4UyquP6wGQs8Q7QBH0=", 951 | "path": "github.com/vmware/govmomi/session", 952 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 953 | }, 954 | { 955 | "checksumSHA1": "JtZUMXRXiFOaV8akUh+kbnLaf+E=", 956 | "path": "github.com/vmware/govmomi/task", 957 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 958 | }, 959 | { 960 | "checksumSHA1": "orm8PDSa1meFBKxuM6ovnKiu6IY=", 961 | "path": "github.com/vmware/govmomi/vim25", 962 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 963 | }, 964 | { 965 | "checksumSHA1": "xLvppq0NUD6Hv2GIx1gh75xUzyM=", 966 | "path": "github.com/vmware/govmomi/vim25/debug", 967 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 968 | }, 969 | { 970 | "checksumSHA1": "cyrEb8IV+N+fZ6tSjIkyhG+QQzQ=", 971 | "path": "github.com/vmware/govmomi/vim25/methods", 972 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 973 | }, 974 | { 975 | "checksumSHA1": "aBToDYIEBraV9oXPUL+HRSuL8Ps=", 976 | "path": "github.com/vmware/govmomi/vim25/mo", 977 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 978 | }, 979 | { 980 | "checksumSHA1": "tN9fHudMKhR3LjGw/V0fM4xXUJw=", 981 | "path": "github.com/vmware/govmomi/vim25/progress", 982 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 983 | }, 984 | { 985 | "checksumSHA1": "cNKLcag/tzBN8RWCb6YA3sOPheM=", 986 | "path": "github.com/vmware/govmomi/vim25/soap", 987 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 988 | }, 989 | { 990 | "checksumSHA1": "9EB6HeTmYV08T5XDY/0rbEgJmPY=", 991 | "path": "github.com/vmware/govmomi/vim25/types", 992 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 993 | }, 994 | { 995 | "checksumSHA1": "70jUW1y/xwsFhw6Wku+wBWo5F7c=", 996 | "path": "github.com/vmware/govmomi/vim25/xml", 997 | "revision": "9051bd6b44125d9472e0c148b5965692ab283d4a" 998 | }, 999 | { 1000 | "checksumSHA1": "P8REGBDbyCm9UnVwRYicjdbcc24=", 1001 | "path": "github.com/zorkian/go-datadog-api", 1002 | "revision": "fa40c76e4030afa1f7fe07bfbc92f01f22c9f40e", 1003 | "revisionTime": "2018-03-13T20:42:21Z" 1004 | }, 1005 | { 1006 | "checksumSHA1": "OMrNhB4c2hSwqs/avofVyWwW5I0=", 1007 | "path": "golang.org/x/crypto", 1008 | "revision": "12892e8c234f4fe6f6803f052061de9057903bb2", 1009 | "revisionTime": "2018-03-28T23:19:55Z" 1010 | }, 1011 | { 1012 | "checksumSHA1": "vE43s37+4CJ2CDU6TlOUOYE0K9c=", 1013 | "path": "golang.org/x/crypto/bcrypt", 1014 | "revision": "beef0f4390813b96e8e68fd78570396d0f4751fc" 1015 | }, 1016 | { 1017 | "checksumSHA1": "udD2DzUPFZbMVXP0VNADhef4zKk=", 1018 | "path": "golang.org/x/crypto/blowfish", 1019 | "revision": "beef0f4390813b96e8e68fd78570396d0f4751fc" 1020 | }, 1021 | { 1022 | "checksumSHA1": "h+pFYiRHBogczS8/F1NoN3Ata44=", 1023 | "path": "golang.org/x/crypto/curve25519", 1024 | "revision": "beef0f4390813b96e8e68fd78570396d0f4751fc" 1025 | }, 1026 | { 1027 | "checksumSHA1": "epsZoCQTcqrmud1bhwchpxCM+J8=", 1028 | "path": "golang.org/x/crypto/ssh", 1029 | "revision": "beef0f4390813b96e8e68fd78570396d0f4751fc" 1030 | }, 1031 | { 1032 | "checksumSHA1": "bA2gANkJBx2Br/p5GKYdhyGo3Pg=", 1033 | "path": "golang.org/x/crypto/ssh/terminal", 1034 | "revision": "beef0f4390813b96e8e68fd78570396d0f4751fc" 1035 | }, 1036 | { 1037 | "checksumSHA1": "QfiJxsbbFJKMXYfL1vOheNHD/eU=", 1038 | "path": "golang.org/x/net", 1039 | "revision": "b68f30494add4df6bd8ef5e82803f308e7f7c59c", 1040 | "revisionTime": "2018-03-18T08:05:40Z" 1041 | }, 1042 | { 1043 | "checksumSHA1": "5ARrN3Zq+E9zazFb/N+b08Serys=", 1044 | "path": "golang.org/x/net/context", 1045 | "revision": "4f2fc6c1e69d41baf187332ee08fbd2b296f21ed" 1046 | }, 1047 | { 1048 | "checksumSHA1": "GNnwCoCCsZTbfmQsw7A7eIf++Ms=", 1049 | "path": "golang.org/x/net/context/ctxhttp", 1050 | "revision": "4f2fc6c1e69d41baf187332ee08fbd2b296f21ed" 1051 | }, 1052 | { 1053 | "checksumSHA1": "mktBVED98G2vv+OKcSgtnFVZC1Y=", 1054 | "path": "golang.org/x/oauth2", 1055 | "revision": "442624c9ec9243441e83b374a9e22ac549b5c51d" 1056 | }, 1057 | { 1058 | "checksumSHA1": "HSRFs3mt2eHJBaK+6HEEv66xKyA=", 1059 | "path": "golang.org/x/oauth2/google", 1060 | "revision": "442624c9ec9243441e83b374a9e22ac549b5c51d" 1061 | }, 1062 | { 1063 | "checksumSHA1": "kNjuqgXY37bqXb38DNrC9GS5vlk=", 1064 | "path": "golang.org/x/oauth2/internal", 1065 | "revision": "442624c9ec9243441e83b374a9e22ac549b5c51d" 1066 | }, 1067 | { 1068 | "checksumSHA1": "4GaanJZHtrkglrx6a585C3I07+s=", 1069 | "path": "golang.org/x/oauth2/jws", 1070 | "revision": "442624c9ec9243441e83b374a9e22ac549b5c51d" 1071 | }, 1072 | { 1073 | "checksumSHA1": "xifBSq0Pn6pIoPA/o3tyzq8X4Ds=", 1074 | "path": "golang.org/x/oauth2/jwt", 1075 | "revision": "442624c9ec9243441e83b374a9e22ac549b5c51d" 1076 | }, 1077 | { 1078 | "checksumSHA1": "12uLecabEWipR/nVFSzdJ9qeriw=", 1079 | "path": "golang.org/x/sys", 1080 | "revision": "378d26f46672a356c46195c28f61bdb4c0a781dd", 1081 | "revisionTime": "2018-03-29T12:30:35Z" 1082 | }, 1083 | { 1084 | "checksumSHA1": "b0qA11fMUwmCLwo/6Xx003iJe2Y=", 1085 | "path": "golang.org/x/sys/windows/registry", 1086 | "revision": "d9157a9621b69ad1d8d77a1933590c416593f24f" 1087 | }, 1088 | { 1089 | "checksumSHA1": "SI3tD1OIe2AnEGQSf2K2ww6CuSU=", 1090 | "path": "golang.org/x/tools/imports", 1091 | "revision": "ac136b6c2db7c4d43955e4bc7174db36dc0539c0", 1092 | "revisionTime": "2018-03-30T18:03:06Z" 1093 | }, 1094 | { 1095 | "checksumSHA1": "HPL4p0mlXy2xjA+lkdKi3ot4QTQ=", 1096 | "path": "google.golang.org/api", 1097 | "revision": "635d9182fa59c5f25a593d01fc44d124d7b62e9c", 1098 | "revisionTime": "2018-04-01T00:04:37Z" 1099 | }, 1100 | { 1101 | "checksumSHA1": "PWaZCeunEzqKVT/5xR0Jrrjq+AU=", 1102 | "path": "google.golang.org/api/compute/v1", 1103 | "revision": "030d584ade5f79aa2ed0ce067e8f7da50c9a10d5" 1104 | }, 1105 | { 1106 | "checksumSHA1": "CaBdtrjXLpyS4rqmSX71d9Kzn2Q=", 1107 | "path": "google.golang.org/api/gensupport", 1108 | "revision": "030d584ade5f79aa2ed0ce067e8f7da50c9a10d5" 1109 | }, 1110 | { 1111 | "checksumSHA1": "hupIPFNz2fd5s/ylwUXFAOiAHMw=", 1112 | "path": "google.golang.org/api/googleapi", 1113 | "revision": "030d584ade5f79aa2ed0ce067e8f7da50c9a10d5" 1114 | }, 1115 | { 1116 | "checksumSHA1": "eLsorWxhTOCOgmV1mVqcrERKn8E=", 1117 | "path": "google.golang.org/api/googleapi/internal/uritemplates", 1118 | "revision": "030d584ade5f79aa2ed0ce067e8f7da50c9a10d5" 1119 | }, 1120 | { 1121 | "checksumSHA1": "CCgvB6xQiReYsJKWQbzJklzrqtY=", 1122 | "path": "google.golang.org/appengine", 1123 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1124 | }, 1125 | { 1126 | "checksumSHA1": "aulAQE9HlL10DHSmCnl99AjKRmY=", 1127 | "path": "google.golang.org/appengine/internal", 1128 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1129 | }, 1130 | { 1131 | "checksumSHA1": "x6Thdfyasqd68dWZWqzWWeIfAfI=", 1132 | "path": "google.golang.org/appengine/internal/app_identity", 1133 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1134 | }, 1135 | { 1136 | "checksumSHA1": "TsNO8P0xUlLNyh3Ic/tzSp/fDWM=", 1137 | "path": "google.golang.org/appengine/internal/base", 1138 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1139 | }, 1140 | { 1141 | "checksumSHA1": "5QsV5oLGSfKZqTCVXP6NRz5T4Tw=", 1142 | "path": "google.golang.org/appengine/internal/datastore", 1143 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1144 | }, 1145 | { 1146 | "checksumSHA1": "Gep2T9zmVYV8qZfK2gu3zrmG6QE=", 1147 | "path": "google.golang.org/appengine/internal/log", 1148 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1149 | }, 1150 | { 1151 | "checksumSHA1": "eLZVX1EHLclFtQnjDIszsdyWRHo=", 1152 | "path": "google.golang.org/appengine/internal/modules", 1153 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1154 | }, 1155 | { 1156 | "checksumSHA1": "a1XY7rz3BieOVqVI2Et6rKiwQCk=", 1157 | "path": "google.golang.org/appengine/internal/remote_api", 1158 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1159 | }, 1160 | { 1161 | "checksumSHA1": "QtAbHtHmDzcf6vOV9eqlCpKgjiw=", 1162 | "path": "google.golang.org/appengine/internal/urlfetch", 1163 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1164 | }, 1165 | { 1166 | "checksumSHA1": "akOV9pYnCbcPA8wJUutSQVibdyg=", 1167 | "path": "google.golang.org/appengine/urlfetch", 1168 | "revision": "6a436539be38c296a8075a871cc536686b458371" 1169 | }, 1170 | { 1171 | "checksumSHA1": "qwyhgjsXRocjqT7mkszb3smcp1g=", 1172 | "path": "google.golang.org/cloud", 1173 | "revision": "975617b05ea8a58727e6c1a06b6161ff4185a9f2" 1174 | }, 1175 | { 1176 | "checksumSHA1": "QneJE5GLhQlbsB03OMBxxHI8w18=", 1177 | "path": "google.golang.org/cloud/compute/metadata", 1178 | "revision": "975617b05ea8a58727e6c1a06b6161ff4185a9f2" 1179 | }, 1180 | { 1181 | "checksumSHA1": "P2NWljHG8UYcw+CFk7pOKuh+NWQ=", 1182 | "path": "google.golang.org/cloud/internal", 1183 | "revision": "975617b05ea8a58727e6c1a06b6161ff4185a9f2" 1184 | }, 1185 | { 1186 | "path": "google.golang.org/cloud/internal/opts", 1187 | "revision": "" 1188 | } 1189 | ], 1190 | "rootPath": "github.com/gstruct/terraform-provider-dockermachine" 1191 | } 1192 | --------------------------------------------------------------------------------