class Bim::Action::SSL
SSL
class used by Bim::Subcommands::SSL
Constants
- CREATE_SSL_PROFILE_PATH
- CRT_FILES_PATH
- CRT_FILES_URI
- CRT_PROFILES_PATH
- CRT_PROFILES_URI
- INSTALL_PATH
- UPLOAD_PATH
- VS_PATH
Public Class Methods
bundles()
click to toggle source
# File lib/bim/action/ssl.rb, line 20 def bundles cond = proc { |item| item['isBundle'] == 'true' } select_map(CRT_FILES_URI, cond) do |item| { 'name' => item['name'].split('.')[0...-1].join('.') } end end
create_ssl_profile(profilename, chain)
click to toggle source
# File lib/bim/action/ssl.rb, line 66 def create_ssl_profile(profilename, chain) uri = URI.join(Bim::BASE_URL, Bim::Action::SSL::CREATE_SSL_PROFILE_PATH) j = { 'name' => profilename, 'ciphers' => 'DEFAULT:!SSLv3', 'certKeyChain' => [ { 'name' => 'default', 'key' => "#{profilename}.key", 'cert' => "#{profilename}.crt", 'chain' => "#{chain}.crt" } ] }.to_json req = request(uri, Bim::AUTH, 'application/json', 'POST', j) http(uri).request(req).body end
detail(profile_name)
click to toggle source
# File lib/bim/action/ssl.rb, line 33 def detail(profile_name) specify(CRT_PROFILES_URI) do |item| item['name'] == profile_name || item['fullPath'] == profile_name end end
install(type, crt_name, local_file_path)
click to toggle source
# File lib/bim/action/ssl.rb, line 51 def install(type, crt_name, local_file_path) uri = URI.join(Bim::BASE_URL, Bim::Action::SSL::INSTALL_PATH[type.to_sym]) req = request( uri, Bim::AUTH, 'application/json', 'POST', { 'command' => 'install', 'name' => crt_name, 'from-local-file' => local_file_path }.to_json ) http(uri).request(req).body end
profiles()
click to toggle source
# File lib/bim/action/ssl.rb, line 27 def profiles map(CRT_PROFILES_URI) do |item| { 'name' => item['name'], 'fullPath' => item['fullPath'], 'key' => item['key'], 'chain' => item['chain'] } end end
replace(old_profilename, new_profilename, test = nil)
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/bim/action/ssl.rb, line 83 def replace(old_profilename, new_profilename, test = nil) result = { target_vs: [], change_vs: [], fail_vs: [] } JSON.parse(vs_list)['items'].each do |vs| next if test && vs['name'] != Bim::TEST_VS names = JSON.parse(profiles_items(vs['profilesReference']['link']))['items'].map { |p| p['name'] } next unless names.include?(old_profilename) # can not update only diff. old_names = names.map { |name| "/Common/#{name}" } names.delete(old_profilename) && names.push(new_profilename) names = names.map { |name| "/Common/#{name}" } next unless yes_or_no?(output_msg(vs['name'], old_names, names)) result[:target_vs] << vs['name'] res = update_profiles(vs['selfLink'], names) res.code == '200' ? result[:change_vs] << vs['name'] : result[:fail_vs] << vs['name'] end result.to_json end
upload(filepath)
click to toggle source
# File lib/bim/action/ssl.rb, line 39 def upload(filepath) f = File.read(filepath) uri = URI.join(Bim::BASE_URL, Bim::Action::SSL::UPLOAD_PATH, File.basename(filepath)) req = request(uri, Bim::AUTH, 'application/octet-stream', 'POST', f) do |req_in| req_in['Content-Length'] = f.size req_in['Content-Range'] = "0-#{f.size - 1}/#{f.size}" req_in end http(uri).request(req).body end
Private Class Methods
output_msg(vs_name, old_names, new_names)
click to toggle source
# File lib/bim/action/ssl.rb, line 117 def output_msg(vs_name, old_names, new_names) puts <<~MSG virtual server: #{vs_name} replace #{old_names} to #{new_names} diff: --: #{(old_names - new_names)} ++: #{(new_names - old_names)} MSG print 'is it ok? [y|n]: ' end
profiles_items(link)
click to toggle source
# File lib/bim/action/ssl.rb, line 107 def profiles_items(link) uri = URI.parse(link.sub('localhost', BIGIP_HOST)) get_body(uri) end
update_profiles(link, names)
click to toggle source
# File lib/bim/action/ssl.rb, line 112 def update_profiles(link, names) uri = URI.parse(link.sub('localhost', BIGIP_HOST)) post(uri, { profiles: names }.to_json) end