You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by tl...@apache.org on 2021/04/09 01:17:29 UTC
[incubator-sdap-ingester] 10/33: add a on.update kopf event for crd
updates
This is an automated email from the ASF dual-hosted git repository.
tloubrieu pushed a commit to branch ascending_latitudes
in repository https://gitbox.apache.org/repos/asf/incubator-sdap-ingester.git
commit cf30aad9e4c4ae0ce8caa3ce6d0c4858d445386e
Author: thomas loubrieu <th...@jpl.nasa.gov>
AuthorDate: Tue Aug 4 13:17:47 2020 -0700
add a on.update kopf event for crd updates
organize logs in operator
---
config_operator/README.md | 10 +++++-
.../config_source/RemoteGitConfig.py | 4 +--
config_operator/config_operator/main.py | 38 +++++++++++++++++-----
.../containers/k8s/config-operator-crd.yml | 2 +-
.../containers/k8s/deployment-git-src.yml | 23 -------------
config_operator/containers/k8s/git-repo-test.yml | 4 +--
6 files changed, 44 insertions(+), 37 deletions(-)
diff --git a/config_operator/README.md b/config_operator/README.md
index ba4c6fc..5f02804 100644
--- a/config_operator/README.md
+++ b/config_operator/README.md
@@ -28,7 +28,11 @@ To publish the docker image on dockerhub do (step necessary for kubernetes deplo
docker push nexusjpl/config-operator:latest
## Kubernetes
-
+
+Delete pre-existing operator definitions:
+
+ kubectl delete deployment.apps/git-repo-config-operator -n sdap
+
Deploy the gitbasedconfig operator:
kubectl apply -f containers/k8s/config-operator-crd.yml -n sdap
@@ -45,6 +49,10 @@ Check that the configMap has been generated:
kubectl get configmaps -n sdap
+Test an update of the config operator configuration:
+
+ kubectl set image gitbasedconfig/nginx-deployment nginx=nginx:1.16.1 --record
+
\ No newline at end of file
diff --git a/config_operator/config_operator/config_source/RemoteGitConfig.py b/config_operator/config_operator/config_source/RemoteGitConfig.py
index 38cbe2d..350fcfc 100644
--- a/config_operator/config_operator/config_source/RemoteGitConfig.py
+++ b/config_operator/config_operator/config_source/RemoteGitConfig.py
@@ -39,8 +39,8 @@ class RemoteGitConfig(LocalDirConfig):
self._git_token = git_token
if local_dir is None:
local_dir = DEFAULT_LOCAL_REPO_DIR
- self._update_every_seconds = update_every_seconds
- super().__init__(local_dir, update_every_seconds=self._update_every_seconds)
+ super().__init__(local_dir, update_every_seconds=update_every_seconds)
+
if repo:
self._repo = repo
diff --git a/config_operator/config_operator/main.py b/config_operator/config_operator/main.py
index fac6741..45d530f 100644
--- a/config_operator/config_operator/main.py
+++ b/config_operator/config_operator/main.py
@@ -8,11 +8,7 @@ logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
-@kopf.on.create('sdap.apache.org', 'v1', 'gitbasedconfigs')
-def create_fn(body, spec, **kwargs):
- # Get info from Git Repo Config object
- namespace = body['metadata']['namespace']
-
+def create_config_synchronizer(spec, namespace):
if 'git-url' not in spec.keys():
raise kopf.HandlerFatalError(f"git-url must be set.")
if 'config-map' not in spec.keys():
@@ -23,22 +19,48 @@ def create_fn(body, spec, **kwargs):
config_map = spec['config-map']
logger.info(f'config-map = {config_map}')
- _kargs = {}
+ _kwargs = {}
for k in {'git-branch', 'git-username', 'git-token', 'update-every-seconds'}:
if k in spec:
logger.info(f'{k} = {spec[k]}')
- _kargs[k.replace('-', '_')] = spec[k]
+ _kwargs[k.replace('-', '_')] = spec[k]
- config = RemoteGitConfig(git_url, **_kargs)
+ config = RemoteGitConfig(git_url, **_kwargs)
config_map = K8sConfigMap(config_map, namespace, config)
asyncio.run(config.when_updated(config_map.publish))
msg = f"configmap {config_map} created from git repo {git_url}"
+
+ return msg
+
+
+@kopf.on.create('sdap.apache.org', 'v1', 'gitbasedconfigs')
+def create_fn(body, spec, **kwargs):
+ logger.info(f'sdap config operator creation')
+
+ namespace = body['metadata']['namespace']
+
+ msg = create_config_synchronizer(spec, namespace)
+
+ logger.info(f'sdap config operator created {msg}')
+
+ return {'message': msg}
+
+
+@kopf.on.update('sdap.apache.org', 'v1', 'gitbasedconfigs')
+def update_fn(spec, status, namespace, **kwargs):
+ logger.info(f'sdap config operator update')
+
+ msg = create_config_synchronizer(spec, namespace)
+
+ logger.info(f'sdap config operator updated {msg}')
+
return {'message': msg}
+
@kopf.on.login()
def login_fn(**kwargs):
return kopf.login_via_client(**kwargs)
diff --git a/config_operator/containers/k8s/config-operator-crd.yml b/config_operator/containers/k8s/config-operator-crd.yml
index 9f6d2ad..2159c00 100644
--- a/config_operator/containers/k8s/config-operator-crd.yml
+++ b/config_operator/containers/k8s/config-operator-crd.yml
@@ -12,7 +12,7 @@ spec:
names:
plural: gitbasedconfigs
singular: gitbasedconfig
- kind: gitBasedConfig
+ kind: GitBasedConfig
shortNames:
- gitcfg
validation:
diff --git a/config_operator/containers/k8s/deployment-git-src.yml b/config_operator/containers/k8s/deployment-git-src.yml
deleted file mode 100644
index 99b268d..0000000
--- a/config_operator/containers/k8s/deployment-git-src.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: config-operator
- labels:
- app: sdap-config-operator
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: sdap-config-operator
- template:
- metadata:
- labels:
- app: sdap-config-operator
- spec:
- containers:
- - name: sdap-config-operator
- image: tloubrieu/config-operator:latest
- imagePullPolicy: IfNotPresent
- command: ['config-operator', '--git-url', 'https://github.com/tloubrieu-jpl/sdap-ingester-config' , '--namespace', 'sdap', '--config-map', 'collection-ingester-conf', '-u']
-
-
diff --git a/config_operator/containers/k8s/git-repo-test.yml b/config_operator/containers/k8s/git-repo-test.yml
index 6a98454..79ad518 100644
--- a/config_operator/containers/k8s/git-repo-test.yml
+++ b/config_operator/containers/k8s/git-repo-test.yml
@@ -1,9 +1,9 @@
apiVersion: sdap.apache.org/v1
-kind: gitBasedConfig
+kind: GitBasedConfig
metadata:
name: collections-config-gitcfg
spec:
git-url: https://github.com/tloubrieu-jpl/sdap-ingester-config.git
- git-branch: master
+ git-branch: bigdata
git-token: whatever
config-map: my-configmap
\ No newline at end of file