Procházet zdrojové kódy

Metadata add & find methods

almahmoud před 7 roky
rodič
revize
febc5cc14a
1 změnil soubory, kde provedl 28 přidání a 0 odebrání
  1. 28 0
      cloudbridge/cloud/providers/gce/helpers.py

+ 28 - 0
cloudbridge/cloud/providers/gce/helpers.py

@@ -1,3 +1,6 @@
+import fnmatch
+import re
+
 # based on http://stackoverflow.com/a/39126754
 from cryptography.hazmat.backends import default_backend
 from cryptography.hazmat.primitives import serialization as crypt_serialization
@@ -103,6 +106,31 @@ def modify_or_add_metadata_item(provider, key, value):
     gce_metadata_save_op(provider, _update_metadata_key)
 
 
+# This function will raise an HttpError with message containing
+# "Metadata has duplicate key" if it's not unique, unlike the previous
+# method which either adds or updates the value corresponding to that key
+def add_metadata_item(provider, key, value):
+    def _add_metadata_key(metadata):
+        entry = {'key': key, 'value': value}
+        entries = metadata.get('items', [])
+        entries.append(entry)
+        # Reassign explicitly in case the original get returned [] although
+        # if not it will be already updated
+        metadata['items'] = entries
+
+    gce_metadata_save_op(provider, _add_metadata_key)
+
+
+def find_all_metadata_items(provider, key_regex):
+    metadata = get_common_metadata(provider)
+    items = metadata.get('items', [])
+    if not items:
+        return []
+    regex = fnmatch.translate(key_regex)
+    return [item for item in items
+            if re.search(regex, item['key'])]
+
+
 def get_metadata_item_value(provider, key):
     metadata = get_common_metadata(provider)
     entries = [item['value'] for item in metadata.get('items', [])