Class: OpsManager::ProductDeployment

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Logging
Defined in:
lib/ops_manager/product_deployment.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Logging

#logger, logger, logger=

Constructor Details

#initialize(config_file, forced_deployment = false) ⇒ ProductDeployment

Returns a new instance of ProductDeployment.



18
19
20
21
# File 'lib/ops_manager/product_deployment.rb', line 18

def initialize(config_file, forced_deployment = false)
  @config_file = config_file
  @forced_deployment = forced_deployment
end

Class Method Details

.exists?(name, version) ⇒ Boolean

Returns:



101
102
103
104
# File 'lib/ops_manager/product_deployment.rb', line 101

def self.exists?(name, version)
  res = JSON.parse(OpsManager::Api::Opsman.new.get_available_products.body)
  !!res.find{ |o| o['name'] == name && o['product_version'].include?(version) }
end

Instance Method Details

#add_to_installationObject



73
74
75
76
77
# File 'lib/ops_manager/product_deployment.rb', line 73

def add_to_installation
  unless installation
    add_staged_products(config[:name], config[:desired_version])
  end
end

#deployObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/ops_manager/product_deployment.rb', line 79

def deploy
  puts "====> Deploying #{config[:name]} version #{config[:desired_version]}...".green
  upload
  add_to_installation
  merge_product_installation_settings
  if config[:single_tile_deploy]
    OpsManager::InstallationRunner.trigger!([installation.guid]).wait_for_result
  else
    OpsManager::InstallationRunner.trigger!.wait_for_result
  end


  puts "====> Finish!".green
end

#installationObject



23
24
25
# File 'lib/ops_manager/product_deployment.rb', line 23

def installation
  OpsManager::ProductInstallation.find(config[:name])
end

#merge_product_installation_settingsObject



95
96
97
98
99
# File 'lib/ops_manager/product_deployment.rb', line 95

def merge_product_installation_settings
  get_installation_settings({write_to: '/tmp/is.yml'})
  puts `DEBUG=false DEFAULT_ARRAY_MERGE_KEY=identifier spruce merge /tmp/is.yml #{config[:installation_settings_file]} > /tmp/new_is.yml`
  upload_installation_settings('/tmp/new_is.yml')
end

#runObject



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ops_manager/product_deployment.rb', line 27

def run
  OpsManager.(config[:target], config[:username], config[:password])
  import_stemcell(config[:stemcell])

  case
  when installation.nil? || forced_deployment?
    deploy
  when installation && installation.current_version < desired_version
    upgrade
  when installation && installation.current_version == desired_version
    deploy
  end
end

#upgradeObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ops_manager/product_deployment.rb', line 55

def upgrade
  unless installation.prepared?
    puts "====> Skipping as this product has a pending installation!".red
    return
  end
  puts "====> Upgrading #{config[:name]} version from #{installation.current_version.to_s} to #{config[:desired_version]}...".green
  upload
  upgrade_product_installation(installation.guid, config[:desired_version])
  merge_product_installation_settings
  if config[:single_tile_deploy]
    OpsManager::InstallationRunner.trigger!([installation.guid]).wait_for_result
  else
    OpsManager::InstallationRunner.trigger!.wait_for_result
  end

  puts "====> Finish!".green
end

#uploadObject



45
46
47
48
49
50
51
52
53
# File 'lib/ops_manager/product_deployment.rb', line 45

def upload
  if ProductDeployment.exists?(config[:name], config[:desired_version])
    puts "====> Product already exists... skipping upload".green
  elsif config[:filepath]
    upload_product(config[:filepath])
  else
    puts "no filepath provided, skipping product upload.".green
  end
end