vagrant-bosh 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -6
  3. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/agent-log +0 -0
  4. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/agent-run +0 -0
  5. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/agent.cert +0 -0
  6. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/agent.json +0 -0
  7. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/agent.key +0 -0
  8. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/bosh-agent +0 -0
  9. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/bosh-agent-rc +0 -0
  10. data/{lib/vagrant-bosh → bosh-provisioner}/assets/agent/bosh-blobstore-dav +0 -0
  11. data/bosh-provisioner/assets/bosh-provisioner +0 -0
  12. data/{lib/vagrant-bosh → bosh-provisioner}/assets/monit/monit +0 -0
  13. data/{lib/vagrant-bosh → bosh-provisioner}/assets/monit/monit-log +0 -0
  14. data/{lib/vagrant-bosh → bosh-provisioner}/assets/monit/monit-run +0 -0
  15. data/{lib/vagrant-bosh → bosh-provisioner}/assets/monit/monitrc +0 -0
  16. data/dev/Vagrantfile +1 -1
  17. data/dev/example-bosh-manifest.yml +12 -12
  18. data/lib/vagrant-bosh/bootstrapper.rb +6 -2
  19. data/lib/vagrant-bosh/config.rb +1 -1
  20. data/lib/vagrant-bosh/provisioner.rb +1 -1
  21. data/lib/vagrant-bosh/version.rb +1 -1
  22. data/vagrant-bosh.gemspec +3 -1
  23. metadata +20 -139
  24. data/go/.gitignore +0 -11
  25. data/go/bin/build +0 -10
  26. data/go/bin/build-linux-amd64 +0 -9
  27. data/go/bin/env +0 -13
  28. data/go/bin/go +0 -5
  29. data/go/bin/golint +0 -19
  30. data/go/bin/test +0 -37
  31. data/go/src/boshprovisioner/agent/client/client_interface.go +0 -73
  32. data/go/src/boshprovisioner/agent/client/fakes/fake_client.go +0 -81
  33. data/go/src/boshprovisioner/agent/client/http_client.go +0 -299
  34. data/go/src/boshprovisioner/agent/client/http_client_envelope.go +0 -107
  35. data/go/src/boshprovisioner/deployment/deployment.go +0 -221
  36. data/go/src/boshprovisioner/deployment/instance.go +0 -54
  37. data/go/src/boshprovisioner/deployment/manifest/deployment.go +0 -84
  38. data/go/src/boshprovisioner/deployment/manifest/ips.go +0 -23
  39. data/go/src/boshprovisioner/deployment/manifest/manifest.go +0 -143
  40. data/go/src/boshprovisioner/deployment/manifest/manifest_suite_test.go +0 -13
  41. data/go/src/boshprovisioner/deployment/manifest/manifest_test.go +0 -86
  42. data/go/src/boshprovisioner/deployment/manifest/syntax_validator.go +0 -186
  43. data/go/src/boshprovisioner/deployment/manifest/watch_time.go +0 -43
  44. data/go/src/boshprovisioner/deployment/manifest_reader.go +0 -46
  45. data/go/src/boshprovisioner/deployment/reader_factory.go +0 -25
  46. data/go/src/boshprovisioner/deployment/semantic_validator.go +0 -111
  47. data/go/src/boshprovisioner/downloader/blobstore_downloader.go +0 -55
  48. data/go/src/boshprovisioner/downloader/default_mux_downloader.go +0 -22
  49. data/go/src/boshprovisioner/downloader/downloader_interface.go +0 -6
  50. data/go/src/boshprovisioner/downloader/http_downloader.go +0 -53
  51. data/go/src/boshprovisioner/downloader/local_fs_downloader.go +0 -48
  52. data/go/src/boshprovisioner/downloader/mux_downloader.go +0 -69
  53. data/go/src/boshprovisioner/eventlog/log.go +0 -72
  54. data/go/src/boshprovisioner/eventlog/stage.go +0 -39
  55. data/go/src/boshprovisioner/eventlog/task.go +0 -58
  56. data/go/src/boshprovisioner/index/file_index.go +0 -289
  57. data/go/src/boshprovisioner/index/file_index_test.go +0 -296
  58. data/go/src/boshprovisioner/index/index_interface.go +0 -18
  59. data/go/src/boshprovisioner/index/index_suite_test.go +0 -13
  60. data/go/src/boshprovisioner/instance/instance.go +0 -43
  61. data/go/src/boshprovisioner/instance/instance_provisioner.go +0 -48
  62. data/go/src/boshprovisioner/instance/templatescompiler/concrete_templates_compiler.go +0 -284
  63. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erb_renderer.go +0 -117
  64. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erbrenderer_suite_test.go +0 -13
  65. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/render_properties.go +0 -77
  66. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/render_properties_test.go +0 -193
  67. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/template_evaluation_context.go +0 -85
  68. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/template_evaluation_context_rb.go +0 -155
  69. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_jobs_repository.go +0 -86
  70. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_runtime_packages_repository.go +0 -113
  71. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_template_to_job_repository.go +0 -86
  72. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/jobs_repository_interface.go +0 -49
  73. data/go/src/boshprovisioner/instance/templatescompiler/rendered_archives_compiler.go +0 -81
  74. data/go/src/boshprovisioner/instance/templatescompiler/templates_compiler_interface.go +0 -20
  75. data/go/src/boshprovisioner/instance/templatescompiler/templatesrepo/ct_repository.go +0 -54
  76. data/go/src/boshprovisioner/instance/templatescompiler/templatesrepo/templates_repository_interface.go +0 -16
  77. data/go/src/boshprovisioner/instance/updater/applier/applier.go +0 -93
  78. data/go/src/boshprovisioner/instance/updater/applier/empty_state.go +0 -66
  79. data/go/src/boshprovisioner/instance/updater/applier/job_state.go +0 -178
  80. data/go/src/boshprovisioner/instance/updater/drainer.go +0 -72
  81. data/go/src/boshprovisioner/instance/updater/starter.go +0 -36
  82. data/go/src/boshprovisioner/instance/updater/stopper.go +0 -36
  83. data/go/src/boshprovisioner/instance/updater/updater.go +0 -97
  84. data/go/src/boshprovisioner/instance/updater/updater_factory.go +0 -80
  85. data/go/src/boshprovisioner/instance/updater/updater_suite_test.go +0 -13
  86. data/go/src/boshprovisioner/instance/updater/waiter.go +0 -77
  87. data/go/src/boshprovisioner/instance/updater/waiter_test.go +0 -147
  88. data/go/src/boshprovisioner/main/config.go +0 -95
  89. data/go/src/boshprovisioner/main/config_test.go +0 -67
  90. data/go/src/boshprovisioner/main/main.go +0 -185
  91. data/go/src/boshprovisioner/main/main_suite_test.go +0 -13
  92. data/go/src/boshprovisioner/main/repos_factory.go +0 -86
  93. data/go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/compiled_packages_repository_interface.go +0 -17
  94. data/go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/concrete_compiled_packages_repository.go +0 -61
  95. data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler.go +0 -179
  96. data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler_factory.go +0 -48
  97. data/go/src/boshprovisioner/packagescompiler/packages_compiler_interface.go +0 -20
  98. data/go/src/boshprovisioner/packagescompiler/packagesrepo/concrete_packages_repository.go +0 -65
  99. data/go/src/boshprovisioner/packagescompiler/packagesrepo/packages_repository_interface.go +0 -16
  100. data/go/src/boshprovisioner/provisioner/blobstore_config.go +0 -65
  101. data/go/src/boshprovisioner/provisioner/blobstore_provisioner.go +0 -38
  102. data/go/src/boshprovisioner/provisioner/deployment_provisioner_interface.go +0 -10
  103. data/go/src/boshprovisioner/provisioner/release_compiler.go +0 -95
  104. data/go/src/boshprovisioner/provisioner/single_configured_vm_provisioner.go +0 -124
  105. data/go/src/boshprovisioner/provisioner/single_non_configured_vm_provisioner.go +0 -40
  106. data/go/src/boshprovisioner/provisioner/single_vm_provisioner_factory.go +0 -68
  107. data/go/src/boshprovisioner/release/dir_reader.go +0 -146
  108. data/go/src/boshprovisioner/release/job/job.go +0 -86
  109. data/go/src/boshprovisioner/release/job/manifest/manifest.go +0 -79
  110. data/go/src/boshprovisioner/release/job/manifest/manifest_suite_test.go +0 -13
  111. data/go/src/boshprovisioner/release/job/manifest/manifest_test.go +0 -59
  112. data/go/src/boshprovisioner/release/job/manifest/syntax_validator.go +0 -43
  113. data/go/src/boshprovisioner/release/job/reader_factory.go +0 -34
  114. data/go/src/boshprovisioner/release/job/tar_reader.go +0 -133
  115. data/go/src/boshprovisioner/release/manifest/manifest.go +0 -120
  116. data/go/src/boshprovisioner/release/manifest/manifest_suite_test.go +0 -13
  117. data/go/src/boshprovisioner/release/manifest/manifest_test.go +0 -126
  118. data/go/src/boshprovisioner/release/manifest/syntax_validator.go +0 -134
  119. data/go/src/boshprovisioner/release/reader_factory.go +0 -45
  120. data/go/src/boshprovisioner/release/reader_interface.go +0 -6
  121. data/go/src/boshprovisioner/release/release.go +0 -144
  122. data/go/src/boshprovisioner/release/release_suite_test.go +0 -13
  123. data/go/src/boshprovisioner/release/release_test.go +0 -129
  124. data/go/src/boshprovisioner/release/tar_reader.go +0 -141
  125. data/go/src/boshprovisioner/tar/cmd_compressor.go +0 -68
  126. data/go/src/boshprovisioner/tar/cmd_extractor.go +0 -47
  127. data/go/src/boshprovisioner/tar/compressor_interface.go +0 -6
  128. data/go/src/boshprovisioner/tar/extractor_interface.go +0 -6
  129. data/go/src/boshprovisioner/util/possible_base64.go +0 -21
  130. data/go/src/boshprovisioner/util/string_keyed.go +0 -70
  131. data/go/src/boshprovisioner/vm/vagrant/agent_provisioner.go +0 -296
  132. data/go/src/boshprovisioner/vm/vagrant/asset_manager.go +0 -61
  133. data/go/src/boshprovisioner/vm/vagrant/configured_vm.go +0 -29
  134. data/go/src/boshprovisioner/vm/vagrant/deps_provisioner.go +0 -214
  135. data/go/src/boshprovisioner/vm/vagrant/monit_provisioner.go +0 -85
  136. data/go/src/boshprovisioner/vm/vagrant/non_configured_vm.go +0 -26
  137. data/go/src/boshprovisioner/vm/vagrant/runit_provisioner.go +0 -229
  138. data/go/src/boshprovisioner/vm/vagrant/simple_cmds.go +0 -54
  139. data/go/src/boshprovisioner/vm/vagrant/vcap_user_provisioner.go +0 -167
  140. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner.go +0 -119
  141. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner_factory.go +0 -101
  142. data/go/src/boshprovisioner/vm/vm_interface.go +0 -45
  143. data/lib/vagrant-bosh/assets/provisioner +0 -0
