vagrant-bosh 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.gitmodules +6 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +73 -0
- data/Rakefile +2 -0
- data/dev/.gitignore +1 -0
- data/dev/Vagrantfile +30 -0
- data/dev/example-bosh-manifest.yml +188 -0
- data/dev/example-winston-manifest.yml +70 -0
- data/go/.gitignore +11 -0
- data/go/bin/build +10 -0
- data/go/bin/build-linux-amd64 +9 -0
- data/go/bin/env +13 -0
- data/go/bin/go +5 -0
- data/go/bin/golint +19 -0
- data/go/bin/test +37 -0
- data/go/src/boshprovisioner/agent/client/client_interface.go +73 -0
- data/go/src/boshprovisioner/agent/client/fakes/fake_client.go +81 -0
- data/go/src/boshprovisioner/agent/client/http_client.go +299 -0
- data/go/src/boshprovisioner/agent/client/http_client_envelope.go +107 -0
- data/go/src/boshprovisioner/deployment/deployment.go +221 -0
- data/go/src/boshprovisioner/deployment/instance.go +54 -0
- data/go/src/boshprovisioner/deployment/manifest/deployment.go +80 -0
- data/go/src/boshprovisioner/deployment/manifest/ips.go +23 -0
- data/go/src/boshprovisioner/deployment/manifest/manifest.go +143 -0
- data/go/src/boshprovisioner/deployment/manifest/manifest_suite_test.go +13 -0
- data/go/src/boshprovisioner/deployment/manifest/manifest_test.go +86 -0
- data/go/src/boshprovisioner/deployment/manifest/syntax_validator.go +186 -0
- data/go/src/boshprovisioner/deployment/manifest/watch_time.go +47 -0
- data/go/src/boshprovisioner/deployment/manifest_reader.go +46 -0
- data/go/src/boshprovisioner/deployment/reader_factory.go +25 -0
- data/go/src/boshprovisioner/deployment/semantic_validator.go +111 -0
- data/go/src/boshprovisioner/downloader/blobstore_downloader.go +55 -0
- data/go/src/boshprovisioner/downloader/default_mux_downloader.go +22 -0
- data/go/src/boshprovisioner/downloader/downloader_interface.go +6 -0
- data/go/src/boshprovisioner/downloader/http_downloader.go +53 -0
- data/go/src/boshprovisioner/downloader/local_fs_downloader.go +48 -0
- data/go/src/boshprovisioner/downloader/mux_downloader.go +69 -0
- data/go/src/boshprovisioner/eventlog/log.go +72 -0
- data/go/src/boshprovisioner/eventlog/stage.go +39 -0
- data/go/src/boshprovisioner/eventlog/task.go +58 -0
- data/go/src/boshprovisioner/index/file_index.go +289 -0
- data/go/src/boshprovisioner/index/file_index_test.go +296 -0
- data/go/src/boshprovisioner/index/index_interface.go +18 -0
- data/go/src/boshprovisioner/index/index_suite_test.go +13 -0
- data/go/src/boshprovisioner/instance/templatescompiler/concrete_templates_compiler.go +273 -0
- data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erb_renderer.go +117 -0
- data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erbrenderer_suite_test.go +13 -0
- data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/render_properties.go +77 -0
- data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/render_properties_test.go +142 -0
- data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/template_evaluation_context.go +85 -0
- data/go/src/boshprovisioner/instance/templatescompiler/erbrenderer/template_evaluation_context_rb.go +155 -0
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_jobs_repository.go +64 -0
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_runtime_packages_repository.go +105 -0
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_template_to_job_repository.go +76 -0
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/jobs_repository_interface.go +31 -0
- data/go/src/boshprovisioner/instance/templatescompiler/rendered_archives_compiler.go +81 -0
- data/go/src/boshprovisioner/instance/templatescompiler/templates_compiler_interface.go +20 -0
- data/go/src/boshprovisioner/instance/templatescompiler/templatesrepo/ct_repository.go +54 -0
- data/go/src/boshprovisioner/instance/templatescompiler/templatesrepo/templates_repository_interface.go +16 -0
- data/go/src/boshprovisioner/instance/updater/applier/applier.go +93 -0
- data/go/src/boshprovisioner/instance/updater/applier/empty_state.go +66 -0
- data/go/src/boshprovisioner/instance/updater/applier/job_state.go +178 -0
- data/go/src/boshprovisioner/instance/updater/drainer.go +72 -0
- data/go/src/boshprovisioner/instance/updater/preparer.go +39 -0
- data/go/src/boshprovisioner/instance/updater/starter.go +36 -0
- data/go/src/boshprovisioner/instance/updater/stopper.go +36 -0
- data/go/src/boshprovisioner/instance/updater/updater.go +102 -0
- data/go/src/boshprovisioner/instance/updater/updater_factory.go +83 -0
- data/go/src/boshprovisioner/instance/updater/updater_suite_test.go +13 -0
- data/go/src/boshprovisioner/instance/updater/waiter.go +77 -0
- data/go/src/boshprovisioner/instance/updater/waiter_test.go +103 -0
- data/go/src/boshprovisioner/main/config.go +77 -0
- data/go/src/boshprovisioner/main/main.go +183 -0
- data/go/src/boshprovisioner/main/repos_factory.go +96 -0
- data/go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/compiled_packages_repository_interface.go +17 -0
- data/go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/concrete_compiled_packages_repository.go +61 -0
- data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler.go +179 -0
- data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler_factory.go +48 -0
- data/go/src/boshprovisioner/packagescompiler/packages_compiler_interface.go +20 -0
- data/go/src/boshprovisioner/packagescompiler/packagesrepo/concrete_packages_repository.go +65 -0
- data/go/src/boshprovisioner/packagescompiler/packagesrepo/packages_repository_interface.go +16 -0
- data/go/src/boshprovisioner/provisioner/blobstore_config.go +65 -0
- data/go/src/boshprovisioner/provisioner/blobstore_provisioner.go +38 -0
- data/go/src/boshprovisioner/provisioner/deployment_provisioner.go +97 -0
- data/go/src/boshprovisioner/provisioner/instance_provisioner.go +48 -0
- data/go/src/boshprovisioner/provisioner/release_compiler.go +133 -0
- data/go/src/boshprovisioner/release/job/job.go +86 -0
- data/go/src/boshprovisioner/release/job/manifest/manifest.go +79 -0
- data/go/src/boshprovisioner/release/job/manifest/manifest_suite_test.go +13 -0
- data/go/src/boshprovisioner/release/job/manifest/manifest_test.go +42 -0
- data/go/src/boshprovisioner/release/job/manifest/syntax_validator.go +43 -0
- data/go/src/boshprovisioner/release/job/reader_factory.go +34 -0
- data/go/src/boshprovisioner/release/job/tar_reader.go +133 -0
- data/go/src/boshprovisioner/release/manifest/manifest.go +96 -0
- data/go/src/boshprovisioner/release/manifest_reader.go +29 -0
- data/go/src/boshprovisioner/release/reader_factory.go +34 -0
- data/go/src/boshprovisioner/release/release.go +144 -0
- data/go/src/boshprovisioner/release/release_suite_test.go +13 -0
- data/go/src/boshprovisioner/release/release_test.go +129 -0
- data/go/src/boshprovisioner/release/tar_reader.go +139 -0
- data/go/src/boshprovisioner/releasesrepo/blobstore_releases_repository.go +114 -0
- data/go/src/boshprovisioner/releasesrepo/releases_repository_interface.go +15 -0
- data/go/src/boshprovisioner/tar/cmd_compressor.go +68 -0
- data/go/src/boshprovisioner/tar/cmd_extractor.go +47 -0
- data/go/src/boshprovisioner/tar/compressor_interface.go +6 -0
- data/go/src/boshprovisioner/tar/extractor_interface.go +6 -0
- data/go/src/boshprovisioner/util/string_keyed.go +70 -0
- data/go/src/boshprovisioner/vm/agent_provisioner.go +266 -0
- data/go/src/boshprovisioner/vm/asset_manager.go +61 -0
- data/go/src/boshprovisioner/vm/deps_provisioner.go +92 -0
- data/go/src/boshprovisioner/vm/monit_provisioner.go +83 -0
- data/go/src/boshprovisioner/vm/runit_provisioner.go +225 -0
- data/go/src/boshprovisioner/vm/simple_cmds.go +54 -0
- data/go/src/boshprovisioner/vm/vcap_user_provisioner.go +120 -0
- data/go/src/boshprovisioner/vm/vm.go +19 -0
- data/go/src/boshprovisioner/vm/vm_provisioner.go +57 -0
- data/go/src/boshprovisioner/vm/vm_provisioner_factory.go +97 -0
- data/lib/vagrant-bosh/asset_uploader.rb +53 -0
- data/lib/vagrant-bosh/assets/agent/agent-log +5 -0
- data/lib/vagrant-bosh/assets/agent/agent-run +12 -0
- data/lib/vagrant-bosh/assets/agent/agent.cert +18 -0
- data/lib/vagrant-bosh/assets/agent/agent.json +9 -0
- data/lib/vagrant-bosh/assets/agent/agent.key +27 -0
- data/lib/vagrant-bosh/assets/agent/bosh-agent +0 -0
- data/lib/vagrant-bosh/assets/agent/bosh-agent-rc +18 -0
- data/lib/vagrant-bosh/assets/agent/bosh-blobstore-dav +0 -0
- data/lib/vagrant-bosh/assets/monit/monit +0 -0
- data/lib/vagrant-bosh/assets/monit/monit-log +5 -0
- data/lib/vagrant-bosh/assets/monit/monit-run +9 -0
- data/lib/vagrant-bosh/assets/monit/monitrc +8 -0
- data/lib/vagrant-bosh/assets/provisioner +0 -0
- data/lib/vagrant-bosh/bootstrapper.rb +59 -0
- data/lib/vagrant-bosh/communicator.rb +50 -0
- data/lib/vagrant-bosh/config.rb +15 -0
- data/lib/vagrant-bosh/errors.rb +11 -0
- data/lib/vagrant-bosh/plugin.rb +25 -0
- data/lib/vagrant-bosh/provisioner.rb +46 -0
- data/lib/vagrant-bosh/provisioner_tracker.rb +41 -0
- data/lib/vagrant-bosh/ui.rb +77 -0
- data/lib/vagrant-bosh/version.rb +5 -0
- data/lib/vagrant-bosh.rb +15 -0
- data/templates/locales/en.yml +15 -0
- data/vagrant-bosh.gemspec +20 -0
- 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
data/.gitmodules
ADDED
data/Gemfile
ADDED
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
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
data/go/bin/build
ADDED
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
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
|
+
}
|