inital devops build
This commit is contained in:
parent
0c51a76248
commit
064c2d2766
6 changed files with 118 additions and 25 deletions
4
build.py
4
build.py
|
@ -28,7 +28,7 @@ use_plugin("python.distutils")
|
|||
default_task = "publish"
|
||||
|
||||
name = "ddadevops"
|
||||
version = "0.6.0.dev3"
|
||||
version = "0.6.0.dev6"
|
||||
summary = "tools to support builds combining gopass, terraform, dda-pallet, aws & hetzner-cloud"
|
||||
description = __doc__
|
||||
authors = [Author("meissa GmbH", "buero@meissa-gmbh.de")]
|
||||
|
@ -48,8 +48,10 @@ def initialize(project):
|
|||
project.set_property("copy_resources_target", "$dir_dist/ddadevops")
|
||||
project.get_property("copy_resources_glob").append("LICENSE")
|
||||
project.get_property("copy_resources_glob").append("src/main/resources/terraform/*")
|
||||
project.get_property("copy_resources_glob").append("src/main/resources/docker/image/resources/*")
|
||||
project.include_file("ddadevops", "LICENSE")
|
||||
project.include_file("ddadevops", "src/main/resources/terraform/*")
|
||||
project.include_file("ddadevops", "src/main/resources/docker/image/resources/*")
|
||||
|
||||
#project.set_property('distutils_upload_sign', True)
|
||||
#project.set_property('distutils_upload_sign_identity', '')
|
||||
|
|
|
@ -7,6 +7,7 @@ terraform, dda-pallet, aws & hetzner-cloud.
|
|||
from .credential import gopass_credential_from_env_path, gopass_credential_from_path, gopass_password_from_path, gopass_field_from_path
|
||||
from .devops_build import DevopsBuild, create_devops_build_config, get_devops_build
|
||||
from .devops_terraform_build import WorkaroundTerraform, DevopsTerraformBuild, create_devops_terraform_build_config
|
||||
from .devops_docker_build import DevopsDockerBuild, create_devops_docker_build_config
|
||||
from .hetzner_mixin import HetznerMixin, add_hetzner_mixin_config
|
||||
from .aws_backend_properties_mixin import AwsBackendPropertiesMixin, add_aws_backend_properties_mixin_config
|
||||
from .aws_mfa_mixin import AwsMfaMixin, add_aws_mfa_mixin_config
|
||||
|
|
87
src/main/python/ddadevops/devops_docker_build.py
Normal file
87
src/main/python/ddadevops/devops_docker_build.py
Normal file
|
@ -0,0 +1,87 @@
|
|||
from subprocess import run
|
||||
from .python_util import filter_none
|
||||
from pkg_resources import *
|
||||
from .devops_terraform_build import DevopsBuild, create_devops_build_config
|
||||
|
||||
|
||||
def create_devops_docker_build_config(stage,
|
||||
project_root_path,
|
||||
module,
|
||||
dockerhub_user,
|
||||
dockerhub_password,
|
||||
build_dir_name='target',
|
||||
use_package_common_files=True,
|
||||
build_commons_path=None,
|
||||
docker_build_commons_dir_name='docker',):
|
||||
ret = create_devops_build_config(
|
||||
stage, project_root_path, module, build_dir_name)
|
||||
ret.update({'dockerhub_user': dockerhub_user,
|
||||
'dockerhub_password': dockerhub_password,
|
||||
'use_package_common_files': use_package_common_files,
|
||||
'docker_build_commons_dir_name': docker_build_commons_dir_name,
|
||||
'build_commons_path': build_commons_path, })
|
||||
return ret
|
||||
|
||||
|
||||
class DevopsDockerBuild(DevopsBuild):
|
||||
|
||||
def __init__(self, project, config):
|
||||
super().__init__(project, config)
|
||||
project.build_depends_on('python-terraform')
|
||||
self.dockerhub_user = config['dockerhub_user']
|
||||
self.dockerhub_password = config['dockerhub_password']
|
||||
self.use_package_common_files = config['use_package_common_files']
|
||||
self.build_commons_path = config['build_commons_path']
|
||||
self.docker_build_commons_dir_name = config['docker_build_commons_dir_name']
|
||||
|
||||
def docker_build_commons_path(self):
|
||||
mylist = [self.build_commons_path,
|
||||
self.docker_build_commons_dir_name]
|
||||
return '/'.join(filter_none(mylist)) + '/'
|
||||
|
||||
def copy_build_resource_file_from_package(self, name):
|
||||
my_data = resource_string(
|
||||
__name__, "src/main/resources/docker/" + name)
|
||||
with open(self.build_path() + '/' + name, "w") as output_file:
|
||||
output_file.write(my_data.decode(sys.stdout.encoding))
|
||||
|
||||
def copy_build_resources_from_package(self):
|
||||
self.copy_build_resource_file_from_package(
|
||||
'image/resources/install_functions.sh')
|
||||
|
||||
def copy_build_resources_from_dir(self):
|
||||
run('cp -f ' + self.docker_build_commons_path() +
|
||||
'* ' + self.build_path(), shell=True)
|
||||
|
||||
def initialize_build_dir(self):
|
||||
super().initialize_build_dir()
|
||||
if self.use_package_common_files:
|
||||
self.copy_build_resources_from_package()
|
||||
else:
|
||||
self.copy_build_resources_from_dir()
|
||||
run('cp -r image ' + self.build_path(), shell=True)
|
||||
run('cp -r test ' + self.build_path(), shell=True)
|
||||
|
||||
def image(self):
|
||||
run('docker build -t ' + self.name() +
|
||||
' --file ' + self.build_path() + '/image/Dockerfile '
|
||||
+ self.build_path() + '/image', shell=True)
|
||||
|
||||
def drun(self):
|
||||
run('docker run --expose 8080 -it ' +
|
||||
self.name() + ' /bin/bash', shell=True)
|
||||
|
||||
def dockerhub_login(self):
|
||||
run('docker login --username ' + self.dockerhub_user +
|
||||
' --password ' + self.dockerhub_password, shell=True)
|
||||
|
||||
def dockerhub_publish(self):
|
||||
run('docker tag ' + self.name() + ' ' + self.dockerhub_user +
|
||||
'/' + self.name(), shell=True)
|
||||
run('docker push ' + self.dockerhub_user +
|
||||
'/' + self.name(), shell=True)
|
||||
|
||||
def test(self):
|
||||
run('docker build -t ' + self.name() + '-test ' +
|
||||
'--file ' + self.build_path() + '/test/Dockerfile '
|
||||
+ self.build_path() + '/test', shell=True)
|
|
@ -46,29 +46,6 @@ class WorkaroundTerraform(Terraform):
|
|||
var_file, terraform_bin_path, is_env_vars_included)
|
||||
self.latest_cmd = ''
|
||||
|
||||
# def apply(self, dir_or_plan=None, input=False, skip_plan=False, no_color=IsFlagged,
|
||||
# **kwargs):
|
||||
# """
|
||||
# refer to https://terraform.io/docs/commands/apply.html
|
||||
# no-color is flagged by default
|
||||
# :param no_color: disable color of stdout
|
||||
# :param input: disable prompt for a missing variable
|
||||
# :param dir_or_plan: folder relative to working folder
|
||||
# :param skip_plan: force apply without plan (default: false)
|
||||
# :param kwargs: same as kwags in method 'cmd'
|
||||
# :returns return_code, stdout, stderr
|
||||
# """
|
||||
# default = kwargs
|
||||
# default['input'] = input
|
||||
# default['no_color'] = no_color
|
||||
# if skip_plan:
|
||||
# default['auto-approve'] = IsFlagged
|
||||
# else:
|
||||
# default['auto-approve'] = None
|
||||
# option_dict = self._generate_default_options(default)
|
||||
# args = self._generate_default_args(dir_or_plan)
|
||||
# return self.cmd('apply', *args, **option_dict)
|
||||
|
||||
def generate_cmd_string(self, cmd, *args, **kwargs):
|
||||
result = super().generate_cmd_string(cmd, *args, **kwargs)
|
||||
self.latest_cmd = ' '.join(result)
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
from .credential import gopass_credential_from_env_path
|
||||
from .devops_terraform_build import DevopsTerraformBuild
|
||||
|
||||
|
||||
|
|
27
src/main/resources/docker/image/resources/install_functions.sh
Executable file
27
src/main/resources/docker/image/resources/install_functions.sh
Executable file
|
@ -0,0 +1,27 @@
|
|||
function upgradeSystem() {
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update > /dev/null
|
||||
apt-get -y install apt-utils > /dev/null
|
||||
apt-get -qqy dist-upgrade > /dev/null
|
||||
}
|
||||
|
||||
function cleanupDocker() {
|
||||
rm -f /root/.ssh/authorized_keys
|
||||
rm -f /root/.ssh/authorized_keys2
|
||||
|
||||
apt-get clean
|
||||
apt-get -qqy autoremove --purge
|
||||
apt-get -qqy autoclean
|
||||
rm -rf /var/lib/apt/lists/
|
||||
|
||||
rm -rf /tmp/*
|
||||
|
||||
find /var/cache -type f -exec rm -rf {} \;
|
||||
find /var/log/ -name '*.log' -exec rm -f {} \;
|
||||
}
|
||||
|
||||
function cleanupAmi() {
|
||||
rm -f /home/ubuntu/.ssh/authorized_keys
|
||||
rm -f /home/ubuntu/.ssh/authorized_keys2
|
||||
cleanupDocker
|
||||
}
|
Loading…
Reference in a new issue