bosh-bootstrap 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +318 -0
- data/Rakefile +1 -0
- data/bin/bosh-bootstrap +8 -0
- data/bosh-bootstrap.gemspec +34 -0
- data/lib/bosh-bootstrap.rb +10 -0
- data/lib/bosh-bootstrap/cli.rb +1024 -0
- data/lib/bosh-bootstrap/commander.rb +9 -0
- data/lib/bosh-bootstrap/commander/README.md +47 -0
- data/lib/bosh-bootstrap/commander/command.rb +25 -0
- data/lib/bosh-bootstrap/commander/commands.rb +80 -0
- data/lib/bosh-bootstrap/commander/local_server.rb +68 -0
- data/lib/bosh-bootstrap/commander/remote_script_command.rb +48 -0
- data/lib/bosh-bootstrap/commander/remote_server.rb +121 -0
- data/lib/bosh-bootstrap/commander/upload_command.rb +17 -0
- data/lib/bosh-bootstrap/helpers.rb +2 -0
- data/lib/bosh-bootstrap/helpers/fog_setup.rb +50 -0
- data/lib/bosh-bootstrap/helpers/settings.rb +36 -0
- data/lib/bosh-bootstrap/stages.rb +8 -0
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_delete.rb +90 -0
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_delete/bosh_micro_delete +19 -0
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy.rb +135 -0
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/bosh_micro_deploy +36 -0
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/download_micro_bosh_stemcell +132 -0
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/install_key_pair_for_user +23 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm.rb +52 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/convert_salted_password +9 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/create_vcap_user +79 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_base_packages +13 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_bosh +54 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_ruby +33 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_useful_gems +24 -0
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/validate_bosh_deployer +21 -0
- data/lib/bosh-bootstrap/stages/stage_setup_new_bosh.rb +52 -0
- data/lib/bosh-bootstrap/stages/stage_setup_new_bosh/cleanup_permissions +14 -0
- data/lib/bosh-bootstrap/stages/stage_setup_new_bosh/setup_bosh_user +29 -0
- data/lib/bosh-bootstrap/stages/stage_validate_inception_vm.rb +39 -0
- data/lib/bosh-bootstrap/stages/stage_validate_inception_vm/validate_ubuntu +6 -0
- data/lib/bosh-bootstrap/version.rb +5 -0
- data/lib/bosh/providers.rb +21 -0
- data/lib/bosh/providers/README.md +5 -0
- data/lib/bosh/providers/aws.rb +77 -0
- data/lib/bosh/providers/base_provider.rb +20 -0
- data/lib/bosh/providers/openstack.rb +40 -0
- metadata +239 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require "settingslogic"
|
4
|
+
module Bosh; module Bootstrap; module Helpers; end; end; end
|
5
|
+
|
6
|
+
# Helper methods for loading/saving settings
|
7
|
+
module Bosh::Bootstrap::Helpers::Settings
|
8
|
+
# Previously selected settings are stored in a YAML manifest
|
9
|
+
# Protects the manifest file with user-only priveleges
|
10
|
+
def settings
|
11
|
+
@settings ||= begin
|
12
|
+
FileUtils.mkdir_p(File.dirname(settings_path))
|
13
|
+
unless File.exists?(settings_path)
|
14
|
+
File.open(settings_path, "w") do |file|
|
15
|
+
file << {}.to_yaml
|
16
|
+
end
|
17
|
+
end
|
18
|
+
FileUtils.chmod 0600, settings_path
|
19
|
+
Settingslogic.new(settings_path)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def save_settings!
|
24
|
+
File.open(settings_path, "w") do |file|
|
25
|
+
raw_settings_yaml = settings.to_yaml.gsub(" !ruby/hash:Settingslogic", "")
|
26
|
+
file << raw_settings_yaml
|
27
|
+
end
|
28
|
+
@settings = nil # force to reload & recreate helper methods
|
29
|
+
end
|
30
|
+
|
31
|
+
def settings_path
|
32
|
+
manifest_path = ENV["MANIFEST"] || "~/.bosh_bootstrap/manifest.yml"
|
33
|
+
File.expand_path(manifest_path)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module Bosh::Bootstrap::Stages
|
2
|
+
end
|
3
|
+
|
4
|
+
require "bosh-bootstrap/stages/stage_validate_inception_vm"
|
5
|
+
require "bosh-bootstrap/stages/stage_prepare_inception_vm"
|
6
|
+
require "bosh-bootstrap/stages/stage_micro_bosh_deploy"
|
7
|
+
require "bosh-bootstrap/stages/stage_setup_new_bosh"
|
8
|
+
require "bosh-bootstrap/stages/stage_micro_bosh_delete"
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "json" # for inline hashes within YAML
|
2
|
+
|
3
|
+
module Bosh::Bootstrap::Stages
|
4
|
+
class MicroBoshDelete
|
5
|
+
attr_reader :settings
|
6
|
+
|
7
|
+
def initialize(settings)
|
8
|
+
@settings = settings
|
9
|
+
end
|
10
|
+
|
11
|
+
def commands
|
12
|
+
@commands ||= Bosh::Bootstrap::Commander::Commands.new do |server|
|
13
|
+
server.delete "micro bosh", script("bosh_micro_delete",
|
14
|
+
"BOSH_NAME" => settings.bosh_name)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def stage_name
|
20
|
+
"stage_micro_bosh_delete"
|
21
|
+
end
|
22
|
+
|
23
|
+
# Loads local script
|
24
|
+
# If +variables+, then injects KEY=VALUE environment
|
25
|
+
# variables into bash scripts.
|
26
|
+
def script(segment_name, variables={})
|
27
|
+
path = File.expand_path("../#{stage_name}/#{segment_name}", __FILE__)
|
28
|
+
if File.exist?(path)
|
29
|
+
script = File.read(path)
|
30
|
+
if variables.keys.size > 0
|
31
|
+
# inject variables into script if its bash script
|
32
|
+
inline_variables = "#!/usr/bin/env bash\n\n"
|
33
|
+
variables.each { |name, value| inline_variables << "#{name}='#{value}'\n" }
|
34
|
+
script.gsub!("#!/usr/bin/env bash", inline_variables)
|
35
|
+
|
36
|
+
# inject variables into script if its ruby script
|
37
|
+
inline_variables = "#!/usr/bin/env ruby\n\n"
|
38
|
+
variables.each { |name, value| inline_variables << "ENV['#{name}'] = '#{value}'\n" }
|
39
|
+
script.gsub!("#!/usr/bin/env ruby", inline_variables)
|
40
|
+
end
|
41
|
+
script
|
42
|
+
else
|
43
|
+
Thor::Base.shell.new.say_status "error", "Missing script lib/bosh-bootstrap/stages/#{stage_name}/#{segment_name}", :red
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def micro_bosh_manifest
|
49
|
+
name = settings.bosh_name
|
50
|
+
salted_password = settings.bosh.salted_password
|
51
|
+
ipaddress = settings.bosh.ip_address
|
52
|
+
persistent_disk = settings.bosh.persistent_disk
|
53
|
+
resources_cloud_properties = settings.bosh_resources_cloud_properties
|
54
|
+
cloud_plugin = settings.bosh_provider
|
55
|
+
|
56
|
+
# aws:
|
57
|
+
# access_key_id: #{access_key}
|
58
|
+
# secret_access_key: #{secret_key}
|
59
|
+
# ec2_endpoint: ec2.#{region}.amazonaws.com
|
60
|
+
# default_key_name: #{key_name}
|
61
|
+
# default_security_groups: ["#{security_group}"]
|
62
|
+
# ec2_private_key: /home/vcap/.ssh/#{key_name}.pem
|
63
|
+
cloud_properties = settings.bosh_cloud_properties
|
64
|
+
|
65
|
+
{
|
66
|
+
"name" => name,
|
67
|
+
"env" => { "bosh" => {"password" => salted_password}},
|
68
|
+
"logging" => { "level" => "DEBUG" },
|
69
|
+
"network" => { "type" => "dynamic", "vip" => ipaddress },
|
70
|
+
"resources" => {
|
71
|
+
"persistent_disk" => persistent_disk,
|
72
|
+
"cloud_properties" => resources_cloud_properties
|
73
|
+
},
|
74
|
+
"cloud" => {
|
75
|
+
"plugin" => cloud_plugin,
|
76
|
+
"properties" => cloud_properties
|
77
|
+
},
|
78
|
+
"apply_spec" => {
|
79
|
+
"agent" => {
|
80
|
+
"blobstore" => { "address" => ipaddress },
|
81
|
+
"nats" => { "address" => ipaddress }
|
82
|
+
},
|
83
|
+
"properties" => {
|
84
|
+
"#{cloud_plugin.downcase}_registry" => { "address" => ipaddress }
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}.to_yaml.gsub(" !ruby/hash:Settingslogic", "")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Deletes a micro BOSH using "bosh micro delete"
|
4
|
+
#
|
5
|
+
# Required:
|
6
|
+
# * $BOSH_NAME - name of bosh deployment
|
7
|
+
# (thus /var/vcap/store/microboshes/deployments/$BOSH_NAME/micro_bosh.yml exists)
|
8
|
+
|
9
|
+
set -e # exit immediately if a simple command exits with a non-zero status
|
10
|
+
set -u # report the usage of uninitialized variables
|
11
|
+
|
12
|
+
# TODO in preparation for http://reviews.cloudfoundry.org/#/c/11976/
|
13
|
+
export COLUMNS=80 # force a small width for progress bar
|
14
|
+
|
15
|
+
cd /var/vcap/store/microboshes/deployments/
|
16
|
+
bosh -n micro deployment $BOSH_NAME
|
17
|
+
|
18
|
+
echo "Deleting deployment of micro BOSH $BOSH_NAME"
|
19
|
+
bosh -n micro delete
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require "json" # for inline hashes within YAML
|
2
|
+
|
3
|
+
module Bosh::Bootstrap::Stages
|
4
|
+
class MicroBoshDeploy
|
5
|
+
attr_reader :settings
|
6
|
+
|
7
|
+
def initialize(settings)
|
8
|
+
@settings = settings
|
9
|
+
end
|
10
|
+
|
11
|
+
# TODO "aws_us_east_1" should come from settings.bosh_name
|
12
|
+
def commands
|
13
|
+
settings[:bosh_name] ||= "unnamed_bosh"
|
14
|
+
|
15
|
+
@commands ||= Bosh::Bootstrap::Commander::Commands.new do |server|
|
16
|
+
server.download "micro-bosh stemcell", script("download_micro_bosh_stemcell",
|
17
|
+
"MICRO_BOSH_STEMCELL_NAME" => settings.micro_bosh_stemcell_name,
|
18
|
+
"PROVIDER" => settings.bosh_provider,
|
19
|
+
:settings => settings, :save_output_to_settings_key => "micro_bosh_stemcell_name")
|
20
|
+
server.upload_file \
|
21
|
+
"/var/vcap/store/microboshes/deployments/#{settings.bosh_name}/micro_bosh.yml",
|
22
|
+
micro_bosh_manifest
|
23
|
+
server.install "key pair for user", script("install_key_pair_for_user",
|
24
|
+
"PRIVATE_KEY" => settings.bosh_key_pair.private_key,
|
25
|
+
"KEY_PAIR_NAME" => settings.bosh_key_pair.name)
|
26
|
+
server.deploy "micro bosh", script("bosh_micro_deploy",
|
27
|
+
"BOSH_NAME" => settings.bosh_name,
|
28
|
+
"MICRO_BOSH_STEMCELL_NAME" => settings.micro_bosh_stemcell_name,
|
29
|
+
"BOSH_HOST" => settings.bosh.ip_address,
|
30
|
+
"BOSH_USERNAME" => settings.bosh_username,
|
31
|
+
"BOSH_PASSWORD" => settings.bosh_password)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def stage_name
|
37
|
+
"stage_micro_bosh_deploy"
|
38
|
+
end
|
39
|
+
|
40
|
+
# Loads local script
|
41
|
+
# If +variables+, then injects KEY=VALUE environment
|
42
|
+
# variables into bash scripts.
|
43
|
+
def script(segment_name, variables={})
|
44
|
+
path = File.expand_path("../#{stage_name}/#{segment_name}", __FILE__)
|
45
|
+
if File.exist?(path)
|
46
|
+
script = File.read(path)
|
47
|
+
if variables.keys.size > 0
|
48
|
+
# inject variables into script if its bash script
|
49
|
+
inline_variables = "#!/usr/bin/env bash\n\n"
|
50
|
+
variables.each { |name, value| inline_variables << "#{name}='#{value}'\n" }
|
51
|
+
script.gsub!("#!/usr/bin/env bash", inline_variables)
|
52
|
+
|
53
|
+
# inject variables into script if its ruby script
|
54
|
+
inline_variables = "#!/usr/bin/env ruby\n\n"
|
55
|
+
variables.each { |name, value| inline_variables << "ENV['#{name}'] = '#{value}'\n" }
|
56
|
+
script.gsub!("#!/usr/bin/env ruby", inline_variables)
|
57
|
+
end
|
58
|
+
script
|
59
|
+
else
|
60
|
+
Thor::Base.shell.new.say_status "error", "Missing script lib/bosh-bootstrap/stages/#{stage_name}/#{segment_name}", :red
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def micro_bosh_manifest
|
66
|
+
name = settings.bosh_name
|
67
|
+
salted_password = settings.bosh.salted_password
|
68
|
+
ipaddress = settings.bosh.ip_address
|
69
|
+
persistent_disk = settings.bosh.persistent_disk
|
70
|
+
resources_cloud_properties = settings.bosh_resources_cloud_properties
|
71
|
+
cloud_plugin = settings.bosh_provider
|
72
|
+
|
73
|
+
# aws:
|
74
|
+
# access_key_id: #{access_key}
|
75
|
+
# secret_access_key: #{secret_key}
|
76
|
+
# ec2_endpoint: ec2.#{region}.amazonaws.com
|
77
|
+
# default_key_name: #{key_name}
|
78
|
+
# default_security_groups: ["#{security_group}"]
|
79
|
+
# ec2_private_key: /home/vcap/.ssh/#{key_name}.pem
|
80
|
+
cloud_properties = settings.bosh_cloud_properties
|
81
|
+
|
82
|
+
{
|
83
|
+
"name" => name,
|
84
|
+
"env" => { "bosh" => {"password" => salted_password}},
|
85
|
+
"logging" => { "level" => "DEBUG" },
|
86
|
+
"network" => { "type" => "dynamic", "vip" => ipaddress },
|
87
|
+
"resources" => {
|
88
|
+
"persistent_disk" => persistent_disk,
|
89
|
+
"cloud_properties" => resources_cloud_properties
|
90
|
+
},
|
91
|
+
"cloud" => {
|
92
|
+
"plugin" => cloud_plugin,
|
93
|
+
"properties" => cloud_properties
|
94
|
+
},
|
95
|
+
"apply_spec" => {
|
96
|
+
"agent" => {
|
97
|
+
"blobstore" => { "address" => ipaddress },
|
98
|
+
"nats" => { "address" => ipaddress }
|
99
|
+
},
|
100
|
+
"properties" => {
|
101
|
+
"#{cloud_plugin.downcase}_registry" => { "address" => ipaddress }
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}.to_yaml.gsub(/\s![^ ]+$/, '')
|
105
|
+
|
106
|
+
# /![^ ]+\s/ removes object notation from the YAML which appears to cause problems when being interpretted by the
|
107
|
+
# Ruby running on the inception vm. A before and after example would look like;
|
108
|
+
#
|
109
|
+
# properties: !map:Settingslogic
|
110
|
+
# openstack: !map:Settingslogic
|
111
|
+
# username: admin
|
112
|
+
# api_key: xxxxxxxxxxxxxxxxxxx
|
113
|
+
# tenant: CloudFoundry
|
114
|
+
# auth_url: http://192.168.1.2:5000/v2.0/tokens
|
115
|
+
# default_security_groups:
|
116
|
+
# - !str:HighLine::String microbosh-openstack
|
117
|
+
# default_key_name: !str:HighLine::String microbosh-openstack
|
118
|
+
# private_key: /home/vcap/.ssh/microbosh-openstack.pem
|
119
|
+
#
|
120
|
+
# The regex strips the !Module::ClassName notation out and the result looks as it should
|
121
|
+
#
|
122
|
+
# properties:
|
123
|
+
# openstack:
|
124
|
+
# username: admin
|
125
|
+
# api_key: xxxxxxxxxxxxxxxxxxx
|
126
|
+
# tenant: CloudFoundry
|
127
|
+
# auth_url: http://192.168.1.2:5000/v2.0/tokens
|
128
|
+
# default_security_groups:
|
129
|
+
# - microbosh-openstack
|
130
|
+
# default_key_name: microbosh-openstack
|
131
|
+
# private_key: /home/vcap/.ssh/microbosh-openstack.pem
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Deploys a micro BOSH using "bosh micro deploy"
|
4
|
+
#
|
5
|
+
# Required:
|
6
|
+
# * $BOSH_NAME - name of bosh deployment
|
7
|
+
# (thus /var/vcap/store/microboshes/deployments/$BOSH_NAME/micro_bosh.yml exists)
|
8
|
+
# * $MICRO_BOSH_STEMCELL_NAME - public stemcell name at
|
9
|
+
# /var/vcap/store/stemcells/$MICRO_BOSH_STEMCELL_NAME
|
10
|
+
|
11
|
+
set -e # exit immediately if a simple command exits with a non-zero status
|
12
|
+
set -u # report the usage of uninitialized variables
|
13
|
+
|
14
|
+
MICRO_BOSH_STEMCELL_PATH=/var/vcap/store/stemcells/$MICRO_BOSH_STEMCELL_NAME
|
15
|
+
|
16
|
+
export COLUMNS=80 # force a small width for progress bar
|
17
|
+
export TMPDIR=/var/vcap/store/tmp
|
18
|
+
|
19
|
+
cd /var/vcap/store/microboshes/deployments/
|
20
|
+
bosh -n micro deployment $BOSH_NAME
|
21
|
+
|
22
|
+
if [[ "${MICRO_BOSH_STEMCELL_NAME}" == "custom" ]]; then
|
23
|
+
MICRO_BOSH_STEMCELL_PATH=$(ls -t /var/tmp/bosh/agent-*/work/work/*.tgz | sort | tail -n 1)
|
24
|
+
echo "Custom stemcell path $MICRO_BOSH_STEMCELL_PATH"
|
25
|
+
else
|
26
|
+
echo "Downloaded stemcell path $MICRO_BOSH_STEMCELL_PATH"
|
27
|
+
fi
|
28
|
+
|
29
|
+
if [[ -f bosh-deployments.yml && "$(grep $BOSH_NAME bosh-deployments.yml)" != "" ]]; then
|
30
|
+
echo "Performing update deploy to micro BOSH $BOSH_NAME"
|
31
|
+
bosh -n micro deploy $MICRO_BOSH_STEMCELL_PATH --update
|
32
|
+
else
|
33
|
+
echo "Performing initial deploy of micro BOSH $BOSH_NAME"
|
34
|
+
bosh -n micro deploy $MICRO_BOSH_STEMCELL_PATH
|
35
|
+
touch $BOSH_NAME/new_bosh_deployed # to communicate with setup_bosh_user script
|
36
|
+
fi
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Downloads a public stemcell for CPI into /var/vcap/store/stemcells/
|
4
|
+
#
|
5
|
+
# Required:
|
6
|
+
# * $MICRO_BOSH_STEMCELL_NAME - public stemcell name to be downloaded
|
7
|
+
# - if 'custom' the create stemcell from BOSH source
|
8
|
+
#
|
9
|
+
# Optional:
|
10
|
+
# * $PROVIDER - required for 'custom' $MICRO_BOSH_STEMCELL_NAME; e.g. aws, openstack
|
11
|
+
# * $BOSH_RELEASE_REPO - defaults to https://github.com/cloudfoundry/bosh-release.git
|
12
|
+
|
13
|
+
set -e # exit immediately if a simple command exits with a non-zero status
|
14
|
+
set -u # report the usage of uninitialized variables
|
15
|
+
|
16
|
+
if [[ $EUID -ne 0 ]]; then
|
17
|
+
echo "ERROR: This script must be run as root" 1>&2
|
18
|
+
exit 1
|
19
|
+
fi
|
20
|
+
|
21
|
+
if [[ "${MICRO_BOSH_STEMCELL_NAME}X" == "X" ]]; then
|
22
|
+
echo 'INTERNAL ERROR: Missing $MICRO_BOSH_STEMCELL_NAME environment variable'
|
23
|
+
exit 1
|
24
|
+
fi
|
25
|
+
|
26
|
+
if [[ "${MICRO_BOSH_STEMCELL_NAME}" == "custom" ]]; then
|
27
|
+
|
28
|
+
BOSH_RELEASE_REPO=${BOSH_RELEASE_REPO:-'https://github.com/cloudfoundry/bosh-release.git'}
|
29
|
+
BOSH_RELEASE_DIRNAME=${BOSH_RELEASE_DIRNAME:-'bosh-release'}
|
30
|
+
BOSH_RELEASE_DIR=/var/vcap/store/releases/$BOSH_RELEASE_DIRNAME
|
31
|
+
|
32
|
+
echo "Creating custom stemcell..."
|
33
|
+
|
34
|
+
if [[ -d /var/tmp/bosh/ ]]; then
|
35
|
+
echo "But first, cleaning out previous stemcell temporary files..."
|
36
|
+
rm -rf /var/tmp/bosh
|
37
|
+
fi
|
38
|
+
|
39
|
+
|
40
|
+
cd $(dirname $BOSH_RELEASE_DIR)
|
41
|
+
if [[ -d $BOSH_RELEASE_DIRNAME ]]; then
|
42
|
+
echo "Updating BOSH's own bosh-release for custom stemcell"
|
43
|
+
cd $BOSH_RELEASE_DIRNAME
|
44
|
+
git pull origin master
|
45
|
+
else
|
46
|
+
echo "Fetching BOSH's own bosh-release for custom stemcell"
|
47
|
+
git clone $BOSH_RELEASE_REPO
|
48
|
+
cd $BOSH_RELEASE_DIRNAME
|
49
|
+
fi
|
50
|
+
|
51
|
+
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
|
52
|
+
|
53
|
+
echo "Rewriting all git:// & git@ to https:// to allow access if port 22 is blocked..."
|
54
|
+
# Snippet written by Mike Reeves <swampfoxmr@gmail.com> on bosh-users mailing list
|
55
|
+
# Date 2012-12-06
|
56
|
+
grep -rI "git[@:/]\{0,3\}github.com" * .gitmodules | awk 'BEGIN {FS=":"} { print($1) }' | while read file
|
57
|
+
do
|
58
|
+
echo "changing - $file"
|
59
|
+
sed -i 's/git\:\/\/github.com/https:\/\/github.com/g' $file
|
60
|
+
sed -i 's/git@github.com:/https:\/\/github.com\//g' $file
|
61
|
+
done
|
62
|
+
|
63
|
+
echo "Updating source submodules..."
|
64
|
+
git submodule update --init
|
65
|
+
|
66
|
+
echo "Within submodules, rewriting all git:// & git@ to https:// to allow access if port 22 is blocked..."
|
67
|
+
# Snippet written by Mike Reeves <swampfoxmr@gmail.com> on bosh-users mailing list
|
68
|
+
# Date 2012-12-06
|
69
|
+
grep -rI "git[@:/]\{0,3\}github.com" * .gitmodules | awk 'BEGIN {FS=":"} { print($1) }' | while read file
|
70
|
+
do
|
71
|
+
echo "changing - $file"
|
72
|
+
sed -i 's/git\:\/\/github.com/https:\/\/github.com/g' $file
|
73
|
+
sed -i 's/git@github.com:/https:\/\/github.com\//g' $file
|
74
|
+
done
|
75
|
+
|
76
|
+
echo "Creating bosh release (fetching any new blobs)..."
|
77
|
+
bosh -n create release --force --with-tarball
|
78
|
+
|
79
|
+
# dev_releases/index.yml contains the dev_releases
|
80
|
+
# and its last line contains the latest dev_release name
|
81
|
+
# For example:
|
82
|
+
# ---
|
83
|
+
# builds:
|
84
|
+
# 4800ad1226e2b673595a8646e8e11bc968ab6ab6:
|
85
|
+
# version: 119.1-dev
|
86
|
+
# 7e0318d711daf0a5fa2e65c0257cd3b6af2ec4e5:
|
87
|
+
# version: 119.2-dev
|
88
|
+
#
|
89
|
+
# So to get the latest dev_release name, grab the last line's 2nd token
|
90
|
+
# For example, above this would be "119.2-dev"
|
91
|
+
RELEASE_NAME="bosh-release"
|
92
|
+
LATEST_DEV_RELEASE_NAME=$(tail -n 1 dev_releases/index.yml | awk '{print $2}')
|
93
|
+
LATEST_BOSH_RELEASE_PATH=$BOSH_RELEASE_DIR/dev_releases/$RELEASE_NAME-$LATEST_DEV_RELEASE_NAME.tgz
|
94
|
+
MICRO_BOSH_MANIFEST_PATH=$BOSH_RELEASE_DIR/micro/$PROVIDER.yml
|
95
|
+
|
96
|
+
BOSH_DIR=/var/vcap/store/repos/bosh
|
97
|
+
cd $(dirname $BOSH_DIR)
|
98
|
+
if [[ -d bosh ]]; then
|
99
|
+
echo "Updating bosh source for agent/stemcell scripts"
|
100
|
+
cd bosh
|
101
|
+
git pull origin master
|
102
|
+
else
|
103
|
+
echo "Cloning bosh source for agent/stemcell scripts"
|
104
|
+
git clone https://github.com/cloudfoundry/bosh.git
|
105
|
+
cd bosh
|
106
|
+
fi
|
107
|
+
|
108
|
+
cd $BOSH_DIR
|
109
|
+
echo "Creating custom stemcell..."
|
110
|
+
bundle install --without test development
|
111
|
+
bundle exec rake stemcell:micro[$PROVIDER,$MICRO_BOSH_MANIFEST_PATH,$LATEST_BOSH_RELEASE_PATH]
|
112
|
+
|
113
|
+
echo "Copying to stemcells folder..."
|
114
|
+
MICRO_BOSH_STEMCELL_PATH=$(ls -t /var/tmp/bosh/agent-*/work/work/*.tgz | sort | tail -n 1)
|
115
|
+
mv $MICRO_BOSH_STEMCELL_PATH /var/vcap/store/stemcells
|
116
|
+
MICRO_BOSH_STEMCELL_NAME=$(basename $MICRO_BOSH_STEMCELL_PATH)
|
117
|
+
|
118
|
+
echo "Cleaning up..."
|
119
|
+
rm $(dirname $LATEST_BOSH_RELEASE_PATH)/*.tgz
|
120
|
+
|
121
|
+
elif [[ -f /var/vcap/store/stemcells/$MICRO_BOSH_STEMCELL_NAME ]]; then
|
122
|
+
echo "Stemcell $(pwd)/$MICRO_BOSH_STEMCELL_NAME already exists."
|
123
|
+
|
124
|
+
else
|
125
|
+
cd /var/vcap/store/stemcells
|
126
|
+
echo "Downloading public stemcell $MICRO_BOSH_STEMCELL_NAME"
|
127
|
+
# set $COLUMNS manually else progressbar runs `tput cols`.to_i which causes grief
|
128
|
+
COLUMNS=80 bosh -n download public stemcell $MICRO_BOSH_STEMCELL_NAME
|
129
|
+
fi
|
130
|
+
|
131
|
+
# print name of stemcell created/downloaded to be stored back in settings
|
132
|
+
echo $MICRO_BOSH_STEMCELL_NAME
|