def package(manager, package, version): """ Install a package. """ if manager == package: return if manager in lut['packages'] and package in lut['packages'][manager]: env_vars = ['{0}=1'.format(m.env_var(service)) for m, service in lut['packages'][manager][package]] s.add(manager.gate(package, version, relaxed) + ' || {{ ' \ + manager.install(package, version, relaxed) + '; ' \ + '; '.join(env_vars) + '; }}') else: s.add(manager(package, version, relaxed)) if manager not in ('apt', 'yum'): return # See comments on this section in `blueprint.frontend.puppet`. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): s.add('/usr/bin/gem{0} install --no-rdoc --no-ri ' # No , 'rubygems-update', match.group(1)) s.add('/usr/bin/ruby{0} $(PATH=$PATH:/var/lib/gems/{0}/bin ' # No , 'which update_rubygems)', match.group(1)) if 'nodejs' == package: s.add('which npm || {{ ' # No , 'curl http://npmjs.org/install.sh || ' # No , 'wget -O- http://npmjs.org/install.sh ' # No , '}} | sh')
def package(manager, package, version): """ Create a package resource. """ if manager == package: return if manager in ('apt', 'yum'): if relaxed: c.package(package) else: c.package(package, version=version) # See comments on this section in `puppet` above. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): c.execute('/usr/bin/gem{0} install --no-rdoc --no-ri ' # No , 'rubygems-update'.format(match.group(1))) c.execute('/usr/bin/ruby{0} ' # No , '$(PATH=$PATH:/var/lib/gems/{0}/bin ' # No , 'which update_rubygems)"'.format(match.group(1))) # All types of gems get to have package resources. elif 'rubygems' == manager: c.gem_package(package, version=version) elif re.search(r'ruby', manager) is not None: match = re.match(r'^ruby(?:gems)?(\d+\.\d+(?:\.\d+)?)', manager) c.gem_package(package, gem_binary='/usr/bin/gem{0}'.format(match.group(1)), version=version) # Everything else is an execute resource. else: c.execute(manager(package, version))
def package(manager, package, version): """ Create a package resource. """ # `apt` and `yum` are easy since they're the default for their # respective platforms. if manager in ('apt', 'yum'): ensure = 'installed' if relaxed else version m['packages'][manager].add(Package(package, ensure=ensure)) # If APT is installing RubyGems, get complicated. This would # make sense to do with Yum, too, but there's no consensus on # where, exactly, you might find RubyGems from Yum. Going # the other way, it's entirely likely that doing this sort of # forced upgrade goes against the spirit of Blueprint itself. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): m['packages'][manager].add(Exec('/bin/sh -c "' # No , '/usr/bin/gem{0} install --no-rdoc --no-ri ' # No , 'rubygems-update; /usr/bin/ruby{0} ' # No , '$(PATH=$PATH:/var/lib/gems/{0}/bin ' # No , 'which update_rubygems)"'.format(match.group(1)), require=Package.ref(package))) if 'nodejs' == package: m['packages'][manager].add(Exec('/bin/sh -c " { ' # No , 'curl http://npmjs.org/install.sh || ' # No , 'wget -O- http://npmjs.org/install.sh ' # No , '} | sh"', creates='/usr/bin/npm', require=Package.ref(package))) # RubyGems for Ruby 1.8 is easy, too, because Puppet has a # built in provider. This is called simply "rubygems" on # RPM-based distros. elif manager in ('rubygems', 'rubygems1.8'): m['packages'][manager].add(Package(package, ensure=version, provider='gem')) # Other versions of RubyGems are slightly more complicated. elif re.search(r'ruby', manager) is not None: match = re.match(r'^ruby(?:gems)?(\d+\.\d+(?:\.\d+)?)', manager) m['packages'][manager].add(Exec( manager(package, version), creates='{0}/{1}/gems/{2}-{3}'.format(util.rubygems_path(), match.group(1), package, version))) # Python works basically like alternative versions of Ruby # but follows a less predictable directory structure so the # directory is not known ahead of time. This just so happens # to be the way everything else works, too. else: m['packages'][manager].add(Exec(manager(package, version)))
def package(manager, package, version): """ Create a package resource. """ if manager == package: return if manager in ('apt', 'yum'): if relaxed or version is None: c.package(package) else: c.package(package, version=version) # See comments on this section in `puppet` above. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): c.execute('/usr/bin/gem{0} install --no-rdoc --no-ri ' # No , 'rubygems-update'.format(match.group(1))) c.execute('/usr/bin/ruby{0} ' # No , '$(PATH=$PATH:/var/lib/gems/{0}/bin ' # No , 'which update_rubygems)"'.format(match.group(1))) if 'nodejs' == package: c.execute( '{ ' # No , 'curl http://npmjs.org/install.sh || ' # No , 'wget -O- http://npmjs.org/install.sh ' # No , '} | sh', creates='/usr/bin/npm') # AWS cfn-init templates may specify RPMs to be installed from URLs, # which are specified as versions. elif 'rpm' == manager: c.rpm_package(package, source=version) # All types of gems get to have package resources. elif 'rubygems' == manager: if relaxed or version is None: c.gem_package(package) else: c.gem_package(package, version=version) elif re.search(r'ruby', manager) is not None: match = re.match(r'^ruby(?:gems)?(\d+\.\d+(?:\.\d+)?)', manager) if relaxed or version is None: c.gem_package(package, gem_binary='/usr/bin/gem{0}'.format( match.group(1))) else: c.gem_package(package, gem_binary='/usr/bin/gem{0}'.format( match.group(1)), version=version) # Everything else is an execute resource. else: c.execute(manager(package, version, relaxed))
def package(manager, package, version): """ Create a package resource. """ if manager == package: return if manager in ('apt', 'yum'): if relaxed or version is None: c.package(package) else: c.package(package, version=version) # See comments on this section in `puppet` above. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): c.execute('/usr/bin/gem{0} install --no-rdoc --no-ri ' # No , 'rubygems-update'.format(match.group(1))) c.execute('/usr/bin/ruby{0} ' # No , '$(PATH=$PATH:/var/lib/gems/{0}/bin ' # No , 'which update_rubygems)"'.format(match.group(1))) if 'nodejs' == package: c.execute('{ ' # No , 'curl http://npmjs.org/install.sh || ' # No , 'wget -O- http://npmjs.org/install.sh ' # No , '} | sh', creates='/usr/bin/npm') # AWS cfn-init templates may specify RPMs to be installed from URLs, # which are specified as versions. elif 'rpm' == manager: c.rpm_package(package, source=version) # All types of gems get to have package resources. elif 'rubygems' == manager: if relaxed or version is None: c.gem_package(package) else: c.gem_package(package, version=version) elif re.search(r'ruby', manager) is not None: match = re.match(r'^ruby(?:gems)?(\d+\.\d+(?:\.\d+)?)', manager) if relaxed or version is None: c.gem_package(package, gem_binary='/usr/bin/gem{0}'.format(match.group(1))) else: c.gem_package(package, gem_binary='/usr/bin/gem{0}'.format(match.group(1)), version=version) # Everything else is an execute resource. else: c.execute(manager(package, version, relaxed))
def package(manager, package, version): """ Create a package resource. """ if manager == package: return if manager in ("apt", "yum"): if relaxed or version is None: c.package(package) else: c.package(package, version=version) # See comments on this section in `puppet` above. match = re.match(r"^rubygems(\d+\.\d+(?:\.\d+)?)$", package) if match is not None and util.rubygems_update(): c.execute("/usr/bin/gem{0} install --no-rdoc --no-ri " "rubygems-update".format(match.group(1))) # No , c.execute( "/usr/bin/ruby{0} " # No , "$(PATH=$PATH:/var/lib/gems/{0}/bin " # No , 'which update_rubygems)"'.format(match.group(1)) ) if "nodejs" == package: c.execute( "{ " # No , "curl http://npmjs.org/install.sh || " # No , "wget -O- http://npmjs.org/install.sh " # No , "} | sh", creates="/usr/bin/npm", ) # AWS cfn-init templates may specify RPMs to be installed from URLs, # which are specified as versions. elif "rpm" == manager: c.rpm_package(package, source=version) # All types of gems get to have package resources. elif "rubygems" == manager: if relaxed or version is None: c.gem_package(package) else: c.gem_package(package, version=version) elif re.search(r"ruby", manager) is not None: match = re.match(r"^ruby(?:gems)?(\d+\.\d+(?:\.\d+)?)", manager) if relaxed or version is None: c.gem_package(package, gem_binary="/usr/bin/gem{0}".format(match.group(1))) else: c.gem_package(package, gem_binary="/usr/bin/gem{0}".format(match.group(1)), version=version) # Everything else is an execute resource. else: c.execute(manager(package, version, relaxed))
def package(manager, package, version): """ Install a package. """ if manager == package: return if manager in lut["packages"] and package in lut["packages"][manager]: s.add_list( (manager.gate(package, version, relaxed),), ( command_list( (manager.install(package, version, relaxed),), *[("{0}=1".format(m.env_var(service)),) for m, service in lut["packages"][manager][package]], wrapper="{{}}" ), ), operator="||", ) else: s.add(manager(package, version, relaxed)) if manager not in ("apt", "rpm", "yum"): return # See comments on this section in `blueprint.frontend.puppet`. match = re.match(r"^rubygems(\d+\.\d+(?:\.\d+)?)$", package) if match is not None and util.rubygems_update(): s.add("/usr/bin/gem{0} install --no-rdoc --no-ri rubygems-update", args=(match.group(1),)) s.add( "/usr/bin/ruby{0} $(PATH=$PATH:/var/lib/gems/{0}/bin " "which update_rubygems)", args=(match.group(1),) ) if "nodejs" == package: s.add_list( ("which npm",), ( command_list( ("curl http://npmjs.org/install.sh",), ("wget -O- http://npmjs.org/install.sh",), operator="||", wrapper="{{}}", ), "sh", ), operator="||", )
def package(manager, package, version): """ Install a package. """ if manager == package: return if manager in lut['packages'] and package in lut['packages'][manager]: s.add_list((manager.gate(package, version, relaxed),), (command_list((manager.install(package, version, relaxed),), *[('{0}=1'.format(m.env_var(service)),) for m, service in lut['packages'][manager][package]], wrapper='{{}}'),), operator='||') else: s.add(manager(package, version, relaxed)) if manager not in ('apt', 'rpm', 'yum'): return # See comments on this section in `blueprint.frontend.puppet`. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): s.add('/usr/bin/gem{0} install --no-rdoc --no-ri rubygems-update', args=(match.group(1),)) s.add('/usr/bin/ruby{0} $(PATH=$PATH:/var/lib/gems/{0}/bin ' 'which update_rubygems)', args=(match.group(1),)) if 'nodejs' == package: s.add_list(('which npm',), (command_list(('curl http://npmjs.org/install.sh',), ('wget -O- http://npmjs.org/install.sh',), operator='||', wrapper='{{}}'), 'sh'), operator='||')
def package(manager, package, version): """ Create a package resource. """ ensure = 'installed' if relaxed or version is None else version # `apt` and `yum` are easy since they're the default for their # respective platforms. if manager in ('apt', 'yum'): m['packages'][manager].add(Package(package, ensure=ensure)) # If APT is installing RubyGems, get complicated. This would # make sense to do with Yum, too, but there's no consensus on # where, exactly, you might find RubyGems from Yum. Going # the other way, it's entirely likely that doing this sort of # forced upgrade goes against the spirit of Blueprint itself. match = re.match(r'^rubygems(\d+\.\d+(?:\.\d+)?)$', package) if match is not None and util.rubygems_update(): m['packages'][manager].add( Exec( '/bin/sh -c "' # No , '/usr/bin/gem{0} install --no-rdoc --no-ri ' # No , 'rubygems-update; /usr/bin/ruby{0} ' # No , '$(PATH=$PATH:/var/lib/gems/{0}/bin ' # No , 'which update_rubygems)"'.format(match.group(1)), require=Package.ref(package))) if 'nodejs' == package: m['packages'][manager].add( Exec( '/bin/sh -c " { ' # No , 'curl http://npmjs.org/install.sh || ' # No , 'wget -O- http://npmjs.org/install.sh ' # No , '} | sh"', creates='/usr/bin/npm', require=Package.ref(package))) # AWS cfn-init templates may specify RPMs to be installed from URLs, # which are specified as versions. elif 'rpm' == manager: m['packages']['rpm'].add( Package(package, ensure='installed', provider='rpm', source=version)) # RubyGems for Ruby 1.8 is easy, too, because Puppet has a # built in provider. This is called simply "rubygems" on # RPM-based distros. elif manager in ('rubygems', 'rubygems1.8'): m['packages'][manager].add( Package(package, ensure=ensure, provider='gem')) # Other versions of RubyGems are slightly more complicated. elif re.search(r'ruby', manager) is not None: match = re.match(r'^ruby(?:gems)?(\d+\.\d+(?:\.\d+)?)', manager) m['packages'][manager].add( Exec(manager(package, version, relaxed), creates='{0}/{1}/gems/{2}-{3}'.format( util.rubygems_path(), match.group(1), package, version))) # Python works basically like alternative versions of Ruby # but follows a less predictable directory structure so the # directory is not known ahead of time. This just so happens # to be the way everything else works, too. else: m['packages'][manager].add(Exec(manager(package, version, relaxed)))