Skip to content

Commit

Permalink
set()/update() methods for labels and annotations
Browse files Browse the repository at this point in the history
  • Loading branch information
twaugh committed Aug 4, 2015
1 parent c5e2246 commit c4f4248
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 18 deletions.
19 changes: 19 additions & 0 deletions osbs/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,10 +306,23 @@ def wait_for_build_to_get_scheduled(self, build_id, namespace=DEFAULT_NAMESPACE)
return build_response

@osbsapi
def update_labels_on_build(self, build_id, labels,
namespace=DEFAULT_NAMESPACE):
response = self.os.update_labels_on_build(build_id, labels,
namespace=namespace)
@osbsapi
def set_labels_on_build(self, build_id, labels, namespace=DEFAULT_NAMESPACE):
response = self.os.set_labels_on_build(build_id, labels, namespace=namespace)
return response

@osbsapi
def update_labels_on_build_config(self, build_config_id, labels,
namespace=DEFAULT_NAMESPACE):
response = self.os.update_labels_on_build_config(build_config_id,
labels,
namespace=namespace)
return response

@osbsapi
def set_labels_on_build_config(self, build_config_id, labels,
namespace=DEFAULT_NAMESPACE):
Expand All @@ -318,6 +331,12 @@ def set_labels_on_build_config(self, build_config_id, labels,
namespace=namespace)
return response

@osbsapi
def update_annotations_on_build(self, build_id, annotations,
namespace=DEFAULT_NAMESPACE):
return self.os.update_annotations_on_build(build_id, annotations,
namespace=namespace)

@osbsapi
def set_annotations_on_build(self, build_id, annotations, namespace=DEFAULT_NAMESPACE):
return self.os.set_annotations_on_build(build_id, annotations, namespace=namespace)
Expand Down
70 changes: 52 additions & 18 deletions osbs/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,40 +298,70 @@ def wait_for_build_to_get_scheduled(self, build_id, namespace=DEFAULT_NAMESPACE)
namespace)
return build_response

def set_labels_on_object(self, collection, name, labels,
namespace=DEFAULT_NAMESPACE):
@staticmethod
def _update_metadata_things(metadata, things, values):
metadata.setdefault(things, {})
metadata[things].update(values)

@staticmethod
def _replace_metadata_things(metadata, things, values):
metadata[things] = values

def adjust_things_on_object(self, collection, name, things, values, how,
namespace=DEFAULT_NAMESPACE):
"""
set labels on object
adjust labels or annotations on object
labels have to match RE: (([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])? and
have at most 63 chars
:param collection: str, object collection e.g. 'builds'
:param name: str, name of object
:param labels: dict, labels to set
:param things: str, 'labels' or 'annotations'
:param values: dict, values to set
:param how: callable, how to adjust the values e.g.
self._replace_metadata_things
:param namespace: str
:return:
"""
url = self._build_url("namespaces/%s/%s/%s" % (namespace, collection,
name))
build_json = self._get(url).json()
build_json['metadata'].setdefault('labels', {})
build_json['metadata']['labels'].update(labels)
how(build_json['metadata'], things, values)
response = self._put(url, data=json.dumps(build_json), use_json=True)
check_response(response)
return response

def update_labels_on_build(self, build_id, labels,
namespace=DEFAULT_NAMESPACE):
return self.adjust_things_on_object('builds', build_id,
'labels', labels,
how=self._update_metadata_things,
namespace=namespace)

def set_labels_on_build(self, build_id, labels,
namespace=DEFAULT_NAMESPACE):
return self.set_labels_on_object('builds', build_id, labels,
namespace=namespace)
return self.adjust_things_on_object('builds', build_id,
'labels', labels,
how=self._replace_metadata_things,
namespace=namespace)

def update_labels_on_build_config(self, build_config_id, labels,
namespace=DEFAULT_NAMESPACE):
return self.adjust_things_on_object('buildconfigs', build_config_id,
'labels', labels,
how=self._update_metadata_things,
namespace=namespace)

def set_labels_on_build_config(self, build_config_id, labels,
namespace=DEFAULT_NAMESPACE):
return self.set_labels_on_object('buildconfigs', build_config_id,
labels, namespace=namespace)
return self.adjust_things_on_object('buildconfigs', build_config_id,
'labels', labels,
how=self._replace_metadata_things,
namespace=namespace)

def set_annotations_on_build(self, build_id, annotations, namespace=DEFAULT_NAMESPACE):
def update_annotations_on_build(self, build_id, annotations,
namespace=DEFAULT_NAMESPACE):
"""
set annotations on build object
Expand All @@ -340,13 +370,17 @@ def set_annotations_on_build(self, build_id, annotations, namespace=DEFAULT_NAME
:param namespace: str
:return:
"""
url = self._build_url("namespaces/%s/builds/%s/" % (namespace, build_id))
build_json = self._get(url).json()
build_json['metadata'].setdefault('annotations', {})
build_json['metadata']['annotations'].update(annotations)
response = self._put(url, data=json.dumps(build_json), use_json=True)
check_response(response)
return response
return self.adjust_things_on_object('builds', build_id,
'annotations', annotations,
how=self._update_metadata_things,
namespace=namespace)

def set_annotations_on_build(self, build_id, annotations,
namespace=DEFAULT_NAMESPACE):
return self.adjust_things_on_object('builds', build_id,
'annotations', annotations,
how=self._replace_metadata_things,
namespace=namespace)

def import_image(self, name, namespace=DEFAULT_NAMESPACE):
"""
Expand Down

0 comments on commit c4f4248

Please sign in to comment.