Skip to main content

tools to support builds combining gopass, terraform, dda-pallet, aws & hetzner-cloud

Project description

dda-devops-build

Slack | team@social.meissa-gmbh.de team@social.meissa-gmbh.de | Website & Blog

dda-devops-build integrates all the tools we use to work with clouds & provide some nice functions around.

Tools we support are

  • terraform: for setting up the plain infrastructure around.
  • docker: for creating images
  • c4k: for generating kubernetes manifests
  • provs: for setting up small single-node k3s clusters
  • gopass: for credential management on devops computers
  • cloud providers: hetzner, digitalocean, aws

In addition we provide a ReleaseMixin for release related tasks like tag / publish & version-bump

classDiagram
    class DevopsBuild {
        name()
        build_path()
        initialize_build_dir()
    }

    class DevopsTerraformBuild {
        initialize_build_dir()
        post_build()
        read_output_json()
        plan()
        plan_fail_on_diff()
        apply(auto_approve=False)
        refresh()
        destroy(auto_approve=False)
        tf_import(tf_import_name,tf_import_resource)
    }

    class DevopsImageBuild {
        initialize_build_dir()
        image()
        drun()
        dockerhub_login()
        dockerhub_publish()
        test()
    }

    class ReleaseMixin {
        prepare_release()
        tag_and_push_release()
    }
    
    class ProvsK3sBuild {
        def update_runtime_config(dns_record)
        write_provs_config()
        provs_apply(dry_run=False)
    }

    class C4kBuild {
        def update_runtime_config(dns_record)
        def write_c4k_config()
        def write_c4k_auth()
        c4k_apply(dry_run=False)
    }

    DevopsBuild <|-- DevopsImageBuild
    DevopsBuild <|-- DevopsTerraformBuild
    DevopsBuild <|-- ReleaseMixin
    DevopsBuild <|-- ProvsK3sBuild
    DevopsBuild <|-- C4kBuild

    link DevopsBuild "dda-devops-build/src/doc/DevopsBuild.md"
    link DevopsImageBuild "dda-devops-build/src/doc/DevopsImageBuild.md"
    link DevopsTerraformBuild "dda-devops-build/src/doc/DevopsTerraformBuild.md"
    link ReleaseMixin "dda-devops-build/src/doc/ReleaseMixin.md"
    link ProvsK3sBuild "dda-devops-build/src/doc/ProvsK3sBuild.md"
    link C4kBuild "dda-devops-build/src/doc/C4kBuild.md"

Principles we follow are:

  • Seperate build artefacts from version controlled code
  • Domain Driven Design - in order to stay sustainable

Example Project

An example project which is using dda-devops-build can be found at: https://repo.prod.meissa.de/meissa/buildtest

Installation

Ensure that yout python3 version is at least Python 3.10

sudo apt install python3-pip
pip3 install -r requirements.txt
export PATH=$PATH:~/.local/bin

Example Project

An example project which is using dda-devops-build can be found at: https://repo.prod.meissa.de/meissa/buildtest

Example Build

lets assume the following project structure

my-project
   | -> my-module
   |       | -> build.py
   |       | -> some-terraform.tf
   | -> an-other-module
   | -> target  (here will the build happen)
   |       | -> ...
from pybuilder.core import task, init
from ddadevops import *

name = 'my-project'
MODULE = 'my-module'
PROJECT_ROOT_PATH = '..'


@init
def initialize(project):
    project.build_depends_on("ddadevops>=4.0.0-dev")

    config = {
        "credentials_mapping": [
            {
                "gopass_path": environ.get("DIGITALOCEAN_TOKEN_KEY_PATH", None),
                "name": "do_api_key",
            },
            {
                "gopass_path": environ.get("HETZNER_API_KEY_PATH", None),
                "name": "hetzner_api_key",
            },
        ],
        "name": name,
        "module": MODULE,
        "stage": environ["STAGE"],
        "project_root_path": PROJECT_ROOT_PATH,
        "build_types": ["TERRAFORM"],
        "mixin_types": [],
        "tf_provider_types": ["DIGITALOCEAN", "HETZNER"],
        "tf_use_workspace": False,
        "tf_terraform_semantic_version": "1.4.2",
        "do_as_backend": True,
        "do_bucket": "your-bucket",
    }

    build = DevopsTerraformBuild(project, config)
    build.initialize_build_dir()


@task
def plan(project):
    build = get_devops_build(project)
    build.plan()


@task
def apply(project):
    build = get_devops_build(project)
    build.apply(True)


@task
def destroy(project):
    build = get_devops_build(project)
    build.destroy(True)

Snapshot & Release

pyb dev publish upload
pip3 install --upgrade ddadevops --pre

pyb [patch|minor|major]
pip3 install --upgrade ddadevops

Reference

Development & mirrors

Development happens at: https://repo.prod.meissa.de/meissa/dda-devops-build

Mirrors are:

For more details about our repository model see: https://repo.prod.meissa.de/meissa/federate-your-repos

License

Copyright © 2021 meissa GmbH Licensed under the Apache License, Version 2.0 (the "License")

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ddadevops-4.11.7.tar.gz (29.9 kB view details)

Uploaded Source

Built Distribution

ddadevops-4.11.7-py3-none-any.whl (41.9 kB view details)

Uploaded Python 3

File details

Details for the file ddadevops-4.11.7.tar.gz.

File metadata

  • Download URL: ddadevops-4.11.7.tar.gz
  • Upload date:
  • Size: 29.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.13

File hashes

Hashes for ddadevops-4.11.7.tar.gz
Algorithm Hash digest
SHA256 a07c253d8947881870d768cc05ccb54770da6e3421e9b247c2eee7e3828242ad
MD5 37fd2e201a1068406157ec20660efba3
BLAKE2b-256 30e7b5a403277929284fdeb26a9f3caed7b38777728fa5e78320a7ecdb4fe9df

See more details on using hashes here.

File details

Details for the file ddadevops-4.11.7-py3-none-any.whl.

File metadata

  • Download URL: ddadevops-4.11.7-py3-none-any.whl
  • Upload date:
  • Size: 41.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.13

File hashes

Hashes for ddadevops-4.11.7-py3-none-any.whl
Algorithm Hash digest
SHA256 518434f6b8d3c871cb7c4271fefa5ac04a1cde4defbac8011b76dc0407dc30c3
MD5 682d68000e0ec3b2b85f4f700fde8326
BLAKE2b-256 761186c0fc383755f437f74173e0ec95b992ec0addd7a464a2c66e2e354b7da8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page