# File lib/simp/metadata/component.rb, line 186 def primary locations.primary end
class Simp::Metadata::Component
Attributes
engine[RW]
release_version[RW]
Public Class Methods
new(engine, name, version)
click to toggle source
# File lib/simp/metadata/component.rb, line 8 def initialize(engine, name, version) @engine = engine @name = name @release_version = version end
Public Instance Methods
[](index)
click to toggle source
# File lib/simp/metadata/component.rb, line 127 def [](index) send index.to_sym end
asset_name()
click to toggle source
# File lib/simp/metadata/component.rb, line 156 def asset_name if real_asset_name.nil? case component_type when 'puppet-module' splitted = name.split('-') splitted[splitted.size - 1] else name end else real_asset_name end end
binaryname()
click to toggle source
# File lib/simp/metadata/component.rb, line 396 def binaryname "#{asset_name}-#{version}.#{extension}" end
branch()
click to toggle source
# File lib/simp/metadata/component.rb, line 263 def branch get_from_release['branch'] end
branch=(value)
click to toggle source
# File lib/simp/metadata/component.rb, line 267 def branch=(value) release = release_source.releases[release_version] unless release.nil? if release.key?(name) release[name]['branch'] = value else release[name] = { 'branch' => value } end end release_source.dirty = true end
build(destination)
click to toggle source
# File lib/simp/metadata/component.rb, line 463 def build(destination) currentdir = Dir.pwd destination = currentdir if destination.nil? abort(Simp::Metadata.critical("File #{rpm_name} already exists in #{destination}. Please delete this file and re-run the command if you wish to replace it.")[0]) if File.exist?("#{destination}/#{rpm_name}") # Create tmp dir and clone source Dir.mktmpdir do |dir| Dir.chdir(dir.to_s) do system("git clone #{url} source > /dev/null") Dir.chdir('source') do system("git checkout #{version}") # sanitize excludes = %w(.git .gitignore) if File.exist?('./.simp.yml') config = YAML.load_file('.simp.yml') if config.key?('sanitize') sanitize = config['sanitize'] excludes = excludes + ['.simp.yml'] + sanitize['exclude'] if sanitize.key?('exclude') if sanitize.key?('scripts') sanitize['scripts'].each do |command| puts `#{command}` end end end end # Make build dirs FileUtils.makedirs "#{dir}/usr/share/simp/modules/#{module_name}" # Create tarball and extract to tmp/usr/share/simp/#{module_name} errorcode = Simp::Metadata.run("tar -cf - --exclude=./#{excludes.join(' --exclude=./')} . | tar -xvpf - -C #{dir}/usr/share/simp/modules/#{module_name}") abort(Simp::Metadata.critical("Failed to create and extract tarball for #{name}")) unless errorcode == 0 # Set RPM build options metadata = JSON.parse File.read('metadata.json') heredoc = <<-HEREDOC -s dir -t rpm --name '#{rpm_basename}' --rpm-summary '#{metadata['name'].split('-')[1].capitalize} Puppet Module' --description '#{metadata['summary']}' --maintainer 'info@onyxpoint.com' --category Applications/System --prefix 'usr/share/simp/modules' --url '#{metadata['source']}' --vendor "Onyx Point, Inc" --license '#{metadata['license']}' --package '#{currentdir}/#{rpm_name}' --version '#{metadata['version']}' --iteration '#{revision}' --architecture '#{target}' --verbose -C #{dir}/usr/share/simp/modules --rpm-digest sha512 -d 'simp-adapter' --directories=/usr/share/simp/modules/#{module_name} HEREDOC options = heredoc.tr("\n", ' ') # Create RPM Dir.chdir(dir.to_s) do errorcode = Simp::Metadata.run("fpm #{options} 2> /dev/null") abort(Simp::Metadata.critical("Failed to create RPM for #{module_name}")[0]) unless errorcode == 0 puts "RPM #{rpm_name} built successfully" if File.exist?("#{currentdir}/#{rpm_name}") end end end end FileUtils.move "#{currentdir}/#{rpm_name}", destination end
buildinfo(type = nil)
click to toggle source
# File lib/simp/metadata/component.rb, line 455 def buildinfo(type = nil) if type.nil? {} else Simp::Metadata::Buildinfo.new(self, type) end end
compiled?()
click to toggle source
# File lib/simp/metadata/component.rb, line 388 def compiled? if get_from_release.key?('compiled') get_from_release['compiled'] else false end end
component_source()
click to toggle source
# File lib/simp/metadata/component.rb, line 35 def component_source retval = engine.sources['bootstrap_metadata'] engine.sources.each do |_name, source| next if source.components.nil? if source.components.key?(name) retval = source break end end retval end
component_type()
click to toggle source
# File lib/simp/metadata/component.rb, line 214 def component_type get_from_component['component-type'] end
component_version()
click to toggle source
# File lib/simp/metadata/component.rb, line 334 def component_version if version =~ /^[v][0-9]/ version.split('v')[1] else version end end
diff(component, attribute)
click to toggle source
# File lib/simp/metadata/component.rb, line 426 def diff(component, attribute) diff = {} if attribute.nil? current_hash = {} comp_hash = {} each do |attr, value| current_hash.merge!(attr => value) end component.each do |attr, value| comp_hash.merge!(attr => value) end unless current_hash == comp_hash current_hash.each do |attr, value| diff[attr] = { 'original' => (current_hash[attr]).to_s, 'changed' => (comp_hash[attr]).to_s } if comp_hash[attr] != value end end diff else v1 = self[attribute.to_s] v2 = component[attribute.to_s] unless v1 == v2 diff[attribute] = { 'original' => v1.to_s, 'changed' => v2.to_s } diff end end end
download(destination, src)
click to toggle source
# File lib/simp/metadata/component.rb, line 536 def download(destination, src) destination = Dir.pwd if destination.nil? rpm_name = self.rpm_name return if File.exist?("#{destination}/#{rpm_name}") el_version = platform.split('el')[1] if src.any? sources = src else sources = ["https://download.simp-project.com/SIMP/yum/simp6/el/#{el_version}/x86_64", "https://download.simp-project.com/SIMP/yum/unstable/el/#{el_version}/x86_64"] end sources.each do |source| if source =~ /^https?:/ file_check = `curl -sLI #{source}/#{rpm_name} | head -n 1 | awk '{print $2}'`.chomp `wget -q #{source}/#{rpm_name}` if file_check == '200' elsif File.exist?("#{source}/#{rpm_name}") FileUtils.cp "#{source}/#{rpm_name}", destination end puts "Copied #{rpm_name} from #{source}" if File.exist?("#{destination}/#{rpm_name}") return if File.exist?("#{destination}/#{rpm_name}") end puts "Unable to find #{rpm_name} from #{sources}" end
each() { |key, self| ... }
click to toggle source
# File lib/simp/metadata/component.rb, line 131 def each keys.each do |key| yield key, self[key] end end
extension()
click to toggle source
# File lib/simp/metadata/component.rb, line 102 def extension if real_extension.nil? case component_type when 'simp-metadata' 'tgz' when 'logstash-filter' 'gem' when 'rubygem' 'gem' when 'grafana-plugin' 'zip' when 'puppet-module' 'tgz' else '' end else real_extension end end
extract()
click to toggle source
# File lib/simp/metadata/component.rb, line 198 def extract locations.primary.extract end
fetch_data(item)
click to toggle source
Will be used to grab method based data in the future, rather then calling get_from_release
or get_from_component
directly,
For now, just use it in Simp::Metadata::Buildinfo
# File lib/simp/metadata/component.rb, line 70 def fetch_data(item) component = get_from_component release = get_from_release if release.key?(item) release[item] else component[item] end end
format()
click to toggle source
XXX: ToDo Generate a filename, and output file type; ie, directory or file
# File lib/simp/metadata/component.rb, line 210 def format get_from_component['format'] end
get_from_component()
click to toggle source
# File lib/simp/metadata/component.rb, line 80 def get_from_component component_source.components[name] end
get_from_release()
click to toggle source
# File lib/simp/metadata/component.rb, line 84 def get_from_release retval = {} if release_source.releases.key?(release_version) if release_source.releases[release_version].key?(name) retval = release_source.releases[release_version][name] end else if release_source.release(release_version).key?(name) retval = release_source.release(release_version)[name] end end retval end
keys()
click to toggle source
# File lib/simp/metadata/component.rb, line 123 def keys %w(component_type authoritative asset_name extension format module_name type url method extract branch tag ref version release_source component_source target revision) end
locations()
click to toggle source
# File lib/simp/metadata/component.rb, line 202 def locations # XXX: ToDo Allow manifest.yaml to override locations # XXX: ToDo Use primary_source and mirrors here if locations is empty Simp::Metadata::Locations.new({ 'locations' => get_from_component['locations'], 'primary_source' => get_from_component['primary_source'], 'mirrors' => get_from_component['mirrors'] }, self) end
method()
click to toggle source
# File lib/simp/metadata/component.rb, line 194 def method locations.primary.method end
module_name()
click to toggle source
# File lib/simp/metadata/component.rb, line 152 def module_name asset_name end
name(type = 'component')
click to toggle source
# File lib/simp/metadata/component.rb, line 18 def name(type = 'component') case type when 'component' @name when 'puppetfile' if component_type == 'rubygem' "rubygem-#{@name.tr('-', '_')}" elsif component_type == 'puppet-module' @name.gsub(/pupmod-/, '') else @name end else abort(Simp::Metadata.critical("Expected type to be 'component' or 'puppetfile'")[0]) end end
output_filename()
click to toggle source
# File lib/simp/metadata/component.rb, line 178 def output_filename if compiled? "#{name}-#{version}.#{extension}" else name end end
output_type()
click to toggle source
# File lib/simp/metadata/component.rb, line 170 def output_type if compiled? :file else :directory end end
platform()
click to toggle source
# File lib/simp/metadata/component.rb, line 371 def platform platform = engine.options['platform'] if platform.nil? 'el7' else platform end end
primary()
click to toggle source
real_asset_name()
click to toggle source
# File lib/simp/metadata/component.rb, line 141 def real_asset_name case component_type when 'puppet-module' get_from_component['module_name'] when 'rubygem' get_from_component['gem_name'] else get_from_component['asset_name'] end end
real_extension()
click to toggle source
# File lib/simp/metadata/component.rb, line 137 def real_extension get_from_component['extension'] end
ref()
click to toggle source
# File lib/simp/metadata/component.rb, line 247 def ref get_from_release['ref'] end
ref=(value)
click to toggle source
# File lib/simp/metadata/component.rb, line 251 def ref=(value) release = release_source.releases[release_version] unless release.nil? if release.key?(name) release[name]['ref'] = value else release[name] = { 'ref' => value } end end release_source.dirty = true end
release_source()
click to toggle source
# File lib/simp/metadata/component.rb, line 47 def release_source retval = engine.sources['bootstrap_metadata'] engine.sources.each do |_name, source| if source.releases.key?(release_version) if source.releases[release_version].key?(name) retval = source break end else if source.release(release_version).key?(name) retval = source break end end end retval end
revision()
click to toggle source
# File lib/simp/metadata/component.rb, line 226 def revision revision = get_from_component['revision'] if revision.nil? '0' else revision end end
revision=(value)
click to toggle source
# File lib/simp/metadata/component.rb, line 235 def revision=(value) release = release_source.releases[release_version] unless release.nil? if release.key?(name) release[name]['revision'] = value else release[name] = { 'revision' => value } end end release_source.dirty = true end
rpm_basename()
click to toggle source
# File lib/simp/metadata/component.rb, line 322 def rpm_basename if component_type == 'puppet-module' if name =~ /pupmod-*/ name.to_s else "pupmod-#{name}" end else name.to_s end end
rpm_name()
click to toggle source
# File lib/simp/metadata/component.rb, line 380 def rpm_name if component_type == 'puppet-module' "#{rpm_basename}-#{rpm_version}.#{target}.rpm" else "#{rpm_basename}-#{rpm_version}.#{platform}.#{target}.rpm" end end
rpm_version()
click to toggle source
# File lib/simp/metadata/component.rb, line 342 def rpm_version if component_version =~ /^[0-9]+.[0-9]+.[0-9]+.[0-9]+/ component_version else "#{component_version}-#{revision}" end end
tag()
click to toggle source
# File lib/simp/metadata/component.rb, line 279 def tag get_from_release['tag'] end
tag=(value)
click to toggle source
# File lib/simp/metadata/component.rb, line 283 def tag=(value) release = release_source.releases[release_version] unless release.nil? if release.key?(name) release[name]['tag'] = value else release[name] = { 'tag' => value } end end release_source.dirty = true end
target()
click to toggle source
# File lib/simp/metadata/component.rb, line 350 def target target = get_from_release['target'] if target.nil? 'noarch' else target end end
target=(value)
click to toggle source
# File lib/simp/metadata/component.rb, line 359 def target=(value) release = release_source.releases[release_version] unless release.nil? if release.key?(name) release[name]['target'] = value else release[name] = { 'target' => value } end end release_source.dirty = true end
to_s()
click to toggle source
# File lib/simp/metadata/component.rb, line 14 def to_s name end
type()
click to toggle source
# File lib/simp/metadata/component.rb, line 98 def type get_from_component['type'] end
url()
click to toggle source
# File lib/simp/metadata/component.rb, line 190 def url locations.primary.url end
version()
click to toggle source
# File lib/simp/metadata/component.rb, line 295 def version ver = '' %w(version tag ref branch).each do |item| unless get_from_release[item].nil? ver = get_from_release[item] break end end ver end
version?()
click to toggle source
# File lib/simp/metadata/component.rb, line 306 def version? Dir.mktmpdir do |dir| Dir.chdir(dir) do system("git clone #{url} > /dev/null 2>&1") Dir.chdir("./#{module_name}") do exitcode = Simp::Metadata.run("git checkout #{version} > /dev/null 2>&1") if exitcode == 0 true else false end end end end end
view(attribute)
click to toggle source
# File lib/simp/metadata/component.rb, line 400 def view(attribute) comp = self view_hash = {} if attribute.nil? comp.each do |key, value| view_hash[key] = value.to_s unless value.nil? || value == '' end location_hash = {} comp.locations.each do |location| location.each do |key, value| location_hash.merge!(key => value.to_s) unless value.nil? end end buildinfo_hash = {} comp.buildinfo.each do |buildinfo| # Needs to be fixed/added to buildinfo.each do |_key, _value| end end view_hash['location'] = location_hash else view_hash[attribute] = comp[attribute].to_s end view_hash end