vagrant-bosh 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+ }