class Hula::CloudFoundry
Attributes
api_url[R]
command_runner[R]
current_organization[R]
current_space[R]
domain[R]
logger[R]
Public Class Methods
new(args)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 23 def initialize(args) @domain = args.fetch(:domain) @api_url = args.fetch(:api_url) @logger = args.fetch(:logger, default_logger) @command_runner = args.fetch(:command_runner, default_command_runner) target_and_login = args.fetch(:target_and_login, true) if target_and_login target(api_url) login(args.fetch(:username), args.fetch(:password)) end end
Public Instance Methods
add_public_service_broker(service_name, _service_label, url, username, password)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 138 def add_public_service_broker(service_name, _service_label, url, username, password) cf("create-service-broker #{service_name} #{username} #{password} #{url}") service_plans = JSON.parse(cf('curl /v2/service_plans -X GET')) guids = service_plans['resources'].map do |resource| resource['metadata']['guid'] end guids.each do |guid| cf(%(curl /v2/service_plans/#{guid} -X PUT -d '{"public":true}')) end end
app_env(app_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 257 def app_env(app_name) cf("env #{app_name}") end
app_vcap_services(app_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 48 def app_vcap_services(app_name) app_environment(app_name)["VCAP_SERVICES"] end
assert_broker_is_in_marketplace(type)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 156 def assert_broker_is_in_marketplace(type) output = marketplace unless output.include?(type) fail "Broker #{type} not found in marketplace" end end
assert_instance_is_in_services_list(service_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 189 def assert_instance_is_in_services_list(service_name) output = cf('services') unless output.include?(service_name) fail "Instance #{service_name} not found in services list" end end
auth_token()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 36 def auth_token cf("oauth-token").lines.last.strip! end
bind_app_to_service(app_name, service_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 214 def bind_app_to_service(app_name, service_name) cf("bind-service #{app_name} #{service_name}") end
cf(command, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 287 def cf(command, options = {}) allow_failure = options.fetch(:allow_failure, false) cf_command = "cf #{command}" logger.info(cf_command) command_runner.run(cf_command, allow_failure: allow_failure) end
create_and_target_org(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 69 def create_and_target_org(name) create_org(name) sleep 1 target_org(name) end
create_and_target_space(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 84 def create_and_target_space(name) create_space(name) target_space(name) end
create_org(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 75 def create_org(name) cf("create-org #{name}") end
create_service_instance(type, name, plan)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 167 def create_service_instance(type, name, plan) cf("create-service #{type} #{plan} #{name}") end
create_service_key(service_instance_name, key_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 226 def create_service_key(service_instance_name, key_name) cf("create-service-key #{service_instance_name} #{key_name}") end
create_space(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 89 def create_space(name) cf("create-space #{name}") end
create_user(username, password)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 261 def create_user(username, password) cf("create-user #{username} #{password}") end
delete_app(name, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 209 def delete_app(name, options = {}) allow_failure = options.fetch(:allow_failure, true) cf("delete #{name} -f", allow_failure: allow_failure) end
delete_org(name, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 131 def delete_org(name, options = {}) allow_failure = options.fetch(:allow_failure, true) cf("delete-org #{name} -f", allow_failure: allow_failure) end
Also aliased as: reset!
delete_service_instance_and_unbind(name, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 171 def delete_service_instance_and_unbind(name, options = {}) allow_failure = options.fetch(:allow_failure, true) cf("delete-service -f #{name}", allow_failure: allow_failure) end
delete_service_key(service_instance_name, key_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 230 def delete_service_key(service_instance_name, key_name) cf("delete-service-key #{service_instance_name} #{key_name} -f") end
delete_space(name, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 126 def delete_space(name, options = {}) allow_failure = options.fetch(:allow_failure, true) cf("delete-space #{name} -f", allow_failure: allow_failure) end
delete_user(username)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 265 def delete_user(username) cf("delete-user -f #{username}") end
enable_diego_for_app(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 205 def enable_diego_for_app(name) cf("enable-diego #{name}") end
get_service_status(service_name, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 176 def get_service_status(service_name, options = {}) allow_failure = options.fetch(:allow_failure, false) output = cf("service #{service_name}", allow_failure: allow_failure) missing_instance_message = "Service instance #{service_name} not found" if output.include? missing_instance_message missing_instance_message else output[/^Status: .*$/i].gsub(/Status:\s+/i, '') end end
info()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 282 def info output = cf("curl /v2/info") JSON.parse(output) end
list_service_keys(service_instance_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 222 def list_service_keys(service_instance_name) cf("service-keys #{service_instance_name}") end
login(username, password, allow_failure = true)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 52 def login(username, password, allow_failure = true) cf("auth #{username} #{password}", allow_failure: allow_failure) end
marketplace()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 163 def marketplace cf('marketplace') end
org_exists?(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 103 def org_exists?(name) orgs = cf('orgs').lines[3..-1] orgs.map(&:strip).include?(name) end
push_app(app_path, name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 201 def push_app(app_path, name) cf("push #{name} -p #{app_path} -n #{name} -d #{domain} --no-start") end
push_app_and_start(app_path, name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 196 def push_app_and_start(app_path, name) push_app(app_path, name) start_app(name) end
remove_service_broker(service_name, options = {})
click to toggle source
# File lib/hula/cloud_foundry.rb, line 151 def remove_service_broker(service_name, options = {}) allow_failure = options.fetch(:allow_failure, true) cf("delete-service-broker #{service_name} -f", allow_failure: allow_failure) end
restart_app(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 238 def restart_app(name) stop_app(name) start_app(name) end
service_brokers()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 56 def service_brokers output = cf('service-brokers') if output.include?('No service brokers found') [] else output.split("\n").drop(3).map do |row| name, url = row.split(/\s+/) ServiceBroker.new(name: name, url: url) end end end
service_key(service_instance_name, key_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 234 def service_key(service_instance_name, key_name) cf("service-key #{service_instance_name} #{key_name}") end
set_org_role(username, org, role)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 274 def set_org_role(username, org, role) cf("set-org-role #{username} #{org} #{role}") end
setup_permissive_security_group(org, space)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 108 def setup_permissive_security_group(org, space) rules = [{ 'destination' => '0.0.0.0-255.255.255.255', 'protocol' => 'all' }] rule_file = Tempfile.new('default_security_group.json') rule_file.write(rules.to_json) rule_file.close cf("create-security-group prof-test #{rule_file.path}") cf("bind-security-group prof-test #{org} #{space}") cf('bind-staging-security-group prof-test') cf('bind-running-security-group prof-test') rule_file.unlink end
space_exists?(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 98 def space_exists?(name) spaces = cf('spaces').lines[3..-1] spaces.map(&:strip).include?(name) end
start_app(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 243 def start_app(name) cf("start #{name}") rescue => start_exception begin cf("logs --recent #{name}") ensure raise start_exception end end
stop_app(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 253 def stop_app(name) cf("stop #{name}") end
target(cloud_controller_url)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 44 def target(cloud_controller_url) cf("api #{cloud_controller_url} --skip-ssl-validation") end
target_org(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 79 def target_org(name) cf("target -o #{name}") @current_organization = name end
target_space(name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 93 def target_space(name) cf("target -s #{name}") @current_space = name end
unbind_app_from_service(app_name, service_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 218 def unbind_app_from_service(app_name, service_name) cf("unbind-service #{app_name} #{service_name}") end
url_for_app(app_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 40 def url_for_app(app_name) "https://#{app_name}.#{domain}" end
user_exists?(username, org)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 269 def user_exists?(username, org) output = cf("org-users #{org}") output.lines.select { |l| l.start_with? ' ' }.map(&:strip).uniq.include?(username) end
version()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 278 def version cf('-v') end
Private Instance Methods
app_environment(app_name)
click to toggle source
# File lib/hula/cloud_foundry.rb, line 300 def app_environment(app_name) env_output = cf("env #{app_name}") response = env_output[/^\{.*}$/m].split(/^\n/) response = response.map { |json| JSON.parse(json) } response.inject({}) { |result, current| result.merge(current) } end
clean_path()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 326 def clean_path '/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin/:sbin' end
default_command_runner()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 315 def default_command_runner @default_command_runner ||= CommandRunner.new(environment: env) end
default_logger()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 307 def default_logger @default_logger ||= begin STDOUT.sync = true require 'logger' Logger.new(STDOUT) end end
env()
click to toggle source
# File lib/hula/cloud_foundry.rb, line 319 def env @env ||= ENV.to_hash.merge( 'PATH' => clean_path, 'CF_HOME' => Dir.mktmpdir('cf-home') ) end