You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/08/14 19:51:53 UTC
[airavata-django-portal] 11/13: AIRAVATA-2727 Removing compute
preferences
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 20892765c7257c464492ad0b838ddb5c61cdcbf4
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Tue Aug 14 12:34:46 2018 -0400
AIRAVATA-2727 Removing compute preferences
---
.../ComputePreference.vue | 25 +++++++++++++++++++
.../GroupComputeResourcePreference.vue | 15 ++++++++++++
django_airavata/apps/api/serializers.py | 27 ++++++++++++++++++---
.../js/models/GroupResourceProfile.js | 28 ++++++++++++++++++++++
django_airavata/apps/api/views.py | 12 +++++++++-
5 files changed, 103 insertions(+), 4 deletions(-)
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue
index 5d8edda..917a999 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue
@@ -54,6 +54,7 @@
<div class="row">
<div class="col d-flex justify-content-end">
<b-button variant="primary" @click="save">Save</b-button>
+ <b-button class="ml-2" variant="danger" @click="remove">Delete</b-button>
<b-button class="ml-2" variant="secondary" @click="cancel">Cancel</b-button>
</div>
</div>
@@ -197,6 +198,30 @@
});
}
},
+ remove: function() {
+
+ let groupResourceProfile = this.groupResourceProfile.clone();
+ const removedChildren = groupResourceProfile.removeComputeResource(this.host_id);
+ if (removedChildren) {
+ DjangoAiravataAPI.services.ServiceFactory.service("GroupResourceProfiles").update({data: groupResourceProfile, lookup: this.id})
+ .then(groupResourceProfile => {
+ // Navigate back to GroupResourceProfile with success message
+ this.$router.push({
+ name: 'group_resource_preference', params: {
+ value: groupResourceProfile,
+ id: this.id
+ }
+ });
+ })
+ .catch(error => {
+ // TODO: handle error
+ console.log("Error occurred", error);
+ });
+ } else {
+ // Since nothing was removed, just handle this like a cancel
+ this.cancel();
+ }
+ },
cancel: function() {
if (this.id) {
this.$router.push({ name: 'group_resource_preference', params: {id: this.id}});
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue
index e62dc28..9fe4cc9 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue
@@ -32,6 +32,10 @@
Edit
<i class="fa fa-edit" aria-hidden="true"></i>
</a>
+ <a href="#" class="text-danger" @click.prevent="removeComputePreference(data.item.computeResourceId)">
+ Delete
+ <i class="fa fa-trash" aria-hidden="true"></i>
+ </a>
</template>
</b-table>
</template>
@@ -178,6 +182,17 @@
batchQueueResourcePolicies: batchQueueResourcePolicies,
}
});
+ },
+ removeComputePreference: function(computeResourceId) {
+
+ let groupResourceProfile = this.data.clone();
+ groupResourceProfile.removeComputeResource(computeResourceId);
+ this.service.update({data: groupResourceProfile, lookup: this.id})
+ .then(groupResourceProfile => this.data = groupResourceProfile)
+ .catch(error => {
+ // TODO: handle error
+ console.log("Error occurred", error);
+ });
}
},
}
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index ec8cee8..3ccd9d8 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -453,14 +453,35 @@ class GroupResourceProfileSerializer(
def update(self, instance, validated_data):
result = super().update(instance, validated_data)
+ result._removed_compute_resource_preferences = []
+ result._removed_compute_resource_policies = []
result._removed_batch_queue_resource_policies = []
+ # Find all compute resource preferences that were removed
+ for compute_resource_preference in instance.computePreferences:
+ existing_compute_resource_preference = next(
+ (pref for pref in result.computePreferences
+ if pref.computeResourceId ==
+ compute_resource_preference.computeResourceId),
+ None)
+ if not existing_compute_resource_preference:
+ result._removed_compute_resource_preferences.append(
+ compute_resource_preference)
+ # Find all compute resource policies that were removed
+ for compute_resource_policy in instance.computeResourcePolicies:
+ existing_compute_resource_policy = next(
+ (pol for pol in result.computeResourcePolicies
+ if pol.resourcePolicyId ==
+ compute_resource_policy.resourcePolicyId),
+ None)
+ if not existing_compute_resource_policy:
+ result._removed_compute_resource_policies.append(
+ compute_resource_policy)
# Find all batch queue resource policies that were removed
for batch_queue_resource_policy in instance.batchQueueResourcePolicies:
existing_batch_queue_resource_policy_for_update = next(
(bq for bq in result.batchQueueResourcePolicies
- if bq.computeResourceId ==
- batch_queue_resource_policy.computeResourceId
- and bq.queuename == batch_queue_resource_policy.queuename),
+ if bq.resourcePolicyId ==
+ batch_queue_resource_policy.resourcePolicyId),
None)
if not existing_batch_queue_resource_policy_for_update:
result._removed_batch_queue_resource_policies.append(
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js b/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js
index 34d664e..8904504 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js
@@ -86,4 +86,32 @@ export default class GroupResourceProfile extends BaseModel {
}
}
}
+
+ /**
+ * Remove compute resource preference, compute resource policy and batch queue policies.
+ * @param {string} computeResourceId
+ * @returns {boolean} true if this GroupResourceProfile was changed
+ */
+ removeComputeResource(computeResourceId) {
+
+ let removedChildren = false;
+ const existingComputeResourcePreferenceIndex = this.computePreferences.findIndex(pref => pref.computeResourceId === computeResourceId);
+ if (existingComputeResourcePreferenceIndex >= 0) {
+ this.computePreferences.splice(existingComputeResourcePreferenceIndex, 1);
+ removedChildren = true;
+ }
+ const existingComputeResourcePolicyIndex = this.computeResourcePolicies.findIndex(pol => pol.computeResourceId === computeResourceId);
+ if (existingComputeResourcePolicyIndex >= 0) {
+ this.computeResourcePolicies.splice(existingComputeResourcePolicyIndex, 1);
+ removedChildren = true;
+ }
+ const existingBatchQueueResourcePolicies = this.batchQueueResourcePolicies.filter(pol => pol.computeResourceId === computeResourceId);
+ for (const existingBatchQueueResourcePolicy of existingBatchQueueResourcePolicies) {
+ const existingBatchQueueResourcePolicyIndex = this.batchQueueResourcePolicies.indexOf(existingBatchQueueResourcePolicy);
+ this.batchQueueResourcePolicies.splice(existingBatchQueueResourcePolicyIndex, 1);
+ removedChildren = true;
+ }
+
+ return removedChildren;
+ }
}
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 2ad5ec5..3650c40 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -699,12 +699,22 @@ class GroupResourceProfileViewSet(APIBackedViewSet):
def perform_update(self, serializer):
grp = serializer.save()
+ for removed_compute_resource_preference \
+ in grp._removed_compute_resource_preferences:
+ self.request.airavata_client.removeGroupComputePrefs(
+ self.authz_token,
+ removed_compute_resource_preference.computeResourceId,
+ removed_compute_resource_preference.groupResourceProfileId)
+ for removed_compute_resource_policy \
+ in grp._removed_compute_resource_policies:
+ self.request.airavata_client.removeGroupComputeResourcePolicy(
+ self.authz_token,
+ removed_compute_resource_policy.resourcePolicyId)
for removed_batch_queue_resource_policy \
in grp._removed_batch_queue_resource_policies:
self.request.airavata_client.removeGroupBatchQueueResourcePolicy(
self.authz_token,
removed_batch_queue_resource_policy.resourcePolicyId)
- log.debug("batch queue res policies: {}".format(grp.batchQueueResourcePolicies))
self.request.airavata_client.updateGroupResourceProfile(
self.authz_token, grp)