data/go/bin/env DELETED
@@ -1,13 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -e
4
-
5
- base=$( cd "$( dirname "$( dirname "$0" )")" && pwd )
6
-
7
- go_agent_base=$( cd "$( dirname "$base" )" && cd bosh/go_agent && pwd )
8
-
9
- export GOPATH=$base:$go_agent_base
10
- export GOBIN=$base/gobin
11
- export PATH=$PATH:$base/gobin
12
-
13
- exec $@
data/go/bin/go DELETED
@@ -1,5 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -e
4
-
5
- exec $(dirname $0)/env go $@
data/go/bin/golint DELETED
@@ -1,19 +0,0 @@
1
- #!/bin/bash
2
-
3
- BINDIR=$(dirname $0)
4
- BASEDIR=$(dirname $BINDIR)
5
-
6
- $BINDIR/go install github.com/golang/lint/golint
7
-
8
- export PATH=$PATH:$($BINDIR/go env GOBIN)
9
-
10
- errors=$(
11
- golint $BASEDIR/src/boshprovisioner \
12
- | grep -v -e 'should have comment.* or be unexported' \
13
- | grep -v 'error strings should not be capitalized'
14
- )
15
-
16
- if [ "$(echo -n "$errors")" != "" ]; then
17
- echo "$errors"
18
- exit 1
19
- fi
data/go/bin/test DELETED
@@ -1,37 +0,0 @@
1
- #!/bin/bash
2
-
3
- result=0
4
-
5
- bin=$(dirname $0)
6
-
7
- echo -e "\n Formatting packages..."
8
- $bin/go fmt boshprovisioner/...
9
- let "result+=$?"
10
-
11
- echo -e "\n Installing ginkgo..."
12
- $bin/go install github.com/onsi/ginkgo/ginkgo
13
- let "result+=$?"
14
-
15
- echo -e "\n Testing packages..."
16
- $bin/env ginkgo -r $bin/../src/boshprovisioner
17
- let "result+=$?"
18
-
19
- echo -e "\n Vetting packages for potential issues..."
20
- $bin/go vet boshprovisioner/...
21
- let "result+=$?"
22
-
23
- echo -e "\n Checking with golint..."
24
- $bin/golint
25
- let "result+=$?"
26
-
27
- echo -e "\n Running build script to confirm everything compiles..."
28
- $bin/build-linux-amd64
29
- let "result+=$?"
30
-
31
- if [ $result -eq 0 ]; then
32
- echo -e "\nSUITE SUCCESS"
33
- else
34
- echo -e "\nSUITE FAILURE"
35
- fi
36
-
37
- exit $result
@@ -1,73 +0,0 @@
1
- package client
2
-
3
- import (
4
- boshaction "bosh/agent/action"
5
- boshas "bosh/agent/applier/applyspec"
6
- boshcomp "bosh/agent/compiler"
7
- )
8
-
9
- type Client interface {
10
- TaskManager
11
- VMAdministrator
12
- StateManager
13
- JobManager
14
- PackageCompiler
15
- DiskManager
16
- NetworkManager
17
- }
18
-
19
- type TaskManager interface {
20
- Ping() (string, error)
21
- GetTask(string) (interface{}, error)
22
- CancelTask(string) (string, error)
23
- }
24
-
25
- // VMAdministrator provides administrative API for the agent
26
- // todo eliminate remaining param names
27
- type VMAdministrator interface {
28
- SSH(cmd string, params boshaction.SshParams) (map[string]interface{}, error)
29
- FetchLogs(logType string, filters []string) (map[string]interface{}, error)
30
- }
31
-
32
- type StateManager interface {
33
- Prepare(boshas.V1ApplySpec) (string, error)
34
- Apply(boshas.V1ApplySpec) (string, error)
35
- GetState(filters ...string) (boshaction.GetStateV1ApplySpec, error)
36
- }
37
-
38
- type JobManager interface {
39
- Start() (string, error)
40
- Stop() (string, error)
41
- Drain(boshaction.DrainType, ...boshas.V1ApplySpec) (int, error)
42
- RunErrand() (boshaction.ErrandResult, error)
43
- }
44
-
45
- // CompiledPackage keeps information about compiled package asset
46
- // todo move into agent
47
- type CompiledPackage struct {
48
- BlobID string `json:"blobstore_id"`
49
- SHA1 string `json:"sha1"`
50
- }
51
-
52
- type PackageCompiler interface {
53
- CompilePackage(
54
- blobID string,
55
- sha1 string,
56
- name string,
57
- version string,
58
- deps boshcomp.Dependencies,
59
- ) (CompiledPackage, error)
60
- }
61
-
62
- type DiskManager interface {
63
- // ListDisk(...)
64
- // MigrateDisk(...)
65
- // MountDisk(...)
66
- // UnmountDisk(...)
67
- }
68
-
69
- type NetworkManager interface {
70
- // PrepareNetworkChange(...)
71
- // PrepareConfigureNetworks(...)
72
- // ConfigureNetworks(...)
73
- }
@@ -1,81 +0,0 @@
1
- package fakes
2
-
3
- import (
4
- boshaction "bosh/agent/action"
5
- boshas "bosh/agent/applier/applyspec"
6
- boshcomp "bosh/agent/compiler"
7
- bosherr "bosh/errors"
8
-
9
- bpagclient "boshprovisioner/agent/client"
10
- )
11
-
12
- type FakeClient struct {
13
- GetStateState boshaction.GetStateV1ApplySpec
14
- GetStateStates []boshaction.GetStateV1ApplySpec
15
- GetStateErr error
16
- }
17
-
18
- func (c *FakeClient) Ping() (string, error) {
19
- return "", bosherr.New("fake-ping-err")
20
- }
21
-
22
- func (c *FakeClient) GetTask(string) (interface{}, error) {
23
- return "", bosherr.New("fake-get-task-err")
24
- }
25
-
26
- func (c *FakeClient) CancelTask(string) (string, error) {
27
- return "", bosherr.New("fake-cancel-task-err")
28
- }
29
-
30
- func (c *FakeClient) SSH(cmd string, params boshaction.SshParams) (map[string]interface{}, error) {
31
- return nil, bosherr.New("fake-ssh-err")
32
- }
33
-
34
- func (c *FakeClient) FetchLogs(logType string, filters []string) (map[string]interface{}, error) {
35
- return nil, bosherr.New("fake-fetch-logs-err")
36
- }
37
-
38
- func (c *FakeClient) Prepare(boshas.V1ApplySpec) (string, error) {
39
- return "", bosherr.New("fake-prepare-err")
40
- }
41
-
42
- func (c *FakeClient) Apply(boshas.V1ApplySpec) (string, error) {
43
- return "", bosherr.New("fake-apply-err")
44
- }
45
-
46
- func (c *FakeClient) GetState(filters ...string) (boshaction.GetStateV1ApplySpec, error) {
47
- state := c.GetStateState
48
-
49
- if c.GetStateStates != nil {
50
- state = c.GetStateStates[0]
51
- c.GetStateStates = c.GetStateStates[1:]
52
- }
53
-
54
- return state, c.GetStateErr
55
- }
56
-
57
- func (c *FakeClient) Start() (string, error) {
58
- return "", bosherr.New("fake-start-err")
59
- }
60
-
61
- func (c *FakeClient) Stop() (string, error) {
62
- return "", bosherr.New("fake-stop-err")
63
- }
64
-
65
- func (c *FakeClient) Drain(boshaction.DrainType, ...boshas.V1ApplySpec) (int, error) {
66
- return 0, bosherr.New("fake-drain-err")
67
- }
68
-
69
- func (c *FakeClient) RunErrand() (boshaction.ErrandResult, error) {
70
- return boshaction.ErrandResult{}, bosherr.New("fake-run-errand-err")
71
- }
72
-
73
- func (c *FakeClient) CompilePackage(
74
- blobID string,
75
- sha1 string,
76
- name string,
77
- version string,
78
- deps boshcomp.Dependencies,
79
- ) (bpagclient.CompiledPackage, error) {
80
- return bpagclient.CompiledPackage{}, bosherr.New("fake-ping-err")
81
- }
@@ -1,299 +0,0 @@
1
- package client
2
-
3
- import (
4
- "crypto/tls"
5
- "encoding/json"
6
- "io/ioutil"
7
- "net/http"
8
- "net/url"
9
- "strings"
10
- "time"
11
-
12
- boshaction "bosh/agent/action"
13
- boshas "bosh/agent/applier/applyspec"
14
- boshcomp "bosh/agent/compiler"
15
- bosherr "bosh/errors"
16
- boshlog "bosh/logger"
17
- )
18
-
19
- const httpClientLogTag = "HTTPClient"
20
-
21
- type HTTPRequester interface {
22
- Do(*http.Request) (*http.Response, error)
23
- }
24
-
25
- type HTTPClient struct {
26
- url *url.URL
27
- requester HTTPRequester
28
- logger boshlog.Logger
29
-
30
- // Alias to method calls for convenience
31
- quickRequest requestFunc
32
- longRequest requestFunc
33
- }
34
-
35
- type requestFunc func(reqMethod, reqArgs) (responseEnvelope, error)
36
-
37
- func NewInsecureHTTPClientWithURI(uri string, logger boshlog.Logger) (HTTPClient, error) {
38
- mTLSConfig := &tls.Config{InsecureSkipVerify: true}
39
- transport := &http.Transport{TLSClientConfig: mTLSConfig}
40
- httpRequester := &http.Client{Transport: transport}
41
- return NewHTTPClientWithURI(uri, httpRequester, logger)
42
- }
43
-
44
- func NewHTTPClientWithURI(uri string, requester HTTPRequester, logger boshlog.Logger) (HTTPClient, error) {
45
- url, err := url.ParseRequestURI(uri)
46
- if err != nil {
47
- return HTTPClient{}, bosherr.WrapError(err, "Parsing request uri")
48
- }
49
-
50
- return NewHTTPClient(url, requester, logger), nil
51
- }
52
-
53
- func NewHTTPClient(url *url.URL, requester HTTPRequester, logger boshlog.Logger) HTTPClient {
54
- client := HTTPClient{
55
- url: url,
56
- requester: requester,
57
- logger: logger,
58
- }
59
-
60
- client.quickRequest = client.makeQuickRequest
61
- client.longRequest = client.makeLongRequest
62
-
63
- return client
64
- }
65
-
66
- func (ac HTTPClient) Ping() (string, error) {
67
- return ac.makeStringRequest(ac.quickRequest, "ping", reqArgs{})
68
- }
69
-
70
- func (ac HTTPClient) GetTask(taskID string) (interface{}, error) {
71
- val, err := ac.makeQuickRequest("get_task", reqArgs{taskID})
72
- if err != nil {
73
- return nil, bosherr.WrapError(err, "makeRequest")
74
- }
75
-
76
- return val.MapValue()
77
- }
78
-
79
- func (ac HTTPClient) CancelTask(taskID string) (string, error) {
80
- return ac.makeStringRequest(ac.quickRequest, "cancel_task", reqArgs{taskID})
81
- }
82
-
83
- func (ac HTTPClient) SSH(cmd string, params boshaction.SshParams) (map[string]interface{}, error) {
84
- val, err := ac.makeQuickRequest("ssh", reqArgs{cmd, params})
85
- if err != nil {
86
- return nil, bosherr.WrapError(err, "makeRequest")
87
- }
88
-
89
- return val.MapValue()
90
- }
91
-
92
- func (ac HTTPClient) FetchLogs(logType string, filters []string) (map[string]interface{}, error) {
93
- val, err := ac.makeLongRequest("fetch_logs", reqArgs{logType, filters})
94
- if err != nil {
95
- return nil, bosherr.WrapError(err, "makeRequest")
96
- }
97
-
98
- return val.MapValue()
99
- }
100
-
101
- func (ac HTTPClient) Prepare(desiredSpec boshas.V1ApplySpec) (string, error) {
102
- return ac.makeStringRequest(ac.longRequest, "prepare", reqArgs{desiredSpec})
103
- }
104
-
105
- func (ac HTTPClient) Apply(desiredSpec boshas.V1ApplySpec) (string, error) {
106
- return ac.makeStringRequest(ac.longRequest, "apply", reqArgs{desiredSpec})
107
- }
108
-
109
- func (ac HTTPClient) Start() (string, error) {
110
- return ac.makeStringRequest(ac.quickRequest, "start", reqArgs{})
111
- }
112
-
113
- func (ac HTTPClient) Stop() (string, error) {
114
- return ac.makeStringRequest(ac.longRequest, "stop", reqArgs{})
115
- }
116
-
117
- func (ac HTTPClient) Drain(drainType boshaction.DrainType, newSpecs ...boshas.V1ApplySpec) (int, error) {
118
- var result int
119
-
120
- args := reqArgs{drainType}
121
-
122
- for _, newSpec := range newSpecs {
123
- args = append(args, newSpec)
124
- }
125
-
126
- val, err := ac.makeLongRequest("drain", args)
127
- if err != nil {
128
- return result, bosherr.WrapError(err, "makeRequest")
129
- }
130
-
131
- err = val.CustomValue(&result)
132
- if err != nil {
133
- return result, bosherr.WrapError(err, "Converting response to int")
134
- }
135
-
136
- return result, nil
137
- }
138
-
139
- func (ac HTTPClient) GetState(filters ...string) (boshaction.GetStateV1ApplySpec, error) {
140
- var result boshaction.GetStateV1ApplySpec
141
-
142
- args := reqArgs{}
143
-
144
- for _, filter := range filters {
145
- args = append(args, filter)
146
- }
147
-
148
- val, err := ac.makeQuickRequest("get_state", args)
149
- if err != nil {
150
- return result, bosherr.WrapError(err, "makeRequest")
151
- }
152
-
153
- err = val.CustomValue(&result)
154
- if err != nil {
155
- return result, bosherr.WrapError(err, "Converting response to apply spec")
156
- }
157
-
158
- return result, nil
159
- }
160
-
161
- func (ac HTTPClient) RunErrand() (boshaction.ErrandResult, error) {
162
- var result errandResultEnvelope
163
-
164
- val, err := ac.makeLongRequest("run_errand", reqArgs{})
165
- if err != nil {
166
- return result.Result, bosherr.WrapError(err, "makeRequest")
167
- }
168
-
169
- err = val.CustomValue(&result)
170
- if err != nil {
171
- return result.Result, bosherr.WrapError(
172
- err, "Converting response to errand result")
173
- }
174
-
175
- return result.Result, nil
176
- }
177
-
178
- func (ac HTTPClient) CompilePackage(blobID, sha1, name, version string, deps boshcomp.Dependencies) (CompiledPackage, error) {
179
- var result compiledPackageEnvelope
180
-
181
- val, err := ac.makeLongRequest(
182
- "compile_package",
183
- reqArgs{blobID, sha1, name, version, deps},
184
- )
185
- if err != nil {
186
- return result.Result, bosherr.WrapError(err, "makeRequest")
187
- }
188
-
189
- err = val.CustomValue(&result)
190
- if err != nil {
191
- return result.Result, bosherr.WrapError(
192
- err, "Converting response to errand result")
193
- }
194
-
195
- return result.Result, nil
196
- }
197
-
198
- func (ac HTTPClient) makeStringRequest(f requestFunc, method reqMethod, args reqArgs) (string, error) {
199
- val, err := f(method, args)
200
- if err != nil {
201
- return "", bosherr.WrapError(err, "makeXRequest")
202
- }
203
-
204
- return val.StringValue()
205
- }
206
-
207
- func (ac HTTPClient) makeLongRequest(method reqMethod, args reqArgs) (responseEnvelope, error) {
208
- val, err := ac.makeQuickRequest(method, args)
209
- if err != nil {
210
- return responseEnvelope{}, bosherr.WrapError(err, "makeRequest")
211
- }
212
-
213
- for {
214
- taskID, found := val.TaskID()
215
- if !found {
216
- return val, nil
217
- }
218
-
219
- time.Sleep(1 * time.Second)
220
-
221
- val, err = ac.makeQuickRequest("get_task", reqArgs{taskID})
222
- if err != nil {
223
- return responseEnvelope{}, bosherr.WrapError(err, "makeRequest")
224
- }
225
- }
226
- }
227
-
228
- func (ac HTTPClient) makeQuickRequest(method reqMethod, args reqArgs) (responseEnvelope, error) {
229
- var responseBody responseEnvelope
230
-
231
- requestBody := requestEnvelope{
232
- Method: method,
233
- Arguments: args,
234
- ReplyTo: "n-a",
235
- }
236
-
237
- requestBytes, err := json.Marshal(requestBody)
238
- if err != nil {
239
- return responseBody, bosherr.WrapError(err, "Marshalling request body")
240
- }
241
-
242
- responseBytes, err := ac.makePlainRequest(string(requestBytes), "application/json")
243
- if err != nil {
244
- return responseBody, bosherr.WrapError(err, "Making plain request")
245
- }
246
-
247
- err = json.Unmarshal(responseBytes, &responseBody)
248
- if err != nil {
249
- return responseBody, bosherr.WrapError(err, "Unmarshalling response body")
250
- }
251
-
252
- if responseBody.HasException() {
253
- return responseBody, bosherr.New("Ended with exception %#v", responseBody.Exception)
254
- }
255
-
256
- return responseBody, nil
257
- }
258
-
259
- func (ac HTTPClient) makePlainRequest(requestBody, contentType string) ([]byte, error) {
260
- ac.logger.Debug(httpClientLogTag, "Making request url=%s", ac.url.String())
261
-
262
- ac.logger.DebugWithDetails(httpClientLogTag, "Request body", requestBody)
263
-
264
- request, err := http.NewRequest("POST", "", strings.NewReader(requestBody))
265
- if err != nil {
266
- return []byte{}, bosherr.WrapError(err, "Building request")
267
- }
268
-
269
- // Basic auth credentials are retrieved from the url
270
- request.URL = ac.url
271
-
272
- request.Header.Set("Content-Type", contentType)
273
-
274
- response, err := ac.requester.Do(request)
275
- if err != nil {
276
- if response != nil {
277
- ac.logger.Error(httpClientLogTag,
278
- "Received error=%v (response=%d)", err, response.StatusCode)
279
- } else {
280
- ac.logger.Error(httpClientLogTag,
281
- "Received error=%v (no response)", err)
282
- }
283
- return []byte{}, bosherr.WrapError(err, "Making request failed")
284
- }
285
-
286
- ac.logger.Debug(httpClientLogTag,
287
- "Received response status=%d", response.StatusCode)
288
-
289
- defer response.Body.Close()
290
-
291
- responseBytes, err := ioutil.ReadAll(response.Body)
292
- if err != nil {
293
- return nil, bosherr.WrapError(err, "Reading response body")
294
- }
295
-
296
- ac.logger.DebugWithDetails(httpClientLogTag, "Response body", responseBytes)
297
-
298
- return responseBytes, nil
299
- }