18F/cg-sandbox-bot

View on GitHub
cf_client.rb

Summary

Maintainability
A
1 hr
Test Coverage
#!/usr/bin/env ruby
require 'rubygems'
require 'oauth2'
require 'cgi'

class CFClient

  @@domain_name = ENV["DOMAIN_NAME"]

    def initialize(client_id, client_secret, uaa_url)
    @client = OAuth2::Client.new(
      client_id,
      client_secret,
      :site => uaa_url)

        @token = @client.client_credentials.get_token;

    end

  def api_url

    return "https://api.#{@@domain_name}/v2"

  end

  def get_organizations

    response = @token.get("#{api_url}/organizations")
    orgs = response.parsed

  end

  def get_organization_by_name(org_name)

    org = nil

    response = @token.get("#{api_url}/organizations?q=name:#{org_name}")
    if response.parsed["total_results"] == 1
      org = response.parsed['resources'][0]
    end

    return org

  end

  def get_organization_quota_by_name(org_name)

    quota = nil

    response = @token.get("#{api_url}/quota_definitions?q=name:#{org_name}")
    if response.parsed["total_results"] == 1
      quota = response.parsed['resources'][0]
    end

    return quota

  end

  def get_organization_spaces(org_guid)

    response = @token.get("#{api_url}/organizations/#{(org_guid)}/spaces")
    spaces = response.parsed["resources"]

  end

  def get_users

    response = @token.get("#{api_url}/users?order-direction=desc")
    users = response.parsed["resources"];

  end

  def add_user_to_org(user_guid, org_guid)

    # Add user to org
    @token.put("#{api_url}/organizations/#{org_guid}/users/#{user_guid}")

  end


  def create_organization(org_name, quota_definition_guid)

    req = {
      name: org_name,
      quota_definition_guid: quota_definition_guid
    }

    response = @token.post("#{api_url}/organizations", body: req.to_json)
    org = response.parsed

  end

  def create_space(name, organization_guid, developer_guids, manager_guids, space_quota_guid)

    req = {
      name: name,
      organization_guid: organization_guid,
      developer_guids: developer_guids,
      manager_guids: manager_guids,
      space_quota_definition_guid: space_quota_guid
    }
    sr = @token.post("#{api_url}/spaces",
        body: req.to_json)

  end


  def get_organization_quota(org_guid)

    response = @token.get("#{api_url}/quota_definitions/#{org_guid}")
    quota = response.parsed

  end

  def increase_org_quota(org)

    quota = get_organization_quota(org['entity']['quota_definition_guid'])
    update_url = quota["metadata"]["url"]
    quota_total_routes = quota["entity"]["total_routes"]
    quota_total_services = quota["entity"]["total_services"]
    quota_memory_limit = quota["entity"]["memory_limit"]
    org_spaces = get_organization_spaces(org['metadata']['guid'])
    space_count = org_spaces.length
    computed_total_routes_services = 10 * space_count
    computed_memory_limit = 1024 * space_count
    req = {
      name: org['entity']['name'],
      non_basic_services_allowed: true,
      total_services: quota_total_services > computed_total_routes_services ? quota_total_services : computed_total_routes_services,
      total_routes: quota_total_routes > computed_total_routes_services ? quota_total_routes : computed_total_routes_services,
      memory_limit: quota_memory_limit > computed_memory_limit ? quota_memory_limit : computed_memory_limit,
      instance_memory_limit: -1
    }
    # Update quota definition
    response = @token.put("#{api_url}/quota_definitions/" + quota["metadata"]["guid"],
      body: req.to_json)

  end

  def create_organization_quota(org_name)

    req = {
      name: org_name,
      non_basic_services_allowed: false,
      total_services: 10,
      total_routes: 10,
      memory_limit: 1024,
      instance_memory_limit: -1
    }

    response = @token.post("#{api_url}/quota_definitions", body: req.to_json)
    org_quota = response.parsed

  end


  def create_organization_space_quota_definition(org_guid, space_name)

    req = {
      organization_guid: org_guid,
      name: space_name,
      non_basic_services_allowed: false,
      total_services: 10,
      total_routes: 10,
      memory_limit: 1024,
      instance_memory_limit: -1
    }

    response = @token.post("#{api_url}/space_quota_definitions", body: req.to_json)
    org_quota = response.parsed

  end


  def get_quota_definitions

    response = @token.get("#{api_url}/quota_definitions")
    quota = response.parsed

  end

  def get_space_quota_definitions

    response = @token.get("#{api_url}/space_quota_definitions")
    quota = response.parsed

  end

  def get_organization_space_quota_definitions(org_guid)

    space_quota_definitions = nil

    response = @token.get("#{api_url}/organizations/#{org_guid}/space_quota_definitions")

    if response.parsed["total_results"] != 0
      space_quota_definitions = response.parsed['resources']
    end

    return space_quota_definitions

  end

  def get_organization_space_quota_definition_by_name(org_guid, name)

    space_quota_definition = nil

    space_quota_definitions = get_organization_space_quota_definitions(org_guid)

    if space_quota_definitions
      space_quota_definitions.each do |quota_definition|
        if quota_definition['entity']['name'] == name
          space_quota_definition = quota_definition
          break
        end
      end
    end

    space_quota_definition

  end

  def organization_space_name_exists?(org_guid, space_name)

    response = @token.get("#{api_url}/organizations/#{(org_guid)}/spaces?q=name:#{CGI.escape space_name}")
    return response.parsed["total_results"] == 1

  end

end