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

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