Beispiel #1
0
def test_generate_requirements():
    lines = generate_requirements('boto3', ignore=('docutils', 's3transfer'))
    packages = []
    for l in lines.split('\n'):
        pkg_name, version = l.split('==')
        packages.append(pkg_name)
    assert packages == ['botocore', 'jmespath']
Beispiel #2
0
def custodian_archive(packages=None, deps=()):
    if not packages:
        packages = []
    packages.append('c7n_gcp')
    archive = base_archive(packages)

    # Requirements are fetched server-side, which helps for binary extensions
    # but for pure python packages, if we have a local install and its
    # relatively small, it might be faster to just upload.
    #
    # note we pin requirements to the same versions installed locally.
    requirements = set()
    requirements.update((
        'jmespath',
        'retrying',
        'python-dateutil',
        'ratelimiter',
        'google-auth',
        'google-auth-httplib2',
        'google-api-python-client'))
    requirements.update(deps)
    archive.add_contents(
        'requirements.txt',
        generate_requirements(requirements, include_self=True))
    return archive
Beispiel #3
0
def get_mailer_requirements():
    deps = ['azure-keyvault', 'azure-storage-queue',
            'azure-storage-blob', 'sendgrid'] + list(CORE_DEPS)
    requirements = generate_requirements(
        deps, ignore=['boto3', 'botocore', 'pywin32'],
        include_self=True)
    return requirements
Beispiel #4
0
def test_generate_requirements():
    lines = generate_requirements(
        'boto3', ignore=('docutils', 's3transfer', 'six'), exclude=['urllib3'])
    packages = []
    for l in lines.split('\n'):
        pkg_name, version = l.split('==')
        packages.append(pkg_name)
    assert set(packages) == {'botocore', 'jmespath', 'python-dateutil'}
Beispiel #5
0
def get_mailer_requirements():
    deps = ['azure-identity', 'azure-mgmt-managementgroups', 'azure-mgmt-web',
            'azure-graphrbac', 'azure-keyvault', 'azure-storage-queue',
            'azure-storage-blob', 'netaddr', 'sendgrid', 'pyyaml'] + list(CORE_DEPS)
    requirements = generate_requirements(
        deps, ignore=['boto3', 'botocore', 'pywin32'],
        exclude=['pkg_resources'],
        include_self=True)
    return requirements
Beispiel #6
0
def main(package, template, output):
    """recursive dependency pinning for package"""
    requirements = generate_requirements(package)
    pinned_packages = requirements.split('\n')
    if not template and output:
        print('\n'.join(pinned_packages))
        return

    with open(template) as fh:
        t = jinja2.Template(fh.read(), trim_blocks=True, lstrip_blocks=True)
    with open(output, 'w') as fh:
        fh.write(t.render(pinned_packages=pinned_packages))
Beispiel #7
0
    def build_functions_package(self, queue_name=None, target_subscription_ids=None):
        self.log.info("Building function package for %s" % self.function_params.function_app_name)

        requirements = generate_requirements('c7n-azure',
                                             ignore=['boto3', 'botocore', 'pywin32'],
                                             exclude='c7n')
        package = FunctionPackage(self.policy_name, target_sub_ids=target_subscription_ids)
        package.build(self.policy.data,
                      modules=['c7n', 'c7n-azure'],
                      requirements=requirements,
                      queue_name=queue_name)
        package.close()

        self.log.info("Function package built, size is %dKB" % (package.pkg.size / 1024))
        return package
Beispiel #8
0
def version_cmd(options):
    from c7n.version import version
    from c7n.resources import load_available
    from c7n.mu import generate_requirements

    if not options.debug:
        print(version)
        return

    indent = 13

    print(
        "\nPlease copy/paste the following info along with any bug reports:\n")
    print("Custodian:  ", version)
    pyversion = sys.version.replace('\n',
                                    '\n' + ' ' * indent)  # For readability
    print("Python:     ", pyversion)
    # os.uname is only available on recent versions of Unix
    try:
        print("Platform:   ", os.uname())
    except Exception:  # pragma: no cover
        print("Platform:  ", sys.platform)

    is_venv = (hasattr(sys, 'real_prefix') or
               (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix))
    print("Using venv: ", is_venv)
    in_container = os.path.exists('/.dockerenv')
    print("Docker: %s" % str(bool(in_container)))
    print("Installed: \n")

    packages = ['c7n']
    found = load_available(resources=False)
    if 'gcp' in found:
        packages.append('c7n_gcp')
    if 'azure' in found:
        packages.append('c7n_azure')
    if 'k8s' in found:
        packages.append('c7n_kube')
    if 'openstack' in found:
        packages.append('c7n_openstack')
    print(generate_requirements(packages))