ops_manager_cli 0.3.1
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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/CONTRIBUTION.md +22 -0
- data/Dockerfile +33 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +11 -0
- data/README.md +99 -0
- data/Rakefile +6 -0
- data/bin/clean_tapes +19 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/exe/ops_manager +4 -0
- data/lib/ops_manager/api/base.rb +141 -0
- data/lib/ops_manager/api/opsman.rb +190 -0
- data/lib/ops_manager/api/pivnet.rb +68 -0
- data/lib/ops_manager/appliance_deployment.rb +123 -0
- data/lib/ops_manager/cli.rb +159 -0
- data/lib/ops_manager/configs/base.rb +27 -0
- data/lib/ops_manager/configs/opsman_deployment.rb +12 -0
- data/lib/ops_manager/configs/product_deployment.rb +16 -0
- data/lib/ops_manager/deployments/vsphere.rb +43 -0
- data/lib/ops_manager/director_template_generator.rb +59 -0
- data/lib/ops_manager/errors.rb +9 -0
- data/lib/ops_manager/installation.rb +38 -0
- data/lib/ops_manager/installation_runner.rb +75 -0
- data/lib/ops_manager/installation_settings.rb +16 -0
- data/lib/ops_manager/logging.rb +17 -0
- data/lib/ops_manager/product_deployment.rb +106 -0
- data/lib/ops_manager/product_installation.rb +43 -0
- data/lib/ops_manager/product_template_generator.rb +147 -0
- data/lib/ops_manager/semver.rb +24 -0
- data/lib/ops_manager/version.rb +3 -0
- data/lib/ops_manager.rb +94 -0
- data/ops_manager.gemspec +32 -0
- metadata +249 -0
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'ops_manager/api/opsman'
|
2
|
+
require 'ops_manager/product_installation'
|
3
|
+
require 'ops_manager/installation_runner'
|
4
|
+
require "ops_manager/logging"
|
5
|
+
require "ops_manager/semver"
|
6
|
+
|
7
|
+
class OpsManager
|
8
|
+
class ProductDeployment
|
9
|
+
extend Forwardable
|
10
|
+
def_delegators :opsman_api, :current_version, :upload_product, :get_installation_settings,
|
11
|
+
:upgrade_product_installation, :get_installation, :get_available_products, :upload_installation_settings,
|
12
|
+
:trigger_installation, :import_stemcell, :add_staged_products
|
13
|
+
|
14
|
+
include OpsManager::Logging
|
15
|
+
|
16
|
+
def initialize(config_file, forced_deployment = false)
|
17
|
+
@config_file = config_file
|
18
|
+
@forced_deployment = forced_deployment
|
19
|
+
end
|
20
|
+
|
21
|
+
def installation
|
22
|
+
OpsManager::ProductInstallation.find(config.name)
|
23
|
+
end
|
24
|
+
|
25
|
+
def run
|
26
|
+
OpsManager.target_and_login(config.target, config.username, config.password)
|
27
|
+
import_stemcell(config.stemcell)
|
28
|
+
|
29
|
+
case
|
30
|
+
when installation.nil? || forced_deployment?
|
31
|
+
deploy
|
32
|
+
when installation && installation.current_version < desired_version
|
33
|
+
upgrade
|
34
|
+
when installation && installation.current_version == desired_version
|
35
|
+
deploy
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def desired_version
|
40
|
+
Semver.new(config.desired_version)
|
41
|
+
end
|
42
|
+
|
43
|
+
def upload
|
44
|
+
print "====> Uploading product...".green
|
45
|
+
if ProductDeployment.exists?(config.name, config.desired_version)
|
46
|
+
puts "product already exists".green
|
47
|
+
else
|
48
|
+
upload_product(config.filepath)
|
49
|
+
puts "done".green
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def upgrade
|
54
|
+
unless installation.prepared?
|
55
|
+
puts "====> Skipping as this product has a pending installation!".red
|
56
|
+
return
|
57
|
+
end
|
58
|
+
puts "====> Upgrading #{config.name} version from #{installation.current_version.to_s} to #{config.desired_version}...".green
|
59
|
+
upload
|
60
|
+
upgrade_product_installation(installation.guid, config.desired_version)
|
61
|
+
OpsManager::InstallationRunner.trigger!.wait_for_result
|
62
|
+
|
63
|
+
puts "====> Finish!".green
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_to_installation
|
67
|
+
unless installation
|
68
|
+
add_staged_products(config.name, config.desired_version)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def deploy
|
73
|
+
puts "====> Deploying #{config.name} version #{config.desired_version}...".green
|
74
|
+
upload
|
75
|
+
add_to_installation
|
76
|
+
get_installation_settings({write_to: '/tmp/is.yml'})
|
77
|
+
puts `DEBUG=false spruce merge /tmp/is.yml #{config.installation_settings_file} > /tmp/new_is.yml`
|
78
|
+
upload_installation_settings('/tmp/new_is.yml')
|
79
|
+
OpsManager::InstallationRunner.trigger!.wait_for_result
|
80
|
+
|
81
|
+
puts "====> Finish!".green
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.exists?(name, version)
|
85
|
+
res = JSON.parse(OpsManager::Api::Opsman.new.get_available_products.body)
|
86
|
+
!!res.find{ |o| o['name'] == name && o['product_version'].include?(version) }
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
def desired_version
|
91
|
+
@desired_version ||= OpsManager::Semver.new(config.desired_version)
|
92
|
+
end
|
93
|
+
|
94
|
+
def forced_deployment?
|
95
|
+
!!@forced_deployment
|
96
|
+
end
|
97
|
+
|
98
|
+
def opsman_api
|
99
|
+
@opsman_api ||= OpsManager::Api::Opsman.new
|
100
|
+
end
|
101
|
+
|
102
|
+
def config
|
103
|
+
OpsManager::Configs::ProductDeployment.new(::YAML.load_file(@config_file))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'ops_manager/api/opsman'
|
2
|
+
|
3
|
+
class OpsManager
|
4
|
+
class ProductInstallation
|
5
|
+
attr_reader :guid
|
6
|
+
|
7
|
+
def initialize(guid, version, prepared)
|
8
|
+
@guid, @version, @prepared = guid, version, prepared
|
9
|
+
end
|
10
|
+
|
11
|
+
def prepared?
|
12
|
+
@prepared
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_version
|
16
|
+
Semver.new(@version)
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def find(name)
|
21
|
+
is = installation_settings_for(name)
|
22
|
+
new(
|
23
|
+
is.fetch('guid'),
|
24
|
+
is.fetch('product_version'),
|
25
|
+
is.fetch('prepared')
|
26
|
+
) if is
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def installation_settings_for(name)
|
32
|
+
res = opsman_api.get_installation_settings
|
33
|
+
parsed_res = JSON.parse(res.body)
|
34
|
+
products = parsed_res.fetch('products')
|
35
|
+
products.select{|o| o.fetch('identifier') == name }.first
|
36
|
+
end
|
37
|
+
|
38
|
+
def opsman_api
|
39
|
+
@opsman_api = OpsManager::Api::Opsman.new
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
class OpsManager
|
2
|
+
class ProductTemplateGenerator
|
3
|
+
OPS_MANAGER_PASSWORD_LENGTH = 20
|
4
|
+
OPS_MANAGER_SECRET_LENGTH = 20
|
5
|
+
OPS_MANAGER_SALT_LENGTH = 16
|
6
|
+
|
7
|
+
attr_reader :product_name
|
8
|
+
|
9
|
+
def initialize(product_name)
|
10
|
+
@product_name = product_name
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def generate
|
15
|
+
delete_partitions
|
16
|
+
delete_vm_credentials
|
17
|
+
delete_guid
|
18
|
+
delete_installation_name
|
19
|
+
delete_product_version
|
20
|
+
delete_jobs_guid
|
21
|
+
delete_prepared
|
22
|
+
delete_ops_manager_generated_passwords
|
23
|
+
delete_ops_manager_generated_salts
|
24
|
+
delete_ops_manager_generated_secrets
|
25
|
+
delete_private_key_pem
|
26
|
+
delete_product_version_from_properties
|
27
|
+
add_merging_strategy_for_jobs
|
28
|
+
|
29
|
+
{ 'products' => [ "(( merge on identifier ))" , selected_product ] }
|
30
|
+
end
|
31
|
+
|
32
|
+
def generate_yml
|
33
|
+
generate.to_yaml
|
34
|
+
.gsub('"(( merge on identifier ))"', '(( merge on identifier ))')
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
def delete_product_version_from_properties
|
39
|
+
delete_value_from_product_properties_if do |property|
|
40
|
+
property['identifier'] == 'product_version'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete_ops_manager_generated_passwords
|
45
|
+
delete_value_from_job_properties_if do |value|
|
46
|
+
value.fetch('password', '').length == OPS_MANAGER_PASSWORD_LENGTH
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete_private_key_pem
|
51
|
+
delete_value_from_product_properties_if do |property|
|
52
|
+
property['value'].is_a?(Hash) && property['value'].has_key?('private_key_pem')
|
53
|
+
end
|
54
|
+
|
55
|
+
delete_value_from_job_properties_if do |value|
|
56
|
+
value.fetch('secret', '').length == OPS_MANAGER_SECRET_LENGTH
|
57
|
+
value.has_key?('private_key_pem')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def delete_ops_manager_generated_salts
|
62
|
+
delete_value_from_job_properties_if do |value|
|
63
|
+
value.fetch('salt', '').length == OPS_MANAGER_SALT_LENGTH
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete_ops_manager_generated_secrets
|
68
|
+
delete_value_from_product_properties_if do |property|
|
69
|
+
property['value'].is_a?(Hash) && property['value'].fetch('secret', '').length == OPS_MANAGER_SECRET_LENGTH
|
70
|
+
end
|
71
|
+
|
72
|
+
delete_value_from_job_properties_if do |value|
|
73
|
+
value.fetch('secret', '').length == OPS_MANAGER_SECRET_LENGTH
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def delete_value_from_product_properties_if
|
78
|
+
selected_product.fetch('properties', []).each do |p|
|
79
|
+
p.delete('value') if p.is_a?(Hash) && yield(p)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def delete_value_from_job_properties_if
|
84
|
+
selected_product['jobs'].each do |j|
|
85
|
+
j.fetch('properties', []).each do |p|
|
86
|
+
value = p.fetch('value',{})
|
87
|
+
p.delete('value') if value.is_a?(Hash) && yield(value)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def delete_prepared
|
93
|
+
selected_product.delete("prepared")
|
94
|
+
end
|
95
|
+
|
96
|
+
def delete_guid
|
97
|
+
selected_product.delete("guid")
|
98
|
+
end
|
99
|
+
|
100
|
+
def delete_installation_name
|
101
|
+
selected_product.delete("installation_name")
|
102
|
+
end
|
103
|
+
|
104
|
+
def delete_product_version
|
105
|
+
selected_product.delete("product_version")
|
106
|
+
end
|
107
|
+
|
108
|
+
def add_merging_strategy_for_jobs
|
109
|
+
selected_product['jobs'].unshift("(( merge on identifier ))")
|
110
|
+
end
|
111
|
+
|
112
|
+
def delete_partitions
|
113
|
+
delete_from_jobs('partitions')
|
114
|
+
end
|
115
|
+
|
116
|
+
def delete_vm_credentials
|
117
|
+
delete_from_jobs('vm_credentials')
|
118
|
+
end
|
119
|
+
|
120
|
+
def delete_jobs_guid
|
121
|
+
delete_from_jobs('guid')
|
122
|
+
end
|
123
|
+
|
124
|
+
def selected_product
|
125
|
+
@selected_product ||= products.select {|p| p.fetch('identifier') == product_name }.first
|
126
|
+
end
|
127
|
+
|
128
|
+
def products
|
129
|
+
installation_settings.fetch('products')
|
130
|
+
end
|
131
|
+
|
132
|
+
def delete_from_jobs(key)
|
133
|
+
selected_product.tap do |sp|
|
134
|
+
sp['jobs'].each{ |j| j.delete(key) }
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def installation_settings
|
139
|
+
parsed_installation_settings = JSON.parse(installation_settings_response.body)
|
140
|
+
OpsManager::InstallationSettings.new(parsed_installation_settings)
|
141
|
+
end
|
142
|
+
|
143
|
+
def installation_settings_response
|
144
|
+
OpsManager::Api::Opsman.new(silent: true).get_installation_settings
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class OpsManager
|
2
|
+
class Semver < Array
|
3
|
+
def initialize s
|
4
|
+
return unless s
|
5
|
+
super(s.split('.').map { |e| e.to_i })
|
6
|
+
end
|
7
|
+
|
8
|
+
def < x
|
9
|
+
(self <=> x) < 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def > x
|
13
|
+
(self <=> x) > 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def == x
|
17
|
+
(self <=> x) == 0
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
self.join('.')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ops_manager.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'net/ping'
|
2
|
+
require 'forwardable'
|
3
|
+
require 'session_config'
|
4
|
+
|
5
|
+
class String
|
6
|
+
def colorize(color_code)
|
7
|
+
"\e[#{color_code}m#{self}\e[0m"
|
8
|
+
end
|
9
|
+
|
10
|
+
def red
|
11
|
+
colorize(31)
|
12
|
+
end
|
13
|
+
|
14
|
+
def green
|
15
|
+
colorize(32)
|
16
|
+
end
|
17
|
+
|
18
|
+
def yellow
|
19
|
+
colorize(33)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class OpsManager
|
24
|
+
extend SessionConfig
|
25
|
+
|
26
|
+
class << self
|
27
|
+
extend Forwardable
|
28
|
+
def_delegators :opsman_api, :get_token
|
29
|
+
|
30
|
+
def show_status
|
31
|
+
authenticated = !!opsman_api.get_token ? 'YES'.green : 'NO'.red
|
32
|
+
|
33
|
+
[
|
34
|
+
"Target: #{self.get_conf(:target).green}",
|
35
|
+
"Authenticated: #{authenticated}"
|
36
|
+
].join("\n")
|
37
|
+
end
|
38
|
+
|
39
|
+
def set_target(uri)
|
40
|
+
if target_is_pingable?(uri)
|
41
|
+
set_conf(:target, uri)
|
42
|
+
else
|
43
|
+
puts "Can not connect to #{uri}".red
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def login(username, password)
|
48
|
+
set_conf(:username, username)
|
49
|
+
set_conf(:password, password)
|
50
|
+
opsman_api.get_token
|
51
|
+
end
|
52
|
+
|
53
|
+
def target_and_login(uri, username, password)
|
54
|
+
self.set_target(uri) if uri
|
55
|
+
login(username, password) if username && password
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def opsman_api
|
60
|
+
OpsManager::Api::Opsman.new
|
61
|
+
end
|
62
|
+
|
63
|
+
def target_is_pingable?(uri)
|
64
|
+
Net::Ping::HTTP.new("https://#{uri}/docs").ping?
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
def target
|
70
|
+
self.class.get_conf(:target)
|
71
|
+
end
|
72
|
+
|
73
|
+
def username
|
74
|
+
self.class.get_conf(:username)
|
75
|
+
end
|
76
|
+
|
77
|
+
def password
|
78
|
+
self.class.get_conf(:password)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
require "ops_manager/version"
|
85
|
+
require "ops_manager/semver"
|
86
|
+
require "ops_manager/deployments/vsphere"
|
87
|
+
require 'ops_manager/configs/product_deployment'
|
88
|
+
require 'ops_manager/configs/opsman_deployment'
|
89
|
+
require "ops_manager/cli"
|
90
|
+
require "ops_manager/errors"
|
91
|
+
require "net/https"
|
92
|
+
require "uri"
|
93
|
+
require "json"
|
94
|
+
require "yaml"
|
data/ops_manager.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ops_manager/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ops_manager_cli"
|
8
|
+
spec.version = OpsManager::VERSION
|
9
|
+
spec.authors = ["CompoZed"]
|
10
|
+
spec.email = []
|
11
|
+
|
12
|
+
spec.summary = %q{ Performs Ops Manager deployments. }
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = "exe"
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rspec"
|
23
|
+
spec.add_development_dependency "vcr"
|
24
|
+
spec.add_development_dependency "webmock"
|
25
|
+
spec.add_development_dependency "byebug"
|
26
|
+
spec.add_dependency "rbvmomi"
|
27
|
+
spec.add_dependency "multipart-post"
|
28
|
+
spec.add_dependency "clamp"
|
29
|
+
spec.add_dependency "net-ping"
|
30
|
+
spec.add_dependency "cf-uaa-lib"
|
31
|
+
spec.add_dependency "session_config"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,249 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ops_manager_cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- CompoZed
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: vcr
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rbvmomi
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: multipart-post
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: clamp
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: net-ping
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: cf-uaa-lib
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: session_config
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
description:
|
182
|
+
email: []
|
183
|
+
executables:
|
184
|
+
- ops_manager
|
185
|
+
extensions: []
|
186
|
+
extra_rdoc_files: []
|
187
|
+
files:
|
188
|
+
- ".gitignore"
|
189
|
+
- ".rspec"
|
190
|
+
- ".ruby-version"
|
191
|
+
- ".travis.yml"
|
192
|
+
- CODE_OF_CONDUCT.md
|
193
|
+
- CONTRIBUTION.md
|
194
|
+
- Dockerfile
|
195
|
+
- Gemfile
|
196
|
+
- LICENSE.txt
|
197
|
+
- README.md
|
198
|
+
- Rakefile
|
199
|
+
- bin/clean_tapes
|
200
|
+
- bin/console
|
201
|
+
- bin/setup
|
202
|
+
- exe/ops_manager
|
203
|
+
- lib/ops_manager.rb
|
204
|
+
- lib/ops_manager/api/base.rb
|
205
|
+
- lib/ops_manager/api/opsman.rb
|
206
|
+
- lib/ops_manager/api/pivnet.rb
|
207
|
+
- lib/ops_manager/appliance_deployment.rb
|
208
|
+
- lib/ops_manager/cli.rb
|
209
|
+
- lib/ops_manager/configs/base.rb
|
210
|
+
- lib/ops_manager/configs/opsman_deployment.rb
|
211
|
+
- lib/ops_manager/configs/product_deployment.rb
|
212
|
+
- lib/ops_manager/deployments/vsphere.rb
|
213
|
+
- lib/ops_manager/director_template_generator.rb
|
214
|
+
- lib/ops_manager/errors.rb
|
215
|
+
- lib/ops_manager/installation.rb
|
216
|
+
- lib/ops_manager/installation_runner.rb
|
217
|
+
- lib/ops_manager/installation_settings.rb
|
218
|
+
- lib/ops_manager/logging.rb
|
219
|
+
- lib/ops_manager/product_deployment.rb
|
220
|
+
- lib/ops_manager/product_installation.rb
|
221
|
+
- lib/ops_manager/product_template_generator.rb
|
222
|
+
- lib/ops_manager/semver.rb
|
223
|
+
- lib/ops_manager/version.rb
|
224
|
+
- ops_manager.gemspec
|
225
|
+
homepage:
|
226
|
+
licenses:
|
227
|
+
- MIT
|
228
|
+
metadata: {}
|
229
|
+
post_install_message:
|
230
|
+
rdoc_options: []
|
231
|
+
require_paths:
|
232
|
+
- lib
|
233
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - ">="
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
238
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
|
+
requirements:
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '0'
|
243
|
+
requirements: []
|
244
|
+
rubyforge_project:
|
245
|
+
rubygems_version: 2.6.6
|
246
|
+
signing_key:
|
247
|
+
specification_version: 4
|
248
|
+
summary: Performs Ops Manager deployments.
|
249
|
+
test_files: []
|