class Octo::OctoProjectShow

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/octo.rb, line 1025
def run
  if Chef::Config[:knife][:octo_instance].nil?
    ui.error("Please specify your Octopus Deploy instance in your knife config as -\nknife[:octo_instance] = 'MYOCTO.MYDOMAIN'")
    exit
  end
  if Chef::Config[:knife][:octo_apikey].nil?
    ui.error("Please specify your Octopus API key in your knife config as -\nknife[:octo_apikey]  = 'MYKEY'\nSee Also : https://octopus.com/docs/api-and-integration/api/how-to-create-an-api-key")
    exit
  end

  if name_args.size == 0
    ui.error("#{'Provide the project name!'.red}")
    return
  end
  if (config[:env] && !config[:release])
    ui.error('You cannot specify just an environment, specify a release and an environment.')
    exit
  end
  octo_methods = OctoHelperMethods.new(Chef::Config[:knife][:octo_apikey],Chef::Config[:knife][:octo_instance])
  request = octo_methods.generic_call('GET', "projects/#{name_args[0]}", false)
  case name_args.size
  when 1
    if config[:release]
      ui.error('You specified the release flag but did not provide a release number.')
      exit
    end
    if config[:env]
      ui.error('You cannot specify just an environment, specify a release and an environment.')
      exit
    end
    if request['response'] == 'ok'
      octo_methods.create_local_file_by_id('environments')
      if config[:long]
        parser = octo_methods.parse_project_list(request['message'],true,false)
        octo_methods.delete_local_file
      else
        parser = octo_methods.parse_project_list(request['message'],false,false)
      end
      if parser['response'] == 'ok'
        print parser['message']
      else
        ui.error(parser['message'])
      end
    else
      ui.error(request['message'])
    end
    octo_methods.delete_local_file
  when 2
    if config[:release]
      if request['response'] == 'ok'
        second_request = octo_methods.generic_call('GET', "projects/#{request['message']['Id']}/releases/#{name_args[1]}", false)
        if second_request['response'] == 'ok'
          release_result = octo_methods.parse_project_release(second_request['message'])
          if release_result['response'] == 'ok'
            print release_result['message']
          else
            ui.error(release_result['message'])
          end

        else
          ui.error(second_request['message'])
        end
      else
        ui.error(request['message'])
      end
    end

  when 3
    # if config env
    if (config[:release] && config[:env])
      if request['response'] == 'ok'
        second_request = octo_methods.generic_call('GET', "projects/#{request['message']['Id']}/releases/#{name_args[1]}", false)
        if second_request['response'] == 'ok'
          r_id = second_request['message']['Id']
          env = octo_methods.eid_from_name(name_args[2])
          if env['response'] == 'ok'
            third_request = octo_methods.generic_call('GET', "releases/#{r_id}/deployments/preview/#{env['message']}", false)
            if third_request['response'] == 'ok'
              if config[:long]
                d_deets = octo_methods.parse_deployment(third_request['message'],true)
              else
                d_deets = octo_methods.parse_deployment(third_request['message'],false)
              end
              if d_deets['response'] == 'ok'
                print d_deets['message']
              else
                ui.error(d_deets['message'])
                exit
              end
            else
              ui.error(third_request['message'])
              exit
            end
          else
            ui.error(env['message'])
          end
        else
          ui.error(second_request['message'])
          exit
        end
      else
        ui.error(request['message'])
      end

    end
    # end env
  else
    ui.error('You can only specify two options')
  end
  print "\n"
end