Manifest is a wrapper class for cartridge manifests.
Wrapper speeds up access and provides fixed API
TODO:
these should be configurable
When a cartridge is installed from a URL, we validate the vendor name by matching against VALID_VENDOR_NAME_PATTERN, and the cartridge name agasint VALID_CARTRIDGE_NAME_PATTERN. If it does not match the respective pattern, the cartridge will be rejected.
# File lib/openshift-origin-common/models/manifest.rb, line 334 def self.build_ident(vendor, software, software_version, cartridge_version) vendor = vendor.gsub(/\s+/, '').downcase "#{vendor}:#{software}:#{software_version}:#{cartridge_version}" end
# File lib/openshift-origin-common/models/manifest.rb, line 63 def self.manifest_from_yaml(yaml_str) YAML.load(yaml_str, :safe => true) end
Cartridge is a wrapper class for cartridge manifests
Cartridge.new('/var/lib/openshift/.cartridge_repository/php/1.0/metadata/manifest.yml', '3.5', '.../.cartridge_repository') -> Cartridge Cartridge.new('Name: ...', '3.5') -> Cartridge
# File lib/openshift-origin-common/models/manifest.rb, line 212 def initialize(manifest, version=nil, type=:url, repository_base_path='', check_names=true) if type == :url @manifest = YAML.safe_load(manifest) @manifest_path = :url else @manifest = YAML.safe_load_file(manifest) @manifest_path = manifest end # Validate and use the provided version, defaulting to the manifest Version key raise MissingElementError.new(nil, 'Version') unless @manifest.has_key?('Version') raise InvalidElementError.new(nil, 'Versions') if @manifest.has_key?('Versions') && !@manifest['Versions'].kind_of?(Array) if @manifest.has_key?('Compatible-Versions') && !@manifest['Compatible-Versions'].kind_of?(Array) raise InvalidElementError.new(nil, 'Compatible-Versions') end @versions = raw_versions.collect do |v| valid_version_number(v) ? v : '0.0.0' end @cartridge_version = @manifest['Cartridge-Version'].to_s unless valid_version_number(@cartridge_version) @cartridge_version = '0.0.0' end @compatible_versions = (@manifest['Compatible-Versions'] || []).collect do |v| valid_version_number(v.to_s) ? v.to_s : '0.0.0' end if version raise ArgumentError.new( "Unsupported version #{version} from #{versions} for #{@manifest['Name']}" ) unless versions.include?(version.to_s) @version = version.to_s @manifest['Version'] = @version else @version = @manifest['Version'].to_s end unless valid_version_number(@version) @version = '0.0.0' end # If version overrides are present, merge them on top of the manifest if @manifest.has_key?('Version-Overrides') vtree = @manifest['Version-Overrides'][@version] if vtree @manifest.merge!(vtree) end end @cartridge_vendor = @manifest['Cartridge-Vendor'] @name = @manifest['Name'] @short_name = @manifest['Cartridge-Short-Name'] @categories = @manifest['Categories'] || [] @is_deployable = @categories.include?('web_framework') @is_web_proxy = @categories.include?('web_proxy') @install_build_required = @manifest.has_key?('Install-Build-Required') ? @manifest['Install-Build-Required'] : false #FIXME: reinstate code after manifests are updated #raise MissingElementError.new(nil, 'Cartridge-Vendor') unless @cartridge_vendor #raise MissingElementError.new(nil, 'Cartridge-Version') unless @cartridge_version raise MissingElementError.new(nil, 'Cartridge-Short-Name') unless @short_name raise InvalidElementError.new(nil, 'Cartridge-Short-Name') if @short_name.include?('-') raise MissingElementError.new(nil, 'Name') unless @name if check_names validate_vendor_name validate_cartridge_name check_reserved_cartridge_name end if @manifest.has_key?('Source-Url') raise InvalidElementError.new(nil, 'Source-Url') unless @manifest['Source-Url'] =~ URI::ABS_URI @source_url = @manifest['Source-Url'] @source_md5 = @manifest['Source-Md5'] else raise MissingElementError.new('Source-Url is required in manifest to obtain cartridge via URL', 'Source-Url') if :url == @manifest_path end @short_name.upcase! if @cartridge_vendor && @name && @cartridge_version @directory = @name.downcase repository_directory = "#{@cartridge_vendor.gsub(/\s+/, '').downcase}-#{@name}" @repository_path = PathUtils.join(repository_base_path, repository_directory, @cartridge_version) end @endpoints = Endpoint.parse(@short_name, @manifest, @categories) end
# File lib/openshift-origin-common/models/manifest.rb, line 339 def self.parse_ident(ident) cooked = ident.split(':') raise ArgumentError.new("'#{ident}' is not a legal cartridge identifier") if 4 != cooked.size cooked end
Sort an array of "string" version numbers
# File lib/openshift-origin-common/models/manifest.rb, line 405 def self.sort_versions(array) results = [] copy = Marshal.load(Marshal.dump(array)) copy.delete_if {|v| v == '_'} copy.collect {|v| Gem::Version.new(v)}.sort.each do |version| results << version.to_s end results end
# File lib/openshift-origin-common/models/manifest.rb, line 390 def check_reserved_cartridge_name if name =~ RESERVED_CARTRIDGE_NAME_PATTERN raise InvalidElementError.new("'#{name}' is reserved.", 'Name') end end
# File lib/openshift-origin-common/models/manifest.rb, line 384 def check_reserved_vendor_name if cartridge_vendor =~ RESERVED_VENDOR_NAME_PATTERN raise InvalidElementError.new("'#{cartridge_vendor}' is reserved.", 'Cartridge-Vendor') end end
# File lib/openshift-origin-common/models/manifest.rb, line 321 def deployable? @is_deployable end
# File lib/openshift-origin-common/models/manifest.rb, line 400 def project_version_overrides(version, repository_base_path) Runtime::Manifest.new(manifest_path, version, :file, repository_base_path) end
Convenience method which returns an array containing only those Endpoints which have a public_port_name specified.
# File lib/openshift-origin-common/models/manifest.rb, line 317 def public_endpoints @endpoints.select { |e| e.public_port_name } end
obtain all software versions covered in this manifest
# File lib/openshift-origin-common/models/manifest.rb, line 309 def raw_versions seed = (@manifest['Versions'] || []).map { |v| v.to_s } seed << @manifest['Version'].to_s seed.uniq end
# File lib/openshift-origin-common/models/manifest.rb, line 345 def to_s instance_variables.each_with_object('<Cartridge: ') do |v, a| a << "#{v}: #{instance_variable_get(v)} " end << ' >' end
# File lib/openshift-origin-common/models/manifest.rb, line 396 def valid_version_number(version) version =~ /^\A(\d+\.*)+\Z/ end
# File lib/openshift-origin-common/models/manifest.rb, line 367 def validate_cartridge_name if name !~ VALID_CARTRIDGE_NAME_PATTERN raise InvalidElementError.new( "'#{name}' does not match pattern #{VALID_CARTRIDGE_NAME_PATTERN.inspect}.", 'Name' ) end if name.length > MAX_CARTRIDGE_NAME raise InvalidElementError.new("'#{name}' must be no longer than #{MAX_VENDOR_NAME} characters.", 'Name') end end
# File lib/openshift-origin-common/models/manifest.rb, line 351 def validate_vendor_name(check_reserved_name = false) if cartridge_vendor !~ VALID_VENDOR_NAME_PATTERN raise InvalidElementError.new( "'#{cartridge_vendor}' does not match pattern #{VALID_VENDOR_NAME_PATTERN.inspect}.", 'Cartridge-Vendor' ) end if cartridge_vendor.length > MAX_VENDOR_NAME raise InvalidElementError.new( "'#{cartridge_vendor}' must be no longer than #{MAX_VENDOR_NAME} characters.", 'Cartridge-Vendor' ) end end
Generated with the Darkfish Rdoc Generator 2.