module Nucleus::Adapters::V1::OpenshiftV2::Application
Public Instance Methods
application(application_id)
click to toggle source
@see Stub#application
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 12 def application(application_id) to_nucleus_app(get("/application/#{app_id_by_name(application_id)}").body[:data]) end
applications()
click to toggle source
@see Stub#applications
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 7 def applications get('/applications').body[:data].collect { |application| to_nucleus_app(application) } end
create_application(application_entity)
click to toggle source
Creates the Openshift application and enables scaling by default. @see Stub#create_application
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 18 def create_application(application_entity) # handle runtimes / cartridges fail_with(:only_one_runtime) if application_entity[:runtimes].length > 1 fail_with(:must_have_runtime) if application_entity[:runtimes].empty? application_entity[:cartridge] = cartridge(application_entity.delete(:runtimes)[0]) # updates the application with a valid region identity retrieve_region(application_entity) if application_entity.key?(:region) # enable application scaling by default application_entity[:scale] = true unless application_entity.key?(:scale) created_application = post("/domains/#{app_domain}/applications", body: application_entity).body # now make sure we keep at least 2 deployments, allows proper identification of application state updated_application = put("/application/#{created_application[:data][:id]}", body: { keep_deployments: 2, auto_deploy: false }).body to_nucleus_app(updated_application[:data]) end
delete_application(application_id)
click to toggle source
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 37 def delete_application(application_id) delete("/applications/#{app_id_by_name(application_id)}") end
Private Instance Methods
app_id_by_name(application_name_or_id)
click to toggle source
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 43 def app_id_by_name(application_name_or_id) unless application_name_or_id.length == 24 && application_name_or_id.match(/[0-9a-f]{24}/) response = get("/domains/#{app_domain}/applications/#{application_name_or_id}", expects: [200, 404]) return response.body[:data][:id] if response.status == 200 end # presumably already is an application id application_name_or_id end
cartridge(runtime)
click to toggle source
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 52 def cartridge(runtime) cartridges = get('/cartridges').body[:data] matched_cartridges, partial_matches = matching_cartridges(cartridges, runtime) fail_with(:ambiguous_runtime, [runtime, matched_cartridges]) if matched_cartridges.length > 1 return matched_cartridges[0][:name] unless matched_cartridges.empty? fail_with(:invalid_runtime, [runtime]) if partial_matches.empty? latest = -1 partial_matches.each { |v| latest = v if v.to_f > latest.to_f } matched_cartridges.push(cartridges.find { |cartridge| cartridge[:name] == "#{runtime}-#{latest}" }) log.info("Selected cartridge '#{matched_cartridges.last[:name]}' to match '#{runtime}'") matched_cartridges.last[:name] end
matching_cartridges(cartridges, runtime)
click to toggle source
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 67 def matching_cartridges(cartridges, runtime) partial_matches = [] matches = cartridges.find_all do |cartridge| if cartridge[:type] != 'standalone' false elsif cartridge[:name] == runtime true else # is the name partially valid? matches = cartridge[:name].match(/(\w+)-([\.\d]+)/) # push the version so that we can finally choose the latest version partial_matches.push(matches[2]) if matches[1] == runtime # nevertheless at first the cartridge is invalid false end end [matches, partial_matches] end
to_nucleus_app(app, gear_groups = nil, deployments = nil)
click to toggle source
# File lib/nucleus/adapters/v1/openshift_v2/application.rb, line 86 def to_nucleus_app(app, gear_groups = nil, deployments = nil) gear_groups = load_gears(app[:id]) unless gear_groups deployments = load_deployments(app[:id]) unless deployments app[:release_version] = active_deployment(app, deployments)[:sha1] app[:state] = application_state(app, gear_groups, deployments) app[:web_url] = app.delete :app_url app[:autoscaled] = app.delete :scalable app[:region] = gear_groups[0][:gears][0][:region] app[:instances] = app.delete :gear_count app[:created_at] = app.delete :creation_time # applications can't be updated, use creation timestamp app[:updated_at] = app[:created_at] app[:active_runtime] = app.delete :framework # no additional runtimes, only one fixed (active) runtime per application app[:runtimes] = [app[:active_runtime]] app end