module Platform
Public Class Methods
call_status_api(hash)
click to toggle source
make api call to check platform status.
# File lib/commands/platform.rb, line 259 def self.call_status_api(hash) begin url = URI.parse("#{hash['parameters']['url']}/api/platforms/#{hash['parameters']['env']}/status_check") http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Get.new(url.request_uri) request.basic_auth(hash['parameters']['login'],hash['parameters']['password']) http.request(request) rescue Exception => e puts "[ ERROR ]".colorize(:red)+" Invalid url: Please enter a valid url.".colorize(:white) puts "[ EXCEPTION LOG DETAILS ]".colorize(:red) puts e exit end end
create(hash)
click to toggle source
create a new platform on cwp
# File lib/commands/platform.rb, line 52 def self.create(hash) bc = self.validate_blueprint(hash["parameters"]["blueprint"]) oc = self.organization_and_compute_resource(hash) begin url = URI.parse("#{hash['parameters']['url']}/api/platforms/deploy") http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Post.new(url.request_uri) request.set_form_data({ "baseline" => hash["parameters"]["baseline"], "instance" => hash["parameters"]["instance"], "reference_name" => hash["parameters"]["reference_name"], "yaml_content" => bc, "compute_resource_id" => oc["compute_resource_id"], "organization_id" => oc["organization_id"] }) request.basic_auth(hash["parameters"]['login'],hash["parameters"]['password']) response = http.request(request) rescue Exception => e puts "[ ERROR ]".colorize(:red)+" Invalid url: Please enter a valid url.".colorize(:white) puts "[ EXCEPTION LOG DETAILS ]".colorize(:red) puts e exit end begin if response.body["error"] error = JSON.parse(response.body)["error"] errors = JSON.parse(response.body)["error"]["errors"] unless errors.nil? errors.each do |key,value| puts "INFO ".colorize(:yellow)+"#{value.join(',')}".colorize(:red) end end puts "INFO ".colorize(:yellow)+"#{error['message']}".colorize(:red) unless error["message"].nil? else puts "INFO ".colorize(:yellow)+" Data were successfully sent to Cloud Portal. Please check deployment status ".colorize(:white) end # Pretty print response json from API loglevel = hash["parameters"]["loglevel"].downcase if !hash["parameters"]["loglevel"].nil? if (loglevel == "debug") puts "[ RESPONSE CODE ]".colorize(:blue) puts response.code.colorize(:white) puts "[ RESPONSE JSON ]".colorize(:blue) puts JSON.pretty_generate(JSON.parse(response.body)).colorize(:white) end rescue Exception => e puts e.backtrace puts response.body end end
fetch_compute_resource_id(params, compute_resources)
click to toggle source
Match for right compute resource and fetch the ID
# File lib/commands/platform.rb, line 128 def self.fetch_compute_resource_id(params, compute_resources) compute_resource_id = "" unless compute_resources.nil? compute_resources.each do |cr| if cr["compute_resource_name"] == params["parameters"]["compute_resource"] compute_resource_id = cr["compute_resource_id"] end end end return compute_resource_id end
organization_and_compute_resource(params)
click to toggle source
Set organization and compute resource ID as setters
# File lib/commands/platform.rb, line 111 def self.organization_and_compute_resource(params) begin url = URI.parse("#{params['parameters']['url']}/api/organizations/#{params['parameters']['organization']}/compute_resources") http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Get.new(url.request_uri) request.basic_auth(params["parameters"]['login'],params["parameters"]['password']) response = http.request(request) organization_compute_resources = JSON.parse(response.body) Hash["organization_id" => organization_compute_resources["organization_id"], "compute_resource_id" => self.fetch_compute_resource_id(params, organization_compute_resources["compute_resources"])] rescue Exception => e puts "[ ERROR ]".colorize(:red)+" Invalid url: Please enter a valid url.".colorize(:white) puts "[ EXCEPTION LOG DETAILS ]".colorize(:red) puts e exit end end
print_status(response, loglevel)
click to toggle source
print status check common for wait and status
# File lib/commands/platform.rb, line 274 def self.print_status(response, loglevel) log = loglevel.nil? ? "info" : loglevel.downcase begin json = JSON.parse(response.body)["deploy_status"] if ( log == "info" ) if @old_json.nil? if json.nil? json = JSON.parse(response.body) puts "INFO : ".colorize(:yellow)+json["error"]["message"].colorize(:white) else json.each do |key,value| puts "INFO :".colorize(:yellow)+" #{key} : #{json[key]}".colorize(:white) end end else @old_json.each do |key,value| if ( @old_json[key] != json[key] ) puts "INFO :".colorize(:yellow)+" #{key} : #{json[key]}".colorize(:white) end end end @old_json = json elsif ( log == "debug" ) if @old_json.nil? if json.nil? json = JSON.parse(response.body) puts "INFO : ".colorize(:yellow)+json["error"]["message"].colorize(:white) else json.each do |key,value| puts "INFO :".colorize(:yellow)+" #{key} : #{json[key]}".colorize(:white) end end else @old_json.each do |key,value| if ( @old_json[key] != json[key] ) puts "INFO :".colorize(:yellow)+" #{key} : #{json[key]}".colorize(:white) end end end @old_json = json # "----- ABOVE IS THE INFO MODE------" puts "[ DEBUG ]".colorize(:red)+" [ RESPONSE CODE ]".colorize(:blue) puts response.code.colorize(:white) puts "[ DEBUG ]".colorize(:red)+" [ RESPONSE CONTENT TYPE ]".colorize(:blue) puts response.content_type.colorize(:white) puts "[ DEBUG ]".colorize(:red)+" [ RESPONSE JSON ]".colorize(:blue) puts JSON.pretty_generate(JSON.parse(response.body)).colorize(:white) else puts "INVALID LOG LEVEL".colorize(:red) puts "Log Level must be either INFO or DEBUG".colorize(:white) end rescue Exception => e puts response.body end end
process_from_arguments(params)
click to toggle source
build hash from arguments
# File lib/commands/platform.rb, line 3 def self.process_from_arguments(params) if self.validate(params) self.create(params) else exit end end
validate(hash)
click to toggle source
validate hash either from yaml file or arguments
# File lib/commands/platform.rb, line 11 def self.validate(hash) has_error = true if(hash["parameters"]["blueprint"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" blueprint is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["url"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" url is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["reference_name"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" reference_name is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["baseline"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" baseline is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["instance"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" instance is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["compute_resource"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" compute_resource is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["organization"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" organization is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["login"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" login is mandatory. Please specify in configuration file or in command line.".colorize(:white) end if(hash["parameters"]["password"].nil?) has_error = false puts "[ ERROR ]".colorize(:red)+" password is mandatory. Please specify in configuration file or in command line.".colorize(:white) end return has_error end
validate_and_check_status(hash)
click to toggle source
method to return status log
# File lib/commands/platform.rb, line 175 def self.validate_and_check_status(hash) if self.validate_delete_and_status_params(hash) response = self.call_status_api(hash) self.print_status(response,hash["parameters"]["loglevel"]) end end
validate_and_check_wait_status(hash)
click to toggle source
wait status method
# File lib/commands/platform.rb, line 182 def self.validate_and_check_wait_status(hash) if hash["parameters"]["status"].nil? puts "[ ERROR ]".colorize(:red)+" Please enter status=xxx".colorize(:white) self.validate_delete_and_status_params(hash) exit else if self.validate_delete_and_status_params(hash) timeout_limit = hash["parameters"]["timeout"].nil? ? "2h".split("") : hash["parameters"]["timeout"].split("") custom_timeout = begin if (timeout_limit[1].downcase == "m") timeout_limit[0].to_i elsif (timeout_limit[1].downcase == "h") ( timeout_limit[0].to_i * 60 ) elsif (timeout_limit[1].downcase == "d") ( 24*60*timeout_limit[0].to_i ) else ( 2*60 ) end rescue Exception => e ( 2*60 ) end looping_time = Time.now + ( custom_timeout * 60 ) loop do if ( Time.now >= looping_time ) puts "[ TIMEOUT ]".colorize(:red)+" error status code 2".colorize(:white) break; else response = self.call_status_api(hash) begin body = JSON.parse(response.body, hash["loglevel"]) if (body["deploy_status"]["status"] == "failed") puts "[ PLATFORM DEPLOYMENT FAILED ]".colorize(:red)+" error status code 1".colorize(:white) self.print_status(response, hash["parameters"]["loglevel"]) break else if (body["deploy_status"]["status"] == hash["parameters"]["status"]) puts "[ PLATFORM DEPLOYED SUCCESSFULLY ]".colorize(:green)+" error status code 0".colorize(:white) self.print_status(response, hash["parameters"]["loglevel"]) break else self.print_status(response, hash["parameters"]["loglevel"]) end end rescue Exception => e self.print_status(response, hash["parameters"]["loglevel"]) break end end sleep(10) end end end end
validate_blueprint(blueprint)
click to toggle source
validate the blueprint file path in params
# File lib/commands/platform.rb, line 95 def self.validate_blueprint(blueprint) if (File.extname(blueprint) != ".yaml") puts "[ ERROR ]".colorize(:red)+" Invalid blueprint file, File should be of .yaml extension.".colorize(:white) exit else begin File.read(blueprint) rescue Exception => e puts "[ ERROR ]".colorize(:red)+" Could not read blueprint file path, upload a valid file path.".colorize(:white) puts "[ EXCEPTION LOG DETAILS ]".colorize(:red) puts e exit end end end
validate_delete_and_status_params(hash)
click to toggle source
validate delete hash
# File lib/commands/platform.rb, line 238 def self.validate_delete_and_status_params(hash) has_error = true if hash["parameters"]["env"].nil? puts "[ ERROR ]".colorize(:red)+" Please enter env=environment_name".colorize(:white) has_error = false end if hash["parameters"]["login"].nil? puts "[ ERROR ]".colorize(:red)+" Please enter login=xyz".colorize(:white) has_error = false end if hash["parameters"]["password"].nil? puts "[ ERROR ]".colorize(:red)+" Please enter password=***".colorize(:white) has_error = false end if hash["parameters"]["url"].nil? puts "[ ERROR ]".colorize(:red)+" Please enter url".colorize(:white) has_error = false end return has_error end
validate_delete_platform(hash)
click to toggle source
Destroy a platform from cwp
# File lib/commands/platform.rb, line 140 def self.validate_delete_platform(hash) if self.validate_delete_and_status_params(hash) begin url = URI.parse("#{hash['parameters']['url']}/api/platforms/#{hash['parameters']['env']}") http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Delete.new(url.request_uri) request.basic_auth(hash['parameters']['login'],hash['parameters']['password']) response = http.request(request) rescue Exception => e puts "[ ERROR ]".colorize(:red)+" Invalid url: Please enter a valid url.".colorize(:white) puts "[ EXCEPTION LOG DETAILS ]".colorize(:red) puts e exit end begin if response.body["error"] msg = JSON.parse(response.body) puts "INFO ".colorize(:yellow)+" #{msg['error']['message']}".colorize(:red) else puts "INFO ".colorize(:yellow)+" Successfully deleted platform".colorize(:white) end loglevel = hash["parameters"]["loglevel"].downcase if !hash["parameters"]["loglevel"].nil? if (loglevel == "debug") # Pretty print response json from API puts "[ RESPONSE CODE ]".colorize(:blue) puts response.code.colorize(:white) puts "[ RESPONSE JSON ]".colorize(:blue) puts JSON.pretty_generate(JSON.parse(response.body)).colorize(:white) end rescue Exception => e puts response.body end end end