bosh-bootstrap 0.10.2 → 0.11.0
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.
- data/.rspec +1 -0
- data/.travis.yml +0 -1
- data/ChangeLog.md +23 -4
- data/Gemfile +5 -2
- data/Guardfile +2 -0
- data/README.md +209 -197
- data/TODO.md +55 -0
- data/bosh-bootstrap.gemspec +5 -12
- data/lib/bosh/cli/commands/bootstrap.rb +42 -0
- data/lib/bosh-bootstrap/cli/commands/delete.rb +26 -0
- data/lib/bosh-bootstrap/cli/commands/deploy.rb +89 -0
- data/lib/bosh-bootstrap/cli/commands/ssh.rb +32 -0
- data/lib/bosh-bootstrap/cli/helpers/bundle.rb +12 -0
- data/lib/bosh-bootstrap/cli/helpers/interactions.rb +15 -0
- data/lib/bosh-bootstrap/cli/helpers/settings.rb +61 -0
- data/lib/bosh-bootstrap/cli/helpers.rb +11 -0
- data/lib/bosh-bootstrap/key_pair.rb +21 -0
- data/lib/bosh-bootstrap/microbosh.rb +74 -0
- data/lib/bosh-bootstrap/microbosh_providers/aws.rb +104 -0
- data/lib/bosh-bootstrap/microbosh_providers/base.rb +50 -0
- data/lib/bosh-bootstrap/microbosh_providers/openstack.rb +61 -0
- data/lib/bosh-bootstrap/microbosh_providers/vsphere.rb +78 -0
- data/lib/bosh-bootstrap/microbosh_providers.rb +11 -0
- data/lib/bosh-bootstrap/network.rb +33 -0
- data/lib/bosh-bootstrap/network_providers/aws.rb +28 -0
- data/lib/bosh-bootstrap/network_providers/dummy.rb +10 -0
- data/lib/bosh-bootstrap/network_providers/openstack.rb +28 -0
- data/lib/bosh-bootstrap/network_providers.rb +11 -0
- data/lib/bosh-bootstrap/version.rb +1 -1
- data/lib/bosh-bootstrap.rb +3 -4
- data/spec/assets/microbosh_yml/micro_bosh.aws_ec2.yml +37 -0
- data/spec/assets/microbosh_yml/micro_bosh.aws_vpc.yml +39 -0
- data/spec/assets/microbosh_yml/micro_bosh.openstack.yml +30 -0
- data/spec/assets/microbosh_yml/micro_bosh.vsphere.yml +34 -0
- data/spec/integration/aws/aws_ec2_basic_spec.rb +39 -0
- data/spec/integration/aws/aws_helpers.rb +8 -61
- data/spec/spec_helper.rb +8 -3
- data/spec/support/capture_stdout.rb +18 -0
- data/spec/unit/cli/bootstrap_spec.rb +41 -0
- data/spec/unit/commands/delete_spec.rb +20 -0
- data/spec/unit/commands/deploy_spec.rb +64 -0
- data/spec/unit/commands/ssh_spec.rb +19 -0
- data/spec/unit/key_pair_spec.rb +13 -0
- data/spec/unit/microbosh_providers/aws_spec.rb +68 -0
- data/spec/unit/microbosh_providers/openstack_spec.rb +27 -0
- data/spec/unit/microbosh_providers/vsphere_spec.rb +42 -0
- data/spec/unit/microbosh_spec.rb +27 -0
- data/spec/unit/network_providers/aws_spec.rb +29 -0
- data/spec/unit/network_providers/openstack_spec.rb +29 -0
- data/spec/unit/network_spec.rb +17 -0
- metadata +71 -235
- data/CleanupCi.md +0 -8
- data/bin/bosh-bootstrap +0 -8
- data/docs/README.md +0 -3
- data/docs/devstack-openstack-tutorial.md +0 -215
- data/lib/bosh/providers/README.md +0 -5
- data/lib/bosh/providers/aws.rb +0 -258
- data/lib/bosh/providers/base_provider.rb +0 -48
- data/lib/bosh/providers/openstack.rb +0 -79
- data/lib/bosh/providers.rb +0 -21
- data/lib/bosh-bootstrap/cli.rb +0 -1347
- data/lib/bosh-bootstrap/commander/README.md +0 -47
- data/lib/bosh-bootstrap/commander/command.rb +0 -25
- data/lib/bosh-bootstrap/commander/commands.rb +0 -80
- data/lib/bosh-bootstrap/commander/local_server.rb +0 -68
- data/lib/bosh-bootstrap/commander/remote_script_command.rb +0 -51
- data/lib/bosh-bootstrap/commander/remote_server.rb +0 -137
- data/lib/bosh-bootstrap/commander/upload_command.rb +0 -17
- data/lib/bosh-bootstrap/commander.rb +0 -9
- data/lib/bosh-bootstrap/helpers/fog_setup.rb +0 -50
- data/lib/bosh-bootstrap/helpers/settings.rb +0 -99
- data/lib/bosh-bootstrap/helpers/settings_setter.rb +0 -41
- data/lib/bosh-bootstrap/helpers.rb +0 -3
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_delete/bosh_micro_delete +0 -19
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_delete.rb +0 -90
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/bosh_micro_deploy +0 -79
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy/install_key_pair_for_user +0 -23
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_deploy.rb +0 -146
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_download/download_micro_bosh_stemcell +0 -93
- data/lib/bosh-bootstrap/stages/stage_micro_bosh_download.rb +0 -139
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/configure_git +0 -25
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/create_vcap_user +0 -79
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_base_packages +0 -30
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_bosh +0 -11
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_bosh_plugins +0 -25
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_hub +0 -26
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_ruby +0 -30
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/install_useful_gems +0 -29
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm/validate_bosh_deployer +0 -18
- data/lib/bosh-bootstrap/stages/stage_prepare_inception_vm.rb +0 -69
- data/lib/bosh-bootstrap/stages/stage_salted_password/convert_salted_password +0 -11
- data/lib/bosh-bootstrap/stages/stage_salted_password.rb +0 -51
- data/lib/bosh-bootstrap/stages/stage_setup_new_bosh/setup_bosh_user +0 -29
- data/lib/bosh-bootstrap/stages/stage_setup_new_bosh.rb +0 -51
- data/lib/bosh-bootstrap/stages/stage_validate_inception_vm/validate_ubuntu +0 -6
- data/lib/bosh-bootstrap/stages/stage_validate_inception_vm.rb +0 -39
- data/lib/bosh-bootstrap/stages.rb +0 -10
- data/spec/assets/bosh/public_stemcells/aws_micro.out +0 -7
- data/spec/assets/micro_bosh_yml/micro_bosh.aws_ec2.yml +0 -35
- data/spec/assets/micro_bosh_yml/micro_bosh.aws_vpc.yml +0 -37
- data/spec/integration/aws/aws_basic_spec.rb +0 -39
- data/spec/integration/aws/aws_edge_prebuilt_ami_spec.rb +0 -46
- data/spec/integration/aws/aws_edge_prebuilt_spec.rb +0 -46
- data/spec/integration/aws/aws_edge_spec.rb +0 -45
- data/spec/unit/aws_spec.rb +0 -177
- data/spec/unit/bosh/providers/aws_spec.rb +0 -174
- data/spec/unit/cli_spec.rb +0 -134
- data/spec/unit/cli_ssh_spec.rb +0 -95
- data/spec/unit/cli_upgrade_inception_spec.rb +0 -29
- data/spec/unit/settings_setter_spec.rb +0 -29
- data/vendor/cache/POpen4-0.1.4.gem +0 -0
- data/vendor/cache/Platform-0.4.0.gem +0 -0
- data/vendor/cache/activesupport-3.2.8.gem +0 -0
- data/vendor/cache/awesome_print-1.1.0.gem +0 -0
- data/vendor/cache/aws-s3-0.6.3.gem +0 -0
- data/vendor/cache/blobstore_client-0.4.0.gem +0 -0
- data/vendor/cache/bosh_cli-1.0.3.gem +0 -0
- data/vendor/cache/bosh_common-0.5.4.gem +0 -0
- data/vendor/cache/builder-3.2.0.gem +0 -0
- data/vendor/cache/coderay-1.0.8.gem +0 -0
- data/vendor/cache/diff-lcs-1.1.3.gem +0 -0
- data/vendor/cache/escape-0.0.4.gem +0 -0
- data/vendor/cache/excon-0.20.1.gem +0 -0
- data/vendor/cache/fog-1.8.0.gem +0 -0
- data/vendor/cache/formatador-0.2.4.gem +0 -0
- data/vendor/cache/guard-1.6.2.gem +0 -0
- data/vendor/cache/guard-rspec-2.4.0.gem +0 -0
- data/vendor/cache/highline-1.6.18.gem +0 -0
- data/vendor/cache/httpclient-2.2.4.gem +0 -0
- data/vendor/cache/i18n-0.6.1.gem +0 -0
- data/vendor/cache/json_pure-1.6.8.gem +0 -0
- data/vendor/cache/listen-0.7.2.gem +0 -0
- data/vendor/cache/log4r-1.1.10.gem +0 -0
- data/vendor/cache/lumberjack-1.0.2.gem +0 -0
- data/vendor/cache/method_source-0.8.1.gem +0 -0
- data/vendor/cache/mime-types-1.22.gem +0 -0
- data/vendor/cache/multi_json-1.1.0.gem +0 -0
- data/vendor/cache/net-scp-1.0.4.gem +0 -0
- data/vendor/cache/net-ssh-2.2.2.gem +0 -0
- data/vendor/cache/net-ssh-gateway-1.1.0.gem +0 -0
- data/vendor/cache/netaddr-1.5.0.gem +0 -0
- data/vendor/cache/nokogiri-1.5.9.gem +0 -0
- data/vendor/cache/open4-1.3.0.gem +0 -0
- data/vendor/cache/progressbar-0.9.2.gem +0 -0
- data/vendor/cache/pry-0.9.11.4-java.gem +0 -0
- data/vendor/cache/pry-0.9.11.4.gem +0 -0
- data/vendor/cache/rake-10.0.3.gem +0 -0
- data/vendor/cache/rb-fsevent-0.9.3.gem +0 -0
- data/vendor/cache/redcard-1.0.0.gem +0 -0
- data/vendor/cache/rspec-2.12.0.gem +0 -0
- data/vendor/cache/rspec-core-2.12.2.gem +0 -0
- data/vendor/cache/rspec-expectations-2.12.1.gem +0 -0
- data/vendor/cache/rspec-mocks-2.12.2.gem +0 -0
- data/vendor/cache/ruby-atmos-pure-1.0.5.gem +0 -0
- data/vendor/cache/ruby-hmac-0.4.0.gem +0 -0
- data/vendor/cache/settingslogic-2.0.9.gem +0 -0
- data/vendor/cache/slop-3.4.3.gem +0 -0
- data/vendor/cache/spoon-0.0.1.gem +0 -0
- data/vendor/cache/terminal-table-1.4.5.gem +0 -0
- data/vendor/cache/thor-0.17.0.gem +0 -0
- data/vendor/cache/uuidtools-2.1.3.gem +0 -0
- data/vendor/cache/xml-simple-1.1.2.gem +0 -0
|
@@ -1,90 +0,0 @@
|
|
|
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
|
|
@@ -1,79 +0,0 @@
|
|
|
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
|
-
# * $MICRO_BOSH_STEMCELL_TYPE - what type of stemcell (ami vs tgz)
|
|
11
|
-
|
|
12
|
-
set -e # exit immediately if a simple command exits with a non-zero status
|
|
13
|
-
set -u # report the usage of uninitialized variables
|
|
14
|
-
|
|
15
|
-
MICRO_BOSH_STEMCELL_PATH=/var/vcap/store/stemcells/$MICRO_BOSH_STEMCELL_NAME
|
|
16
|
-
|
|
17
|
-
export COLUMNS=80 # force a small width for progress bar
|
|
18
|
-
export TMPDIR=/var/vcap/store/tmp
|
|
19
|
-
|
|
20
|
-
cd /var/vcap/store/microboshes/deployments/
|
|
21
|
-
bosh -n micro deployment $BOSH_NAME
|
|
22
|
-
|
|
23
|
-
if [[ "${MICRO_BOSH_STEMCELL_NAME}" == "custom" ]]; then
|
|
24
|
-
MICRO_BOSH_STEMCELL_PATH=$(ls -t /var/tmp/bosh/bosh_agent-*/work/work/*.tgz | sort | tail -n 1)
|
|
25
|
-
echo "Custom stemcell path $MICRO_BOSH_STEMCELL_PATH"
|
|
26
|
-
elif [[ "${MICRO_BOSH_STEMCELL_TYPE}" == "ami" ]]; then
|
|
27
|
-
echo "Using AMI ${MICRO_BOSH_STEMCELL_NAME}"
|
|
28
|
-
MICRO_BOSH_STEMCELL_PATH=${MICRO_BOSH_STEMCELL_NAME}
|
|
29
|
-
else
|
|
30
|
-
echo "Downloaded stemcell path $MICRO_BOSH_STEMCELL_PATH"
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
if [[ -f bosh-deployments.yml ]]; then
|
|
34
|
-
deployment=$(cat bosh-deployments.yml | yaml get instances -j | jazor "find {|inst| inst['name'] == '$BOSH_NAME' }")
|
|
35
|
-
else
|
|
36
|
-
deployment=""
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# if $BOSH_NAME has never been deployed before, then $deployment will be empty
|
|
40
|
-
# if $BOSH_NAME was previously deployed but deleted then $deployment will look like:
|
|
41
|
-
# {
|
|
42
|
-
# "id": 1,
|
|
43
|
-
# "name": "microbosh-aws-us-east-1",
|
|
44
|
-
# "uuid": "bm-096bc437-b531-4260-a57f-8ea54db2f8d2",
|
|
45
|
-
# "stemcell_cid": null,
|
|
46
|
-
# "stemcell_name": null,
|
|
47
|
-
# "vm_cid": null,
|
|
48
|
-
# "disk_cid": null
|
|
49
|
-
# }
|
|
50
|
-
# if $BOSH_NAME has been deployed but it failed mid-way, then some of the _cid fields above will be set.
|
|
51
|
-
|
|
52
|
-
echo ""
|
|
53
|
-
echo ""
|
|
54
|
-
|
|
55
|
-
if [[ "${deployment}X" == "X" ]]; then
|
|
56
|
-
echo "Performing initial deploy of micro BOSH $BOSH_NAME"
|
|
57
|
-
bosh -n --color micro deploy $MICRO_BOSH_STEMCELL_PATH
|
|
58
|
-
touch $BOSH_NAME/new_bosh_deployed # to communicate with setup_bosh_user script
|
|
59
|
-
else
|
|
60
|
-
# determine if re-deploy, update, or delete&deploy
|
|
61
|
-
|
|
62
|
-
stemcell_cid=$(echo $deployment | jazor stemcell_cid)
|
|
63
|
-
vm_cid=$(echo $deployment | jazor vm_cid)
|
|
64
|
-
disk_cid=$(echo $deployment | jazor disk_cid)
|
|
65
|
-
|
|
66
|
-
if [[ $stemcell_cid == "" && $vm_cid == "" && $disk_cid == "" ]]; then
|
|
67
|
-
echo "Deployment was deleted; deploying micro BOSH $BOSH_NAME again"
|
|
68
|
-
bosh -n --color micro deploy $MICRO_BOSH_STEMCELL_PATH
|
|
69
|
-
touch $BOSH_NAME/new_bosh_deployed # to communicate with setup_bosh_user script
|
|
70
|
-
elif [[ $stemcell_cid == "" || $vm_cid == "" || $disk_cid == "" ]]; then
|
|
71
|
-
echo "Deployment previously failed to complete. Deleting and deploying micro BOSH $BOSH_NAME again."
|
|
72
|
-
bosh -n --color micro delete
|
|
73
|
-
bosh -n --color micro deploy $MICRO_BOSH_STEMCELL_PATH
|
|
74
|
-
touch $BOSH_NAME/new_bosh_deployed # to communicate with setup_bosh_user script
|
|
75
|
-
else
|
|
76
|
-
echo "Performing update deploy to micro BOSH $BOSH_NAME"
|
|
77
|
-
bosh -n --color micro deploy $MICRO_BOSH_STEMCELL_PATH --update
|
|
78
|
-
fi
|
|
79
|
-
fi
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
# Creates a local /home/vcap/.ssh/$KEY_PAIR_NAME.pem file
|
|
4
|
-
# from the key pair private key ($PRIVATE_KEY)
|
|
5
|
-
#
|
|
6
|
-
# Requires:
|
|
7
|
-
# * ENV['KEY_PAIR_NAME']
|
|
8
|
-
# * ENV['PRIVATE_KEY']
|
|
9
|
-
#
|
|
10
|
-
# Optional:
|
|
11
|
-
# * ENV['TARGET_USER'] (default: vcap)
|
|
12
|
-
|
|
13
|
-
user = ENV['TARGET_USER'] || 'vcap'
|
|
14
|
-
key_pair_name = ENV['KEY_PAIR_NAME']
|
|
15
|
-
private_key = ENV['PRIVATE_KEY']
|
|
16
|
-
|
|
17
|
-
keyfile_path = "/home/#{user}/.ssh/#{key_pair_name}.pem"
|
|
18
|
-
split_private_key = private_key.split(/\n/)
|
|
19
|
-
File.open(keyfile_path, "w") do |f|
|
|
20
|
-
split_private_key.each {|line| f.puts line}
|
|
21
|
-
f.chmod 0600
|
|
22
|
-
end
|
|
23
|
-
|
|
@@ -1,146 +0,0 @@
|
|
|
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.upload_file \
|
|
17
|
-
"/var/vcap/store/microboshes/deployments/#{settings.bosh_name}/micro_bosh.yml",
|
|
18
|
-
micro_bosh_manifest
|
|
19
|
-
server.install "key pair for user", script("install_key_pair_for_user",
|
|
20
|
-
"PRIVATE_KEY" => settings.bosh_key_pair.private_key,
|
|
21
|
-
"KEY_PAIR_NAME" => settings.bosh_key_pair.name)
|
|
22
|
-
server.deploy "micro bosh", script("bosh_micro_deploy",
|
|
23
|
-
"BOSH_NAME" => settings.bosh_name,
|
|
24
|
-
"MICRO_BOSH_STEMCELL_NAME" => settings.micro_bosh_stemcell_name,
|
|
25
|
-
"MICRO_BOSH_STEMCELL_TYPE" => settings.micro_bosh_stemcell_type,
|
|
26
|
-
"BOSH_HOST" => settings.bosh.ip_address,
|
|
27
|
-
"BOSH_USERNAME" => settings.bosh_username,
|
|
28
|
-
"BOSH_PASSWORD" => settings.bosh_password)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def stage_name
|
|
33
|
-
"stage_micro_bosh_deploy"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Loads local script
|
|
37
|
-
# If +variables+, then injects KEY=VALUE environment
|
|
38
|
-
# variables into bash scripts.
|
|
39
|
-
def script(segment_name, variables={})
|
|
40
|
-
path = File.expand_path("../#{stage_name}/#{segment_name}", __FILE__)
|
|
41
|
-
if File.exist?(path)
|
|
42
|
-
script = File.read(path)
|
|
43
|
-
if variables.keys.size > 0
|
|
44
|
-
env_variables = variables.reject { |var| var.is_a?(Symbol) }
|
|
45
|
-
|
|
46
|
-
# inject variables into script if its bash script
|
|
47
|
-
inline_variables = "#!/usr/bin/env bash\n\n"
|
|
48
|
-
env_variables.each { |name, value| inline_variables << "#{name}='#{value}'\n" }
|
|
49
|
-
script.gsub!("#!/usr/bin/env bash", inline_variables)
|
|
50
|
-
|
|
51
|
-
# inject variables into script if its ruby script
|
|
52
|
-
inline_variables = "#!/usr/bin/env ruby\n\n"
|
|
53
|
-
env_variables.each { |name, value| inline_variables << "ENV['#{name}'] = '#{value}'\n" }
|
|
54
|
-
script.gsub!("#!/usr/bin/env ruby", inline_variables)
|
|
55
|
-
end
|
|
56
|
-
script
|
|
57
|
-
else
|
|
58
|
-
Thor::Base.shell.new.say_status "error", "Missing script lib/bosh-bootstrap/stages/#{stage_name}/#{segment_name}", :red
|
|
59
|
-
exit 1
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def micro_bosh_manifest
|
|
64
|
-
name = settings.bosh_name
|
|
65
|
-
salted_password = settings.bosh.salted_password
|
|
66
|
-
ipaddress = settings.bosh.ip_address
|
|
67
|
-
persistent_disk = settings.bosh.persistent_disk
|
|
68
|
-
resources_cloud_properties = settings.bosh_resources_cloud_properties
|
|
69
|
-
cloud_plugin = settings.bosh_provider
|
|
70
|
-
|
|
71
|
-
# aws:
|
|
72
|
-
# access_key_id: #{access_key}
|
|
73
|
-
# secret_access_key: #{secret_key}
|
|
74
|
-
# ec2_endpoint: ec2.#{region}.amazonaws.com
|
|
75
|
-
# default_key_name: #{key_name}
|
|
76
|
-
# default_security_groups: ["#{security_group}"]
|
|
77
|
-
# ec2_private_key: /home/vcap/.ssh/#{key_name}.pem
|
|
78
|
-
cloud_properties = settings.bosh_cloud_properties
|
|
79
|
-
|
|
80
|
-
manifest = {
|
|
81
|
-
"name" => name,
|
|
82
|
-
"env" => { "bosh" => {"password" => salted_password}},
|
|
83
|
-
"logging" => { "level" => "DEBUG" },
|
|
84
|
-
"network" => { "type" => "dynamic", "vip" => ipaddress },
|
|
85
|
-
"resources" => {
|
|
86
|
-
"persistent_disk" => persistent_disk,
|
|
87
|
-
"cloud_properties" => resources_cloud_properties
|
|
88
|
-
},
|
|
89
|
-
"cloud" => {
|
|
90
|
-
"plugin" => cloud_plugin,
|
|
91
|
-
"properties" => cloud_properties
|
|
92
|
-
},
|
|
93
|
-
"apply_spec" => {
|
|
94
|
-
"agent" => {
|
|
95
|
-
"blobstore" => { "address" => ipaddress },
|
|
96
|
-
"nats" => { "address" => ipaddress }
|
|
97
|
-
},
|
|
98
|
-
"properties" => {
|
|
99
|
-
"#{cloud_plugin.downcase}_registry" => { "address" => ipaddress }
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
# Openstack settings
|
|
105
|
-
if cloud_plugin.downcase == "openstack"
|
|
106
|
-
# Delete OpenStack registry IP address
|
|
107
|
-
manifest["apply_spec"]["properties"].delete("openstack_registry")
|
|
108
|
-
|
|
109
|
-
# OpenStack private network label
|
|
110
|
-
if settings.network_label
|
|
111
|
-
manifest["network"]["label"] = settings.network_label
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
manifest.to_yaml.gsub(/\s![^ ]+$/, '')
|
|
116
|
-
|
|
117
|
-
# /![^ ]+\s/ removes object notation from the YAML which appears to cause problems when being interpretted by the
|
|
118
|
-
# Ruby running on the inception vm. A before and after example would look like;
|
|
119
|
-
#
|
|
120
|
-
# properties: !map:Settingslogic
|
|
121
|
-
# openstack: !map:Settingslogic
|
|
122
|
-
# username: admin
|
|
123
|
-
# api_key: xxxxxxxxxxxxxxxxxxx
|
|
124
|
-
# tenant: CloudFoundry
|
|
125
|
-
# auth_url: http://192.168.1.2:5000/v2.0/tokens
|
|
126
|
-
# default_security_groups:
|
|
127
|
-
# - !str:HighLine::String microbosh-openstack
|
|
128
|
-
# default_key_name: !str:HighLine::String microbosh-openstack
|
|
129
|
-
# private_key: /home/vcap/.ssh/microbosh-openstack.pem
|
|
130
|
-
#
|
|
131
|
-
# The regex strips the !Module::ClassName notation out and the result looks as it should
|
|
132
|
-
#
|
|
133
|
-
# properties:
|
|
134
|
-
# openstack:
|
|
135
|
-
# username: admin
|
|
136
|
-
# api_key: xxxxxxxxxxxxxxxxxxx
|
|
137
|
-
# tenant: CloudFoundry
|
|
138
|
-
# auth_url: http://192.168.1.2:5000/v2.0/tokens
|
|
139
|
-
# default_security_groups:
|
|
140
|
-
# - microbosh-openstack
|
|
141
|
-
# default_key_name: microbosh-openstack
|
|
142
|
-
# private_key: /home/vcap/.ssh/microbosh-openstack.pem
|
|
143
|
-
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
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
|
-
# * $MICRO_BOSH_STEMCELL_TYPE - what type of stemcell (ami vs tgz)
|
|
9
|
-
# * $PROVIDER - e.g. aws, openstack
|
|
10
|
-
#
|
|
11
|
-
# Optional:
|
|
12
|
-
# * $ISO_NAME - defaults to ubuntu-10.04.4-server-amd64.iso for creating stemcell
|
|
13
|
-
|
|
14
|
-
set -e # exit immediately if a simple command exits with a non-zero status
|
|
15
|
-
set -u # report the usage of uninitialized variables
|
|
16
|
-
|
|
17
|
-
if [[ "${MICRO_BOSH_STEMCELL_NAME}X" == "X" ]]; then
|
|
18
|
-
echo 'INTERNAL ERROR: Missing $MICRO_BOSH_STEMCELL_NAME environment variable'
|
|
19
|
-
exit 1
|
|
20
|
-
fi
|
|
21
|
-
|
|
22
|
-
STEMCELLS_DIR=/var/vcap/store/stemcells
|
|
23
|
-
LAST_SUCCESSFUL_MICROBOSH_STEMCELL_URL=http://bosh-jenkins-artifacts.s3.amazonaws.com/last_successful_micro-bosh-stemcell-$PROVIDER.tgz
|
|
24
|
-
|
|
25
|
-
if [[ "${MICRO_BOSH_STEMCELL_NAME}" == "custom" ]]; then
|
|
26
|
-
|
|
27
|
-
ISO_NAME=${ISO_NAME:-ubuntu-10.04.4-server-amd64.iso}
|
|
28
|
-
|
|
29
|
-
echo "Creating custom stemcell..."
|
|
30
|
-
|
|
31
|
-
cd ${STEMCELLS_DIR}
|
|
32
|
-
if [[ ! -f ${ISO_NAME} ]]; then
|
|
33
|
-
echo "Fetching base stemcell ISO to speed up stemcell creation..."
|
|
34
|
-
wget http://releases.ubuntu.com/lucid/${ISO_NAME}
|
|
35
|
-
fi
|
|
36
|
-
export UBUNTU_ISO=${STEMCELLS_DIR}/${ISO_NAME}
|
|
37
|
-
|
|
38
|
-
if [[ -d /var/tmp/bosh/ ]]; then
|
|
39
|
-
echo "But first, cleaning out previous stemcell temporary files..."
|
|
40
|
-
rm -rf /var/tmp/bosh
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
BOSH_DIR=/var/vcap/store/repos/bosh
|
|
44
|
-
cd $(dirname $BOSH_DIR)
|
|
45
|
-
if [[ -d bosh ]]; then
|
|
46
|
-
echo "Updating bosh source for agent/stemcell scripts"
|
|
47
|
-
cd bosh
|
|
48
|
-
git pull origin master
|
|
49
|
-
else
|
|
50
|
-
echo "Cloning bosh source for agent/stemcell scripts"
|
|
51
|
-
git clone https://github.com/cloudfoundry/bosh.git
|
|
52
|
-
cd bosh
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
cd $BOSH_DIR
|
|
56
|
-
echo "Creating custom stemcell..."
|
|
57
|
-
rm -rf .bundle
|
|
58
|
-
bundle install --deployment
|
|
59
|
-
bundle exec rake stemcell:micro[$PROVIDER]
|
|
60
|
-
|
|
61
|
-
echo "Copying to stemcells folder..."
|
|
62
|
-
MICRO_BOSH_STEMCELL_PATH=$(ls -t /var/tmp/bosh/bosh_agent-*/work/work/*.tgz | sort | tail -n 1)
|
|
63
|
-
sudo mv $MICRO_BOSH_STEMCELL_PATH $STEMCELLS_DIR
|
|
64
|
-
sudo chown vcap:vcap -R $STEMCELLS_DIR
|
|
65
|
-
MICRO_BOSH_STEMCELL_NAME=$(basename $MICRO_BOSH_STEMCELL_PATH)
|
|
66
|
-
|
|
67
|
-
elif [[ "${MICRO_BOSH_STEMCELL_TYPE}" == "edge-prebuilt" ]]; then
|
|
68
|
-
cd $STEMCELLS_DIR
|
|
69
|
-
echo Looking for latest microbosh stemcell at $LAST_SUCCESSFUL_MICROBOSH_STEMCELL_URL
|
|
70
|
-
etag=$(curl -I $LAST_SUCCESSFUL_MICROBOSH_STEMCELL_URL 2>&1 | awk '/^ETag/ {print $2}' | sed -e 's/"//g')
|
|
71
|
-
MICRO_BOSH_STEMCELL_NAME="micro_bosh-${etag}-latest.tgz"
|
|
72
|
-
if [[ ! -f $MICRO_BOSH_STEMCELL_NAME ]]; then
|
|
73
|
-
echo "Downloading latest microbosh stemcell, etag $etag..."
|
|
74
|
-
curl -o $MICRO_BOSH_STEMCELL_NAME $LAST_SUCCESSFUL_MICROBOSH_STEMCELL_URL
|
|
75
|
-
else
|
|
76
|
-
echo "Latest microbosh stemcell with etag $etag already downloaded, skipping."
|
|
77
|
-
fi
|
|
78
|
-
|
|
79
|
-
elif [[ "${MICRO_BOSH_STEMCELL_TYPE}" == "ami" ]]; then
|
|
80
|
-
echo "Using AMI ${MICRO_BOSH_STEMCELL_NAME}, so there is nothing to download."
|
|
81
|
-
|
|
82
|
-
elif [[ -f $STEMCELLS_DIR/$MICRO_BOSH_STEMCELL_NAME ]]; then
|
|
83
|
-
echo "Stemcell $(pwd)/$MICRO_BOSH_STEMCELL_NAME already exists."
|
|
84
|
-
|
|
85
|
-
else
|
|
86
|
-
cd $STEMCELLS_DIR
|
|
87
|
-
echo "Downloading public stemcell $MICRO_BOSH_STEMCELL_NAME"
|
|
88
|
-
# set $COLUMNS manually else progressbar runs `tput cols`.to_i which causes grief
|
|
89
|
-
COLUMNS=80 bosh -n download public stemcell $MICRO_BOSH_STEMCELL_NAME
|
|
90
|
-
fi
|
|
91
|
-
|
|
92
|
-
# print name of stemcell created/downloaded to be stored back in settings
|
|
93
|
-
echo $MICRO_BOSH_STEMCELL_NAME
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
require "json" # for inline hashes within YAML
|
|
2
|
-
|
|
3
|
-
module Bosh::Bootstrap::Stages
|
|
4
|
-
class MicroBoshDownload
|
|
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
|
-
"MICRO_BOSH_STEMCELL_TYPE" => settings.micro_bosh_stemcell_type,
|
|
19
|
-
"PROVIDER" => settings.bosh_provider),
|
|
20
|
-
:settings => settings,
|
|
21
|
-
:save_output_to_settings_key => "micro_bosh_stemcell_name"
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def stage_name
|
|
26
|
-
"stage_micro_bosh_download"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Loads local script
|
|
30
|
-
# If +variables+, then injects KEY=VALUE environment
|
|
31
|
-
# variables into bash scripts.
|
|
32
|
-
def script(segment_name, variables={})
|
|
33
|
-
path = File.expand_path("../#{stage_name}/#{segment_name}", __FILE__)
|
|
34
|
-
if File.exist?(path)
|
|
35
|
-
script = File.read(path)
|
|
36
|
-
if variables.keys.size > 0
|
|
37
|
-
env_variables = variables.reject { |var| var.is_a?(Symbol) }
|
|
38
|
-
|
|
39
|
-
# inject variables into script if its bash script
|
|
40
|
-
inline_variables = "#!/usr/bin/env bash\n\n"
|
|
41
|
-
env_variables.each { |name, value| inline_variables << "#{name}='#{value}'\n" }
|
|
42
|
-
script.gsub!("#!/usr/bin/env bash", inline_variables)
|
|
43
|
-
|
|
44
|
-
# inject variables into script if its ruby script
|
|
45
|
-
inline_variables = "#!/usr/bin/env ruby\n\n"
|
|
46
|
-
env_variables.each { |name, value| inline_variables << "ENV['#{name}'] = '#{value}'\n" }
|
|
47
|
-
script.gsub!("#!/usr/bin/env ruby", inline_variables)
|
|
48
|
-
end
|
|
49
|
-
script
|
|
50
|
-
else
|
|
51
|
-
Thor::Base.shell.new.say_status "error", "Missing script lib/bosh-bootstrap/stages/#{stage_name}/#{segment_name}", :red
|
|
52
|
-
exit 1
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def micro_bosh_manifest
|
|
57
|
-
name = settings.bosh_name
|
|
58
|
-
salted_password = settings.bosh.salted_password
|
|
59
|
-
ipaddress = settings.bosh.ip_address
|
|
60
|
-
persistent_disk = settings.bosh.persistent_disk
|
|
61
|
-
resources_cloud_properties = settings.bosh_resources_cloud_properties
|
|
62
|
-
cloud_plugin = settings.bosh_provider
|
|
63
|
-
|
|
64
|
-
# aws:
|
|
65
|
-
# access_key_id: #{access_key}
|
|
66
|
-
# secret_access_key: #{secret_key}
|
|
67
|
-
# ec2_endpoint: ec2.#{region}.amazonaws.com
|
|
68
|
-
# default_key_name: #{key_name}
|
|
69
|
-
# default_security_groups: ["#{security_group}"]
|
|
70
|
-
# ec2_private_key: /home/vcap/.ssh/#{key_name}.pem
|
|
71
|
-
cloud_properties = settings.bosh_cloud_properties
|
|
72
|
-
|
|
73
|
-
manifest = {
|
|
74
|
-
"name" => name,
|
|
75
|
-
"env" => { "bosh" => {"password" => salted_password}},
|
|
76
|
-
"logging" => { "level" => "DEBUG" },
|
|
77
|
-
"network" => { "type" => "dynamic", "vip" => ipaddress },
|
|
78
|
-
"resources" => {
|
|
79
|
-
"persistent_disk" => persistent_disk,
|
|
80
|
-
"cloud_properties" => resources_cloud_properties
|
|
81
|
-
},
|
|
82
|
-
"cloud" => {
|
|
83
|
-
"plugin" => cloud_plugin,
|
|
84
|
-
"properties" => cloud_properties
|
|
85
|
-
},
|
|
86
|
-
"apply_spec" => {
|
|
87
|
-
"agent" => {
|
|
88
|
-
"blobstore" => { "address" => ipaddress },
|
|
89
|
-
"nats" => { "address" => ipaddress }
|
|
90
|
-
},
|
|
91
|
-
"properties" => {
|
|
92
|
-
"#{cloud_plugin.downcase}_registry" => { "address" => ipaddress }
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
# Openstack settings
|
|
98
|
-
if cloud_plugin.downcase == "openstack"
|
|
99
|
-
# Delete OpenStack registry IP address
|
|
100
|
-
manifest["apply_spec"]["properties"].delete("openstack_registry")
|
|
101
|
-
|
|
102
|
-
# OpenStack private network label
|
|
103
|
-
if settings.network_label
|
|
104
|
-
manifest["network"]["label"] = settings.network_label
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
manifest.to_yaml.gsub(/\s![^ ]+$/, '')
|
|
109
|
-
|
|
110
|
-
# /![^ ]+\s/ removes object notation from the YAML which appears to cause problems when being interpretted by the
|
|
111
|
-
# Ruby running on the inception vm. A before and after example would look like;
|
|
112
|
-
#
|
|
113
|
-
# properties: !map:Settingslogic
|
|
114
|
-
# openstack: !map:Settingslogic
|
|
115
|
-
# username: admin
|
|
116
|
-
# api_key: xxxxxxxxxxxxxxxxxxx
|
|
117
|
-
# tenant: CloudFoundry
|
|
118
|
-
# auth_url: http://192.168.1.2:5000/v2.0/tokens
|
|
119
|
-
# default_security_groups:
|
|
120
|
-
# - !str:HighLine::String microbosh-openstack
|
|
121
|
-
# default_key_name: !str:HighLine::String microbosh-openstack
|
|
122
|
-
# private_key: /home/vcap/.ssh/microbosh-openstack.pem
|
|
123
|
-
#
|
|
124
|
-
# The regex strips the !Module::ClassName notation out and the result looks as it should
|
|
125
|
-
#
|
|
126
|
-
# properties:
|
|
127
|
-
# openstack:
|
|
128
|
-
# username: admin
|
|
129
|
-
# api_key: xxxxxxxxxxxxxxxxxxx
|
|
130
|
-
# tenant: CloudFoundry
|
|
131
|
-
# auth_url: http://192.168.1.2:5000/v2.0/tokens
|
|
132
|
-
# default_security_groups:
|
|
133
|
-
# - microbosh-openstack
|
|
134
|
-
# default_key_name: microbosh-openstack
|
|
135
|
-
# private_key: /home/vcap/.ssh/microbosh-openstack.pem
|
|
136
|
-
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
# Setup git configuration for the user
|
|
4
|
-
#
|
|
5
|
-
# Run as the user to configure
|
|
6
|
-
#
|
|
7
|
-
# Requires:
|
|
8
|
-
# * $GIT_USER_NAME
|
|
9
|
-
# * $GIT_USER_EMAIL
|
|
10
|
-
|
|
11
|
-
set -e # exit immediately if a simple command exits with a non-zero status
|
|
12
|
-
|
|
13
|
-
if [[ "${GIT_USER_NAME}X" == "X" ]]; then
|
|
14
|
-
echo 'ERROR please provide $GIT_USER_NAME'
|
|
15
|
-
exit 1
|
|
16
|
-
fi
|
|
17
|
-
if [[ "${GIT_USER_EMAIL}X" == "X" ]]; then
|
|
18
|
-
echo 'ERROR please provide $GIT_USER_EMAIL'
|
|
19
|
-
exit 1
|
|
20
|
-
fi
|
|
21
|
-
|
|
22
|
-
cd ~
|
|
23
|
-
git config -f .gitconfig user.name "${GIT_USER_NAME}"
|
|
24
|
-
git config -f .gitconfig user.email "${GIT_USER_EMAIL}"
|
|
25
|
-
git config -f .gitconfig color.ui true
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
# Create vcap user & public keys
|
|
4
|
-
# Re-use new public keys for root user
|
|
5
|
-
#
|
|
6
|
-
# Requires:
|
|
7
|
-
# * $ORIGUSER - another local user with authorized_keys for SSH access; will be copied to vcap user
|
|
8
|
-
|
|
9
|
-
if [[ $EUID -ne 0 ]]; then
|
|
10
|
-
echo "ERROR: This script must be run as root" 1>&2
|
|
11
|
-
exit 1
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
groupadd vcap
|
|
15
|
-
useradd vcap -m --shell /bin/bash -g vcap
|
|
16
|
-
mkdir -p /home/vcap/.ssh
|
|
17
|
-
chown -R vcap:vcap /home/vcap/.ssh
|
|
18
|
-
chmod 700 /home/vcap/.ssh
|
|
19
|
-
|
|
20
|
-
if [[ -f /home/vcap/.ssh/id_rsa ]]
|
|
21
|
-
then
|
|
22
|
-
echo "public keys for vcap already exist, skipping..."
|
|
23
|
-
else
|
|
24
|
-
echo "creating public keys for vcap/root user..."
|
|
25
|
-
su -c "ssh-keygen -f ~/.ssh/id_rsa -N ''" vcap
|
|
26
|
-
fi
|
|
27
|
-
|
|
28
|
-
# Include same public keys for root user
|
|
29
|
-
echo "copy vcap public keys to root user..."
|
|
30
|
-
mkdir -p ~/.ssh/
|
|
31
|
-
cp ~vcap/.ssh/id_rsa* ~/.ssh/
|
|
32
|
-
|
|
33
|
-
bosh_app_dir=/var/vcap
|
|
34
|
-
mkdir -p ${bosh_app_dir}
|
|
35
|
-
|
|
36
|
-
# setup common folder for all folder/data
|
|
37
|
-
# this is what could/should be mounted as a separate persistent disk
|
|
38
|
-
# which is what is done for you if bosh-bootstrap creates the inception
|
|
39
|
-
# server for you.
|
|
40
|
-
|
|
41
|
-
store_dir=/var/vcap/store
|
|
42
|
-
mkdir -p ${store_dir}
|
|
43
|
-
chown vcap:vcap ${store_dir}
|
|
44
|
-
|
|
45
|
-
# setup common folders used by bosh-bootstrap or bosh deployments
|
|
46
|
-
for path in microboshes microboshes/deployments deployments releases repos stemcells inception tmp bosh_cache
|
|
47
|
-
do
|
|
48
|
-
echo "creating /var/vcap/store/${path}"
|
|
49
|
-
mkdir -p ${store_dir}/${path}
|
|
50
|
-
chown vcap:vcap ${store_dir}/${path}
|
|
51
|
-
done
|
|
52
|
-
|
|
53
|
-
if [[ $(grep "vcap ALL=(ALL) NOPASSWD:ALL" /etc/sudoers) == "" ]]; then
|
|
54
|
-
echo "adding vcap to sudoers"
|
|
55
|
-
echo "vcap ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
echo "copying user '$ORIGUSER' authorized_keys to vcap user"
|
|
59
|
-
cp /home/${ORIGUSER}/.ssh/authorized_keys ${bosh_app_dir}/
|
|
60
|
-
cp /home/${ORIGUSER}/.ssh/authorized_keys /home/vcap/.ssh/authorized_keys
|
|
61
|
-
chown vcap:vcap /home/vcap/.ssh/authorized_keys
|
|
62
|
-
echo "copying user '$ORIGUSER' .bashrc to vcap user"
|
|
63
|
-
cp /home/${ORIGUSER}/.bashrc /home/vcap/
|
|
64
|
-
chown vcap:vcap /home/vcap/.bashrc
|
|
65
|
-
|
|
66
|
-
if [[ $(grep "export TMPDIR" /home/vcap/.bashrc) == "" ]]; then
|
|
67
|
-
echo 'adding $TMPDIR to .bashrc'
|
|
68
|
-
echo "export TMPDIR=/var/vcap/store/tmp" >> /home/vcap/.bashrc
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
if [[ $(grep "export EDITOR" /home/vcap/.bashrc) == "" ]]; then
|
|
72
|
-
echo 'setting $EDITOR to vim as default'
|
|
73
|
-
echo "export EDITOR=vim" >> /home/vcap/.bashrc
|
|
74
|
-
fi
|
|
75
|
-
|
|
76
|
-
if [[ ! -h /home/vcap/.bosh_cache ]]; then
|
|
77
|
-
rm -rf ~vcap/.bosh_cache/
|
|
78
|
-
ln -s /var/vcap/store/bosh_cache ~vcap/.bosh_cache
|
|
79
|
-
fi
|