vagrant-bosh 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.gitmodules +6 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +20 -0
  6. data/README.md +73 -0
  7. data/Rakefile +2 -0
  8. data/dev/.gitignore +1 -0
  9. data/dev/Vagrantfile +30 -0
  10. data/dev/example-bosh-manifest.yml +188 -0
  11. data/dev/example-winston-manifest.yml +70 -0
  12. data/go/.gitignore +11 -0
  13. data/go/bin/build +10 -0
  14. data/go/bin/build-linux-amd64 +9 -0
  15. data/go/bin/env +13 -0
  16. data/go/bin/go +5 -0
  17. data/go/bin/golint +19 -0
  18. data/go/bin/test +37 -0
  19. data/go/src/boshprovisioner/agent/client/client_interface.go +73 -0
  20. data/go/src/boshprovisioner/agent/client/fakes/fake_client.go +81 -0
  21. data/go/src/boshprovisioner/agent/client/http_client.go +299 -0
  22. data/go/src/boshprovisioner/agent/client/http_client_envelope.go +107 -0
  23. data/go/src/boshprovisioner/deployment/deployment.go +221 -0
  24. data/go/src/boshprovisioner/deployment/instance.go +54 -0
  25. data/go/src/boshprovisioner/deployment/manifest/deployment.go +80 -0
  26. data/go/src/boshprovisioner/deployment/manifest/ips.go +23 -0
  27. data/go/src/boshprovisioner/deployment/manifest/manifest.go +143 -0
  28. data/go/src/boshprovisioner/deployment/manifest/manifest_suite_test.go +13 -0
  29. data/go/src/boshprovisioner/deployment/manifest/manifest_test.go +86 -0
  30. data/go/src/boshprovisioner/deployment/manifest/syntax_validator.go +186 -0
  31. data/go/src/boshprovisioner/deployment/manifest/watch_time.go +47 -0
  32. data/go/src/boshprovisioner/deployment/manifest_reader.go +46 -0
  33. data/go/src/boshprovisioner/deployment/reader_factory.go +25 -0
  34. data/go/src/boshprovisioner/deployment/semantic_validator.go +111 -0
  35. data/go/src/boshprovisioner/downloader/blobstore_downloader.go +55 -0
  36. data/go/src/boshprovisioner/downloader/default_mux_downloader.go +22 -0
  37. data/go/src/boshprovisioner/downloader/downloader_interface.go +6 -0
  38. data/go/src/boshprovisioner/downloader/http_downloader.go +53 -0
  39. data/go/src/boshprovisioner/downloader/local_fs_downloader.go +48 -0
  40. data/go/src/boshprovisioner/downloader/mux_downloader.go +69 -0
  41. data/go/src/boshprovisioner/eventlog/log.go +72 -0
  42. data/go/src/boshprovisioner/eventlog/stage.go +39 -0
  43. data/go/src/boshprovisioner/eventlog/task.go +58 -0
  44. data/go/src/boshprovisioner/index/file_index.go +289 -0
  45. data/go/src/boshprovisioner/index/file_index_test.go +296 -0
  46. data/go/src/boshprovisioner/index/index_interface.go +18 -0
  47. data/go/src/boshprovisioner/index/index_suite_test.go +13 -0
  48. data/go/src/boshprovisioner/instance/templatescompiler/concrete_templates_compiler.go +273 -0
  49. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erb_renderer.go +117 -0
  50. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erbrenderer_suite_test.go +13 -0
  51. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/render_properties.go +77 -0
  52. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/render_properties_test.go +142 -0
  53. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/template_evaluation_context.go +85 -0
  54. data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/template_evaluation_context_rb.go +155 -0
  55. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_jobs_repository.go +64 -0
  56. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_runtime_packages_repository.go +105 -0
  57. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_template_to_job_repository.go +76 -0
  58. data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/jobs_repository_interface.go +31 -0
  59. data/go/src/boshprovisioner/instance/templatescompiler/rendered_archives_compiler.go +81 -0
  60. data/go/src/boshprovisioner/instance/templatescompiler/templates_compiler_interface.go +20 -0
  61. data/go/src/boshprovisioner/instance/templatescompiler/templatesrepo/ct_repository.go +54 -0
  62. data/go/src/boshprovisioner/instance/templatescompiler/templatesrepo/templates_repository_interface.go +16 -0
  63. data/go/src/boshprovisioner/instance/updater/applier/applier.go +93 -0
  64. data/go/src/boshprovisioner/instance/updater/applier/empty_state.go +66 -0
  65. data/go/src/boshprovisioner/instance/updater/applier/job_state.go +178 -0
  66. data/go/src/boshprovisioner/instance/updater/drainer.go +72 -0
  67. data/go/src/boshprovisioner/instance/updater/preparer.go +39 -0
  68. data/go/src/boshprovisioner/instance/updater/starter.go +36 -0
  69. data/go/src/boshprovisioner/instance/updater/stopper.go +36 -0
  70. data/go/src/boshprovisioner/instance/updater/updater.go +102 -0
  71. data/go/src/boshprovisioner/instance/updater/updater_factory.go +83 -0
  72. data/go/src/boshprovisioner/instance/updater/updater_suite_test.go +13 -0
  73. data/go/src/boshprovisioner/instance/updater/waiter.go +77 -0
  74. data/go/src/boshprovisioner/instance/updater/waiter_test.go +103 -0
  75. data/go/src/boshprovisioner/main/config.go +77 -0
  76. data/go/src/boshprovisioner/main/main.go +183 -0
  77. data/go/src/boshprovisioner/main/repos_factory.go +96 -0
  78. data/go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/compiled_packages_repository_interface.go +17 -0
  79. data/go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/concrete_compiled_packages_repository.go +61 -0
  80. data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler.go +179 -0
  81. data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler_factory.go +48 -0
  82. data/go/src/boshprovisioner/packagescompiler/packages_compiler_interface.go +20 -0
  83. data/go/src/boshprovisioner/packagescompiler/packagesrepo/concrete_packages_repository.go +65 -0
  84. data/go/src/boshprovisioner/packagescompiler/packagesrepo/packages_repository_interface.go +16 -0
  85. data/go/src/boshprovisioner/provisioner/blobstore_config.go +65 -0
  86. data/go/src/boshprovisioner/provisioner/blobstore_provisioner.go +38 -0
  87. data/go/src/boshprovisioner/provisioner/deployment_provisioner.go +97 -0
  88. data/go/src/boshprovisioner/provisioner/instance_provisioner.go +48 -0
  89. data/go/src/boshprovisioner/provisioner/release_compiler.go +133 -0
  90. data/go/src/boshprovisioner/release/job/job.go +86 -0
  91. data/go/src/boshprovisioner/release/job/manifest/manifest.go +79 -0
  92. data/go/src/boshprovisioner/release/job/manifest/manifest_suite_test.go +13 -0
  93. data/go/src/boshprovisioner/release/job/manifest/manifest_test.go +42 -0
  94. data/go/src/boshprovisioner/release/job/manifest/syntax_validator.go +43 -0
  95. data/go/src/boshprovisioner/release/job/reader_factory.go +34 -0
  96. data/go/src/boshprovisioner/release/job/tar_reader.go +133 -0
  97. data/go/src/boshprovisioner/release/manifest/manifest.go +96 -0
  98. data/go/src/boshprovisioner/release/manifest_reader.go +29 -0
  99. data/go/src/boshprovisioner/release/reader_factory.go +34 -0
  100. data/go/src/boshprovisioner/release/release.go +144 -0
  101. data/go/src/boshprovisioner/release/release_suite_test.go +13 -0
  102. data/go/src/boshprovisioner/release/release_test.go +129 -0
  103. data/go/src/boshprovisioner/release/tar_reader.go +139 -0
  104. data/go/src/boshprovisioner/releasesrepo/blobstore_releases_repository.go +114 -0
  105. data/go/src/boshprovisioner/releasesrepo/releases_repository_interface.go +15 -0
  106. data/go/src/boshprovisioner/tar/cmd_compressor.go +68 -0
  107. data/go/src/boshprovisioner/tar/cmd_extractor.go +47 -0
  108. data/go/src/boshprovisioner/tar/compressor_interface.go +6 -0
  109. data/go/src/boshprovisioner/tar/extractor_interface.go +6 -0
  110. data/go/src/boshprovisioner/util/string_keyed.go +70 -0
  111. data/go/src/boshprovisioner/vm/agent_provisioner.go +266 -0
  112. data/go/src/boshprovisioner/vm/asset_manager.go +61 -0
  113. data/go/src/boshprovisioner/vm/deps_provisioner.go +92 -0
  114. data/go/src/boshprovisioner/vm/monit_provisioner.go +83 -0
  115. data/go/src/boshprovisioner/vm/runit_provisioner.go +225 -0
  116. data/go/src/boshprovisioner/vm/simple_cmds.go +54 -0
  117. data/go/src/boshprovisioner/vm/vcap_user_provisioner.go +120 -0
  118. data/go/src/boshprovisioner/vm/vm.go +19 -0
  119. data/go/src/boshprovisioner/vm/vm_provisioner.go +57 -0
  120. data/go/src/boshprovisioner/vm/vm_provisioner_factory.go +97 -0
  121. data/lib/vagrant-bosh/asset_uploader.rb +53 -0
  122. data/lib/vagrant-bosh/assets/agent/agent-log +5 -0
  123. data/lib/vagrant-bosh/assets/agent/agent-run +12 -0
  124. data/lib/vagrant-bosh/assets/agent/agent.cert +18 -0
  125. data/lib/vagrant-bosh/assets/agent/agent.json +9 -0
  126. data/lib/vagrant-bosh/assets/agent/agent.key +27 -0
  127. data/lib/vagrant-bosh/assets/agent/bosh-agent +0 -0
  128. data/lib/vagrant-bosh/assets/agent/bosh-agent-rc +18 -0
  129. data/lib/vagrant-bosh/assets/agent/bosh-blobstore-dav +0 -0
  130. data/lib/vagrant-bosh/assets/monit/monit +0 -0
  131. data/lib/vagrant-bosh/assets/monit/monit-log +5 -0
  132. data/lib/vagrant-bosh/assets/monit/monit-run +9 -0
  133. data/lib/vagrant-bosh/assets/monit/monitrc +8 -0
  134. data/lib/vagrant-bosh/assets/provisioner +0 -0
  135. data/lib/vagrant-bosh/bootstrapper.rb +59 -0
  136. data/lib/vagrant-bosh/communicator.rb +50 -0
  137. data/lib/vagrant-bosh/config.rb +15 -0
  138. data/lib/vagrant-bosh/errors.rb +11 -0
  139. data/lib/vagrant-bosh/plugin.rb +25 -0
  140. data/lib/vagrant-bosh/provisioner.rb +46 -0
  141. data/lib/vagrant-bosh/provisioner_tracker.rb +41 -0
  142. data/lib/vagrant-bosh/ui.rb +77 -0
  143. data/lib/vagrant-bosh/version.rb +5 -0
  144. data/lib/vagrant-bosh.rb +15 -0
  145. data/templates/locales/en.yml +15 -0
  146. data/vagrant-bosh.gemspec +20 -0
  147. metadata +191 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: efc32c9ec7924465b7ecb3ddeef08cd47e6d1eb4
