/
automated_deploy_builder.rb
71 lines (60 loc) · 2.36 KB
/
automated_deploy_builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
require 'bosh/dev/download_adapter'
require 'bosh/dev/artifacts_downloader'
require 'bosh/dev/deployments_repository'
require 'bosh/dev/aws/deployment_account'
require 'bosh/dev/vsphere/deployment_account'
require 'bosh/dev/vcloud/deployment_account'
require 'bosh/dev/automated_deploy'
require 'bosh/dev/uri_provider'
require 'bosh/dev/bosh_cli_session'
require 'bosh/stemcell/stemcell'
require 'bosh/stemcell/definition'
require 'logging'
module Bosh::Dev
class AutomatedDeployBuilder
def self.for_rake_args(args)
definition = Bosh::Stemcell::Definition.for(
args.infrastructure_name,
args.hypervisor_name,
args.operating_system_name,
args.operating_system_version,
args.agent_name,
args.light == 'true',
)
stemcell = Bosh::Stemcell::Stemcell.new(definition, 'bosh-stemcell', args.build_number, args.disk_format)
new(stemcell, args.environment_name, args.deployment_name)
end
def initialize(stemcell, environment_name, deployment_name)
@stemcell = stemcell
@environment_name = environment_name
@deployment_name = deployment_name
end
def build
logger = Logging.logger(STDERR)
commit_message = 'Autodeployer updating deployment receipt for the next micro update (we use the repo to communicate between test runs)'
deployments_repository = DeploymentsRepository.new(ENV, logger, commit_message: commit_message)
deployment_account = build_deployment_account(deployments_repository)
download_adapter = DownloadAdapter.new(logger)
artifacts_downloader = ArtifactsDownloader.new(download_adapter, logger)
# Configure to use real gems (not bundle exec)
# to make sure bosh_cli/bosh_cli_plugin_micro actually work.
bosh_cmd = Bosh::Dev::S3GemBoshCmd.new(@stemcell.version, logger)
bosh_cli_session = Bosh::Dev::BoshCliSession.new(bosh_cmd)
AutomatedDeploy.new(
@stemcell,
deployment_account,
artifacts_downloader,
bosh_cli_session,
)
end
private
def build_deployment_account(deployments_repository)
ns = {
'aws' => Bosh::Dev::Aws,
'vsphere' => Bosh::Dev::VSphere,
'vcloud' => Bosh::Dev::VCloud,
}[@stemcell.infrastructure.name]
ns::DeploymentAccount.new(@environment_name, @deployment_name, deployments_repository)
end
end
end