diff --git a/.travis.yml b/.travis.yml index 9a331bd..8450a08 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ install: - docker build -t docker-gc-helm-chart-validate -f Dockerfile.helmtest . script: -- docker build -t jackil/docker-gc -f Dockerfile . +- docker build -t src/docker-cache-cleaner -f Dockerfile . after_success: -- docker build -t jackil/docker-gc -f Dockerfile . +- docker build -t src/docker-cache-cleaner -f Dockerfile . diff --git a/Dockerfile.helmtest b/Dockerfile.helmtest index e85028f..b984910 100644 --- a/Dockerfile.helmtest +++ b/Dockerfile.helmtest @@ -18,9 +18,9 @@ RUN /bin/helm init --client-only && /bin/helm repo update WORKDIR ["/bin/helm"] -COPY helm-chart/jackil-docker-gc jackil-docker-gc +COPY src/docker-cache-cleaner docker-cache-cleaner -RUN MSG=$(helm lint jackil-docker-gc | grep "no failures") +RUN MSG=$(helm lint docker-cache-cleaner | grep "no failures") RUN echo $MSG diff --git a/README.md b/README.md index 7272804..0fd8c33 100644 --- a/README.md +++ b/README.md @@ -112,4 +112,6 @@ For custom configurations, please head to values.yaml. docker-gc.service is an example of using it with fleet. +## Run and create namespace +helm install --generate-name jackil-docker-gc -n --create-namespace diff --git a/deploy/specs/all-base.yaml b/deploy/specs/all-base.yaml new file mode 100644 index 0000000..0d2c51f --- /dev/null +++ b/deploy/specs/all-base.yaml @@ -0,0 +1,24 @@ +--- +# --- ABSTRACT ALL BASE --- +# ------------------------- +envs: + all-base: + abstract: true + spec: + __name__: ~ # spec will inject the env name as env.__name__ +#-----apps + apps: + __base__: # the __base__ app gets inherited by all other apps + __name__: ~ # this instructs conf to inject the app name as app.__name__ + __anchor__: app + k8s: + source: "{{paths.k8s.source}}/{{app.__name__}}.yaml" + destinationDirectory: "{{paths.k8s.dest}}" + parameters: + replicaCount: 2 + azure: + __base__: # base here is the type of azure resource: sql, acs, etc + __base__: # base is a specific named azure resource: sql-server-01, cluster-01, storage-01 + subscription: "{{deploy.azure.subscription}}" + region: "{{deploy.azure.region}}" + group: "{{deploy.azure.group}}" diff --git a/deploy/specs/build.yaml b/deploy/specs/build.yaml new file mode 100644 index 0000000..b186e3b --- /dev/null +++ b/deploy/specs/build.yaml @@ -0,0 +1,8 @@ +apps: + # msftkube will fail if there's no app + dummy-app: + deploymentGroups: + - "default" + docker-cache-cleaner: + deploymentGroups: + - "default" \ No newline at end of file diff --git a/deploy/specs/path.yaml b/deploy/specs/path.yaml new file mode 100644 index 0000000..2a58e83 --- /dev/null +++ b/deploy/specs/path.yaml @@ -0,0 +1,11 @@ +paths: + acs: + source: "{{paths.root}}/deploy/templates/acs" + dest: "{{paths.drop}}/arm" + k8s: + source: "{{paths.root}}/deploy/templates/k8s" + dest: "{{paths.drop}}/k8s" + helm: + source: "{{paths.root}}/deploy/templates/helm" + dest: "{{paths.drop}}/helm" + src: "{{paths.root}}/src" \ No newline at end of file diff --git a/deploy/specs/publish.yaml b/deploy/specs/publish.yaml new file mode 100644 index 0000000..3b1eb67 --- /dev/null +++ b/deploy/specs/publish.yaml @@ -0,0 +1,9 @@ +publish: + azure: + keyvault: + name: vienna-test-westus + docker: + registry: + name: viennadroptest + resourceGroup: viennadroptest + subscription: ad203158-bc5d-4e72-b764-2607833a71dc \ No newline at end of file diff --git a/deploy/templates/helm/docker-cache-cleaner-values.yaml b/deploy/templates/helm/docker-cache-cleaner-values.yaml new file mode 100644 index 0000000..b5b77b7 --- /dev/null +++ b/deploy/templates/helm/docker-cache-cleaner-values.yaml @@ -0,0 +1,39 @@ +# Default values for docker-gc. +image: + # repository: jackil/docker-gc + #Repository should be moved to AIR Shared Container Registry + #repository: airsharedcontainers.azurecr.io/docker-gc + repository: viennadroptest.azurecr.io/docker-cache-cleaner + tag: latest + pullPolicy: IfNotPresent + # optional pull secrets + # pullSecrets: + # - "airsharedcontainers" +docker: + socketPath: /var/run/docker.sock + volumeName: docker-volume +fullnameOverride: docker-cache-cleaner +nameOverride: docker-cache-cleaner +statsd: + enabled: false + #host: localhost + #port: 8125 +config: + dockerEndpoint: unix:///var/run/docker.sock + executionIntervalInMinutes: 60 + dockerClientTimeoutInSeconds: 180 + imageDeletionOrder: ByImageLastTouchDate + #imageDeletionOrder: ByImageCreationDate + strategy: ByDate + daysBeforeDeletion: 30 + #strategy: ByDiskSpace + #sizeLimitInGigabyte: + containerStateBlacklist: dead,exited +resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: "0" + memory: 128Mi + diff --git a/scripts/mkver b/scripts/mkver new file mode 100644 index 0000000..b2eb805 --- /dev/null +++ b/scripts/mkver @@ -0,0 +1 @@ +1.0.1261145 diff --git a/scripts/task.py b/scripts/task.py new file mode 100644 index 0000000..012e790 --- /dev/null +++ b/scripts/task.py @@ -0,0 +1,59 @@ +# pylint: disable=locally-disabled,line-too-long,missing-docstring +import os +import argparse +import logging +import shutil + +import msftkube as mk + +mk.steps.acs.TEMPLATE_TRANSFORMERS = [ + # _transformer_encrypt_storages, + # mk.steps.acs._transformer_do_not_use_port_22, + # _transformer_add_security_extension, + mk.steps.acs._parameters_change_to_keyvault_reference('servicePrincipalClientId'), + mk.steps.acs._parameters_change_to_keyvault_reference('sshRSAPublicKey'), + mk.steps.acs._parameters_change_to_keyvault_reference('servicePrincipalClientSecret') +] + +def main(): + + commands = mk.commands.DEFAULT_COMMANDS + + context = mk.context.create(commands.keys()) + + # determine paths. Script could be in repository or a build drop + script_dir = os.path.dirname(__file__) + root_dir = os.path.abspath(os.path.join(script_dir, '..')) + if os.path.isdir(os.path.join(root_dir, 'src')): + # we are in repository + drop_dir = os.path.join(root_dir, 'build') + mk.util.ensure_dir(drop_dir) + def copy_scripts_into_drop(spec, context): # pylint: disable=unused-argument + mk.logger.info('task.py - Copying scripts into drop folder') + scripts_dest = os.path.join(drop_dir, 'scripts') + mk.util.copytree_clobber(script_dir, scripts_dest) + mk.util.copytree_clobber(mk.__path__[0], os.path.join(scripts_dest, 'msftkube')) + mk.util.copytree_clobber(os.path.join(root_dir, 'deploy'), os.path.join(drop_dir, 'deploy')) + commands['publish'] += [copy_scripts_into_drop] + else: + # we are in a build drop outside of the repository + drop_dir = root_dir + + mk.logger.info('task.py - Drop dir path is %s', drop_dir) + + # write log file to drop + mk.logger.addFileHandler(os.path.join(drop_dir, 'build.log')) + + # Seed spec from paths and args + seed_spec = {'paths': {'drop': drop_dir}} + + # provide user args & context to steps + + # read specs from files into spec + spec = mk.spec.create(root_dir, [seed_spec, os.path.join(root_dir, 'deploy', 'specs')]) + + # run any steps selected + mk.commands.execute(commands, spec, context) + +if __name__ == '__main__': + main() diff --git a/scripts/task.sh b/scripts/task.sh new file mode 100644 index 0000000..519677c --- /dev/null +++ b/scripts/task.sh @@ -0,0 +1,43 @@ +pushd `dirname $0` > /dev/null + +cd .. +if [ ! -d venv ]; then + mkdir venv +fi + +cd venv +pip install virtualenv +virtualenv -p /usr/bin/python3 . +source bin/activate + +cd .. +ROOT_PATH=`pwd` +popd > /dev/null + +if [[ $1 == "noinstall" ]]; then + echo "noinstall as first param so skipping install" + export MSFTKUBE_SKIP_INSTALL=1 + shift +fi + +mkver=`cat $ROOT_PATH/scripts/mkver` + +if [ -z "$MSFTKUBE_SKIP_INSTALL" ]; then + if $(pip freeze | grep -q "-e git.*msftkube") ; then + echo "Detected msftkube installed from local repository" + elif $(pip freeze | grep -q "msftkube==$mkver") ; then + echo "Already on correct version of msftkube" + else + echo "Installing msftkube" + url=https://msftkube.blob.core.windows.net/public/msftkube-$mkver-py3-none-any.whl + pip install $url + fi +else + echo "Not installing msftkube because MSFTKUBE_SKIP_INSTALL is set" +fi + +python -u $ROOT_PATH/scripts/task.py "$@" +EXITCODE=$? + +deactivate +exit $EXITCODE diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..e69de29 diff --git a/helm-chart/jackil-docker-gc/.helmignore b/src/docker-cache-cleaner/.helmignore similarity index 100% rename from helm-chart/jackil-docker-gc/.helmignore rename to src/docker-cache-cleaner/.helmignore diff --git a/helm-chart/jackil-docker-gc/Chart.yaml b/src/docker-cache-cleaner/Chart.yaml similarity index 50% rename from helm-chart/jackil-docker-gc/Chart.yaml rename to src/docker-cache-cleaner/Chart.yaml index 3b811b2..48cc480 100644 --- a/helm-chart/jackil-docker-gc/Chart.yaml +++ b/src/docker-cache-cleaner/Chart.yaml @@ -1,10 +1,12 @@ -name: jackil-docker-gc +name: docker-cache-cleaner description: A Docker Image Garbage Collector Helm chart for Kubernetes -home: https://github.com/JasonStein/docker-gc +home: https://github.com/johndoe0920/docker-gc version: 1.0.0 appVersion: latest sources: - - https://github.com/JasonStein/docker-gc + - https://github.com/johndoe0920/docker-gc maintainers: - name: Jiaqi Liu email: jackil@Microsoft.com + - name: Ross Wagner + email: rowagne@microsoft.com diff --git a/helm-chart/jackil-docker-gc/templates/NOTES.txt b/src/docker-cache-cleaner/templates/NOTES.txt similarity index 100% rename from helm-chart/jackil-docker-gc/templates/NOTES.txt rename to src/docker-cache-cleaner/templates/NOTES.txt diff --git a/helm-chart/jackil-docker-gc/templates/_helpers.tpl b/src/docker-cache-cleaner/templates/_helpers.tpl similarity index 100% rename from helm-chart/jackil-docker-gc/templates/_helpers.tpl rename to src/docker-cache-cleaner/templates/_helpers.tpl diff --git a/helm-chart/jackil-docker-gc/templates/daemonset.yaml b/src/docker-cache-cleaner/templates/daemonset.yaml similarity index 94% rename from helm-chart/jackil-docker-gc/templates/daemonset.yaml rename to src/docker-cache-cleaner/templates/daemonset.yaml index 0721840..43f7368 100644 --- a/helm-chart/jackil-docker-gc/templates/daemonset.yaml +++ b/src/docker-cache-cleaner/templates/daemonset.yaml @@ -51,7 +51,7 @@ spec: value: {{ .Values.statsd.host | quote }} - name: STATSD_PORT value: {{ .Values.statsd.port | quote }} - {{- end }} + {{- end }} volumeMounts: - mountPath: {{ .Values.docker.socketPath }} name: {{ .Values.docker.volumeName }} @@ -60,10 +60,6 @@ spec: operator: Exists - effect: NoExecute operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Equal - value: "true" volumes: - name: {{ .Values.docker.volumeName }} hostPath: @@ -76,5 +72,5 @@ spec: {{- end }} updateStrategy: rollingUpdate: - maxUnavailable: 50% + maxUnavailable: 100% type: RollingUpdate \ No newline at end of file diff --git a/helm-chart/jackil-docker-gc/values.yaml b/src/docker-cache-cleaner/values.yaml similarity index 90% rename from helm-chart/jackil-docker-gc/values.yaml rename to src/docker-cache-cleaner/values.yaml index a30e2a4..b5b77b7 100644 --- a/helm-chart/jackil-docker-gc/values.yaml +++ b/src/docker-cache-cleaner/values.yaml @@ -1,8 +1,9 @@ # Default values for docker-gc. image: - repository: jackil/docker-gc + # repository: jackil/docker-gc #Repository should be moved to AIR Shared Container Registry #repository: airsharedcontainers.azurecr.io/docker-gc + repository: viennadroptest.azurecr.io/docker-cache-cleaner tag: latest pullPolicy: IfNotPresent # optional pull secrets