Beispiel #1
0
    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')
Beispiel #2
0
    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))
Beispiel #3
0
    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)))
Beispiel #4
0
    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))
Beispiel #5
0
    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))
Beispiel #6
0
    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))
Beispiel #7
0
    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="||",
            )
Beispiel #8
0
    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='||')
Beispiel #9
0
    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)))