Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 .
4 changes: 2 additions & 2 deletions Dockerfile.helmtest
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <namespace> --create-namespace
24 changes: 24 additions & 0 deletions deploy/specs/all-base.yaml
Original file line number Diff line number Diff line change
@@ -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}}"
8 changes: 8 additions & 0 deletions deploy/specs/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apps:
# msftkube will fail if there's no app
dummy-app:
deploymentGroups:
- "default"
docker-cache-cleaner:
deploymentGroups:
- "default"
11 changes: 11 additions & 0 deletions deploy/specs/path.yaml
Original file line number Diff line number Diff line change
@@ -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"
9 changes: 9 additions & 0 deletions deploy/specs/publish.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
publish:
azure:
keyvault:
name: vienna-test-westus
docker:
registry:
name: viennadroptest
resourceGroup: viennadroptest
subscription: ad203158-bc5d-4e72-b764-2607833a71dc
39 changes: 39 additions & 0 deletions deploy/templates/helm/docker-cache-cleaner-values.yaml
Original file line number Diff line number Diff line change
@@ -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

1 change: 1 addition & 0 deletions scripts/mkver
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1.0.1261145
59 changes: 59 additions & 0 deletions scripts/task.py
Original file line number Diff line number Diff line change
@@ -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()
43 changes: 43 additions & 0 deletions scripts/task.sh
Original file line number Diff line number Diff line change
@@ -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
Empty file added src/README.md
Empty file.
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand All @@ -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:
Expand All @@ -76,5 +72,5 @@ spec:
{{- end }}
updateStrategy:
rollingUpdate:
maxUnavailable: 50%
maxUnavailable: 100%
type: RollingUpdate
Original file line number Diff line number Diff line change
@@ -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
Expand Down