Преглед на файлове

Azure with marketplace images requiring agreements

almahmoud преди 7 години
родител
ревизия
88196cde5c
променени са 2 файла, в които са добавени 16 реда и са изтрити 5 реда
  1. 5 2
      cloudbridge/cloud/providers/azure/azure_client.py
  2. 11 3
      cloudbridge/cloud/providers/azure/services.py

+ 5 - 2
cloudbridge/cloud/providers/azure/azure_client.py

@@ -575,8 +575,11 @@ class AzureClient(object):
         return azure_images
 
     def get_marketplace_agreement(self, publisher_id, offer_id, plan_id):
-        return self.marketplace_agreement_client.marketplace_agreements\
-            .get(publisher_id, offer_id, plan_id)
+        try:
+            return self.marketplace_agreement_client.marketplace_agreements\
+                .get(publisher_id, offer_id, plan_id)
+        except Exception as e:
+            return None
 
     def accept_marketplace_agreement(self, publisher_id, offer_id,
                                      plan_id, agr):

+ 11 - 3
cloudbridge/cloud/providers/azure/services.py

@@ -571,9 +571,17 @@ class AzureInstanceService(BaseInstanceService):
         if image_ref:
             sku = image_ref.get('sku')
             if sku:
-                params.update(plan={"name": sku,
-                                    "publisher": image_ref.get("publisher"),
-                                    "product": image_ref.get("offer")})
+                publisher = image_ref.get("publisher")
+                offer = image_ref.get("offer")
+                agreement = self.provider.azure_client. \
+                    get_marketplace_agreement(publisher, offer, sku)
+                # TODO: Give link to terms to user before accepting
+                if agreement:
+                    self.provider.azure_client.accept_marketplace_agreement(
+                        publisher, offer, sku, agreement)
+                    params.update(plan={"name": sku,
+                                        "publisher": publisher,
+                                        "product": offer})
 
         try:
             vm = self.provider.azure_client.create_vm(instance_name, params)