4
+ data.tar.gz: 9560d462714efd859191da51ee22c37ed4d5cb67
5
+ SHA512:
6
+ metadata.gz: b84f34a4a5ad470c17c3528be1335cd254b674dbcc24da43e74077afdcf2fc2c67a0dbf18e64ddef73c1931e699ebc3e6bd2a18659ce025bc10807ab4fd820b4
7
+ data.tar.gz: c5abbab55e5ca3bf253b53f4d12bbce3c5c3a9e01815e7543b0e4ca253e5b63342a73b1e39b3fa360220503c369231cb4dc4ab8fc44fc379e901b1ee404e6569
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ *.DS_Store
2
+ *.sublime-project
3
+ *.sublime-workspace
4
+
5
+ /pkg/
6
+
7
+ *.gem
8
+ *.tgz
9
+
10
+ *~
11
+
12
+ .vagrant
data/.gitmodules ADDED
@@ -0,0 +1,6 @@
1
+ [submodule "bosh"]
2
+ path = bosh
3
+ url = https://github.com/cloudfoundry/bosh.git
4
+ [submodule "go/src/github.com/fraenkel/candiedyaml"]
5
+ path = go/src/github.com/fraenkel/candiedyaml
6
+ url = https://github.com/fraenkel/candiedyaml.git
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Dmitriy Kalinin
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ ## BOSH provisioner for Vagrant
2
+
3
+ BOSH provisioner allows to provision guest VM by specifying regular BOSH deployment manifest.
4
+
5
+
6
+ ### Usage
7
+
8
+ 1. Add new VM provision section to your `Vagrantfile`. For example:
9
+
10
+ ```
11
+ Vagrant.configure("2") do |config|
12
+ config.vm.box = "precise64"
13
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
14
+
15
+ config.vm.network "forwarded_port", guest: 25555, host: 25555 # for BOSH Director API
16
+
17
+ config.vm.provider "virtualbox" do |v|
18
+ v.memory = 4096
19
+ v.cpus = 2
20
+ end
21
+
22
+ config.vm.provision "bosh" do |c|
23
+ # use cat or just inline full deployment manifest
24
+ c.manifest = `cat somewhere/example-bosh-manifest.yml`
25
+ end
26
+ end
27
+ ```
28
+
29
+ 2. Create a deployment manifest and specify it via `c.manifest` attribute.
30
+ See `dev/example-bosh-manifest.yml` for an example deployment manifest used to deploy BOSH Director.
31
+
32
+ 3. Run `vagrant provision` to provision guest VM
33
+ (DEBUG=1 environment variable will trigger live verbose output).
34
+
35
+
36
+ ### Deployment manifest gotchas
37
+
38
+ - It must specify release source(s) via `url` key in the `releases` section.
39
+
40
+ - It must have exactly one deployment job; however, deployment job
41
+ can be made up from multiple job templates that come from multiple releases.
42
+
43
+ - It does not support `static` network type though `dynamic` network type is supported
44
+ (Network configuration should be done via standard Vagrant configuration DSL).
45
+
46
+ - It does not support stemcell specification because guest VM OS is picked via `config.vm.box` directive.
47
+
48
+
49
+ ### Planned
50
+
51
+ - Speed up apply step (Monit is sluggish)
52
+
53
+ - Packer Provisioner API wrapper
54
+
55
+ - Support non-Ubuntu vagrant boxes (currently provisioner uses `apt-get` to bootstrap deps)
56
+
57
+ - Support non-tgz release source URLs
58
+
59
+
60
+ ### Contributing
61
+
62
+ ```
63
+ git submodule update --recursive --init
64
+
65
+ # Provisioner uses BOSH Agent (Go) libraries (e.g. Blobstore, CmdRunner)
66
+ export GOPATH=$PWD/go:$PWD/bosh/go_agent
67
+
68
+ go/bin/test
69
+ go/bin/build-linux-amd64
70
+
71
+ # Spin up development Vagrant box with lib/ acting as BOSH provisioner
72
+ ( cd dev/ && vagrant up )
73
+ ```
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "rubygems"
2
+ require "bundler/gem_tasks"
data/dev/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .vagrant
data/dev/Vagrantfile ADDED
@@ -0,0 +1,30 @@
1
+ $:.push File.expand_path("../../lib", __FILE__)
2
+
3
+ if defined?(VagrantPlugins::VagrantBosh)
4
+ raise "vagrant-bosh plugin is installed via Vagrant. Exiting because lib version will not be used!"
5
+ end
6
+
7
+ require "../lib/vagrant-bosh"
8
+
9
+ Vagrant.configure("2") do |config|
10
+ config.vm.box = "precise64"
11
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
12
+
13
+ # Example port forward for example-bosh-manifest.yml
14
+ config.vm.network "forwarded_port", guest: 25555, host: 25555 # BOSH Director API
15
+
16
+ # Example port forward for example-winston-manifest.yml
17
+ config.vm.network "forwarded_port", guest: 8080, host: 8080 # http
18
+ config.vm.network "forwarded_port", guest: 8081, host: 8081 # ws
19
+ config.vm.network "forwarded_port", guest: 5637, host: 5637 # redgreen
20
+
21
+ config.vm.provider "virtualbox" do |v|
22
+ v.memory = 4096
23
+ v.cpus = 2
24
+ end
25
+
26
+ config.vm.provision "bosh" do |c|
27
+ c.manifest = `cat example-bosh-manifest.yml`
28
+ # c.manifest = `cat example-winston-manifest.yml`
29
+ end
30
+ end
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: bosh-in-vagrant
3
+
4
+ releases:
5
+ # Download latest BOSH release from http://bosh-artifacts.cfapps.io/
6
+ - name: bosh
7
+ version: 83
8
+ url: file:///vagrant/bosh-2597.tgz
9
+
10
+ networks:
11
+ # Must have dynamic network
12
+ - name: default
13
+ type: dynamic
14
+
15
+ update:
16
+ canary_watch_time: 5000 - 90000
17
+ update_watch_time: 5000 - 15000
18
+
19
+ compilation:
20
+ network: default
21
+
22
+ jobs:
23
+ # Must have exactly 1 job; colocate everything that's needed
24
+ - name: bosh
25
+ instances: 1
26
+
27
+ networks:
28
+ - name: default
29
+
30
+ templates:
31
+ - name: nats
32
+ release: bosh
33
+ - name: redis
34
+ release: bosh
35
+ - name: blobstore
36
+ release: bosh
37
+ - name: powerdns
38
+ release: bosh
39
+ - name: postgres
40
+ release: bosh
41
+ - name: director
42
+ release: bosh
43
+ - name: health_monitor
44
+ release: bosh
45
+ # todo colocate warden-cpi-release once we have it
46
+
47
+ properties:
48
+ ntp: ["0.us.pool.ntp.org"]
49
+
50
+ nats:
51
+ user: nats
52
+ password: nats-password
53
+ address: 10.0.2.15
54
+ port: 4222
55
+
56
+ blobstore:
57
+ address: 10.0.2.15
58
+ port: 25251
59
+ backend_port: 25552
60
+ agent:
61
+ user: agent
62
+ password: agent-password
63
+ director:
64
+ user: director
65
+ password: director-password
66
+
67
+ postgres:
68
+ user: bosh
69
+ password: bosh-password
70
+ host: 10.0.2.15
71
+ port: 5432
72
+ database: bosh
73
+
74
+ redis:
75
+ password: redis-password
76
+ address: 10.0.2.15
77
+ port: 25255
78
+
79
+ director:
80
+ name: bosh-in-vagrant
81
+ address: 10.0.2.15
82
+ port: 25555
83
+ encryption: false
84
+ enable_snapshots: true
85
+ max_tasks: 1
86
+ db:
87
+ user: bosh
88
+ password: bosh-password
89
+ host: 10.0.2.15
90
+ port: 5432
91
+ database: bosh
92
+ ssl:
93
+ key: |
94
+ -----BEGIN RSA PRIVATE KEY-----
95
+ MIIEogIBAAKCAQEAutrdgjHQ7o8txCwcBdsXMnJ7Uz8CbeAIxxfkFO6L4ju9/Ixc
96
+ bjAXJcct/2VbB7bfKm8/hzX4s1OrtRNNm6J2udp2UAOB0Od53QLT1s4q/k3OTjrp
97
+ dNF83IETLFpnMdAtr1KYMuCrUZS6fygSzFn65eEyrqSKRG7ksEIKG1UJbovMb8UT
98
+ WqaNJIfqJo7CTbJDEpWpQo09/PU+q1GBpQGNVauHb5Z/bYrM5M5Gi4E6tJ93F6nU
99
+ KPOVBa3ZbmXTl29/a9lOVqoMKTw8EXfoVY+XCZnFGwcYAJW5ySXfInr2Mhpr6L6Y
100
+ reRx+LTllp9Z4XCbbVqGrPAr+QawrWh88crETwIDAQABAoIBAFh3DrB5TWXku9JI
101
+ 3+uV0uG7ec/r4QaMLxuzn/SZC/lMN6K+AXTZp9vm9UwZfIOmfPnmObmWP+0HDCBq
102
+ xy+MN5G+cI1pW6jALt4IXKsyaQCFbctz8Nux4t+y7JTvKDRZT4fWHuDXpcS2GaXi
103
+ HyRI5ZS4jfpJRH0p03PvkEFofVKsZfLAlwnx7HhPqztyc6huu7njjP6XUYbvrhOS
104
+ otE/wyyLyT36rQvUVLHfrco2Ib1r58sWb1hL84/5HnbxwsEelBAAGL5VGu2f0zLP
105
+ qxmy4XWJg9U/UKzG9gXmbcpDUn1pUcZV1rSSJ/wfbdvBSLF+dQaE6QdjGeAyrt7M
106
+ I7gCViECgYEA5ui1aXomHIwqbzll/qotebYNL8AOcpgRJTtzODcnzoe/5aA7yVox
107
+ vOFTD9rODaVRhtdC/ZHsU6rID+tx9gQdjLUEXUqS3KsPXSiwbYBPXnEtpgWz/RAu
108
+ qpxpMn3kfVbQgJjkfksWvlHNzLj5q4ZhZyL/WV3P9DON8vuP/hwwQLMCgYEAzyiv
109
+ rXx/ERnEQOpXEvPtCj04QUGCyW2o4nYIrN3OfO3PM8PnNfB8Z2LKDyuzX9qvWghg
110
+ z81KSNByW4OLdvrnX5natfxdu/6qAl18N+z/DFXuTgXi8nG9/2R5c3Gn5CQ5yab7
111
+ S4G4Pt7YwfoiqFv9j2b0DE3e5UVicGQIuWmaQ/UCgYBf61swraUXRsJ54YYU++xY
112
+ Gt/vbgCSacj1hnSebYsDqDB22tD7G5R9ubwfYe0mjf4H3XPekbdyKgdhVZTJdXww
113
+ 7yEY/9lyAT0onbZsRliyCqHDzaqu/QHlrYOljdZUmrOSN/Dy5Y5VEPZEjLJqJjBf
114
+ /5HDNc0kzCWzQfzWui7xMQKBgGNA8ysEAz2GQul3XdDO3juRqWpaoPcxe0FFnFJ2
115
+ 04A30JbUveqyFmjShE1QetjqRim06e2mRnksph4CoMeY31KGvKuFBsQT+BC6CdIh
116
+ 0vFuGod3eoz+wjGjSi1tvysn0Cg1wSEkPcqhqukFl6VirdIPWc6rYKgo3klLJILx
117
+ feAhAoGABC0apuKQD2IZZXZtDuUI9I4AemPPh0yKvFfTJxmxQ0fTlWjqdcG5nYdh
118
+ tSMBlZwsd6DRlK7dWJ/WHZXuXNeOX6ehSQFmql5/XPNd7INa5My6DDPZr1chh0WJ
119
+ QgK94NXJDoDd1OZjpUBMPLVa8d20/RdGNW8OMolJpzEPhg0r7Ac=
120
+ -----END RSA PRIVATE KEY-----
121
+
122
+ cert: |
123
+ -----BEGIN CERTIFICATE-----
124
+ MIIC3zCCAcegAwIBAgIBADANBgkqhkiG9w0BAQUFADAzMQswCQYDVQQGEwJVUzEQ
125
+ MA4GA1UECgwHUGl2b3RhbDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTEzMTIwMTIy
126
+ MTEzMloXDTE2MTIwMTIyMTEzMlowMzELMAkGA1UEBhMCVVMxEDAOBgNVBAoMB1Bp
127
+ dm90YWwxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
128
+ ADCCAQoCggEBALra3YIx0O6PLcQsHAXbFzJye1M/Am3gCMcX5BTui+I7vfyMXG4w
129
+ FyXHLf9lWwe23ypvP4c1+LNTq7UTTZuidrnadlADgdDned0C09bOKv5Nzk466XTR
130
+ fNyBEyxaZzHQLa9SmDLgq1GUun8oEsxZ+uXhMq6kikRu5LBCChtVCW6LzG/FE1qm
131
+ jSSH6iaOwk2yQxKVqUKNPfz1PqtRgaUBjVWrh2+Wf22KzOTORouBOrSfdxep1Cjz
132
+ lQWt2W5l05dvf2vZTlaqDCk8PBF36FWPlwmZxRsHGACVuckl3yJ69jIaa+i+mK3k
133
+ cfi05ZafWeFwm21ahqzwK/kGsK1ofPHKxE8CAwEAATANBgkqhkiG9w0BAQUFAAOC
134
+ AQEAD1VzwtWCx32pQi5l0oFfjWqktnqfhs/Rr0ZpwacBBXHBvKuz9ENXmblt5pZu
135
+ JP7je+uXQD+da/oVhl0US2L0upIdMmD1utVXYHfRji5r/tIPl2SEKTrFiNZR1Wp6
136
+ J0nE/BW7nm41dXRBIAZR71yproaQrt1tFDFZvdfhwHGLC51L6toOhk/7S604sxbk
137
+ qV0tzT+VaR4hh09FEt9xGmB/3yFh329Yib8ScT94nKzSzoNoDp4Ms/smFhF4lUio
138
+ 7SD2+b2/nt8Mcz7q58nYvZteipRrmkOFszlNF5dU31FjvRLITn0bhiOOFRD3qAou
139
+ cSOr1qwsAKuu6MzYNh2ubsLvfg==
140
+ -----END CERTIFICATE-----
141
+
142
+ hm:
143
+ http:
144
+ port: 25923
145
+ user: admin
146
+ password: admin-password
147
+ director_account:
148
+ user: admin
149
+ password: admin-password
150
+ intervals:
151
+ poll_director: 60
152
+ poll_grace_period: 30
153
+ log_stats: 300
154
+ analyze_agents: 60
155
+ agent_timeout: 180
156
+ rogue_agent_alert: 180
157
+ loglevel: info
158
+ email_notifications: false
159
+ tsdb_enabled: false
160
+ cloud_watch_enabled: false
161
+ resurrector_enabled: true
162
+
163
+ dns:
164
+ address: 10.0.2.15
165
+ recursor: 8.8.8.8
166
+ db:
167
+ user: bosh
168
+ password: bosh-password
169
+ host: 10.0.2.15
170
+ port: 5432
171
+ database: bosh
172
+
173
+ # Control some remote vCenter
174
+ vcenter:
175
+ address: 172.16.79.132
176
+ user: root
177
+ password: vmware
178
+ datacenters:
179
+ - name: TEST_DATACENTER
180
+ vm_folder: SYSTEM_MICRO_VSPHERE_VMs
181
+ template_folder: SYSTEM_MICRO_VSPHERE_Templates
182
+ disk_path: SYSTEM_MICRO_VSPHERE_Disks
183
+ datastore_pattern: datastore
184
+ persistent_datastore_pattern: datastore
185
+ allow_mixed_datastores: true
186
+ clusters:
187
+ - TEST_CLUSTER:
188
+ resource_pool: TEST_RP
@@ -0,0 +1,70 @@
1
+ name: room101
2
+
3
+ releases:
4
+ - name: room101
5
+ version: 0.1-dev
6
+ url: file:///vagrant/room101-0.1-dev.tgz
7
+
8
+ networks:
9
+ - name: room101
10
+ type: dynamic
11
+
12
+ compilation:
13
+ network: room101
14
+
15
+ update:
16
+ canaries: 0
17
+ canary_watch_time: 1000-60000
18
+ update_watch_time: 1000-60000
19
+ max_in_flight: 10
20
+
21
+ jobs:
22
+ - name: winston
23
+ instances: 1
24
+
25
+ templates:
26
+ - name: redis
27
+ release: room101
28
+ - name: winston
29
+ release: room101
30
+ - name: prole
31
+ release: room101
32
+ - name: warden
33
+ release: room101
34
+ - name: redgreen
35
+ release: room101
36
+
37
+ networks:
38
+ - name: room101
39
+
40
+ properties:
41
+ network_name: room101
42
+ winston:
43
+ config:
44
+ jobs:
45
+ - name: bosh_unit
46
+ privileged: true
47
+ build: ci/bosh_unit.yml
48
+ inputs:
49
+ - resource: ci
50
+ - resource: bosh-repo
51
+
52
+ prole:
53
+ address: 127.0.0.1:4637
54
+ redis:
55
+ address: 127.0.0.1:6379
56
+
57
+ redgreen:
58
+ prole:
59
+ address: 127.0.0.1:4637
60
+
61
+ prole:
62
+ warden:
63
+ address: 127.0.0.1:7777
64
+ network: tcp
65
+
66
+ warden:
67
+ disk_quota_enabled: false
68
+ kernel_network_tuning_enabled: false
69
+ listen_address: 0.0.0.0:7777
70
+ listen_network: tcp
data/go/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ out
2
+ pkg
3
+ gobin/*
4
+
5
+ *\.test
6
+ *.coverprofile
7
+
8
+ *.sublime-workspace
9
+
10
+ .idea/workspace.xml
11
+ .idea/tasks.xml
data/go/bin/build ADDED
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ BINDIR=$(dirname $0)
6
+ BASEDIR=$(dirname $BINDIR)
7
+
8
+ $BINDIR/go build -o $BASEDIR/out/provisioner boshprovisioner/main
9
+
10
+ cp $BASEDIR/out/provisioner $BASEDIR/../lib/vagrant-bosh/assets/provisioner
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ export GOARCH=amd64
6
+ export GOOS=linux
7
+ export GOTOOLDIR=$(go env GOROOT)/pkg/linux_amd64
8
+
9
+ $(dirname $0)/build
data/go/bin/env ADDED
@@ -0,0 +1,13 @@
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 ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ exec $(dirname $0)/env go $@
data/go/bin/golint ADDED
@@ -0,0 +1,19 @@
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 ADDED
@@ -0,0 +1,37 @@
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
@@ -0,0 +1,73 @@
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
+ }
@@ -0,0 +1,81 @@
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
+ }