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/10/03 19:00:04 UTC
[airavata-django-portal] 01/02: AIRAVATA-2865 UI for setting
default cred store token of GroupResourceProfile
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 861527d07596a087173d81b6e00fe6459ebf27e1
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Mon Oct 1 17:37:56 2018 -0400
AIRAVATA-2865 UI for setting default cred store token of GroupResourceProfile
---
.../ComputePreference.vue | 16 +-
.../GroupComputeResourcePreference.vue | 18 +-
.../credentials/SSHCredentialSelector.vue | 10 +-
.../js/models/GroupResourceProfile.js | 263 ++++++++++++---------
4 files changed, 188 insertions(+), 119 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 cd05dfa..49fb726 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
@@ -18,7 +18,12 @@
</b-form-input>
</b-form-group>
<b-form-group label="SSH Credential" label-for="credential-store-token">
- <ssh-credential-selector v-model="data.resourceSpecificCredentialStoreToken" />
+ <ssh-credential-selector v-model="data.resourceSpecificCredentialStoreToken">
+ <option v-if="localGroupResourceProfile && localGroupResourceProfile.defaultCredentialStoreToken"
+ :value="null" slot="first">
+ --- Use the default SSH credential for {{ localGroupResourceProfile.groupResourceProfileName }}
+ </option>
+ </ssh-credential-selector>
</b-form-group>
<b-form-group label="Allocation Project Number" label-for="allocation-number">
<b-form-input id="allocation-number" type="text" v-model="data.allocationProjectNumber">
@@ -39,12 +44,13 @@
<h5 class="card-title">Policy</h5>
<b-form-group label="Allowed Queues">
<div v-for="batchQueue in computeResource.batchQueues" :key="batchQueue.queueName" v-if="localComputeResourcePolicy">
- <b-form-checkbox :checked="localComputeResourcePolicy.allowedBatchQueues.includes(batchQueue.queueName)" @input="batchQueueChecked(batchQueue, $event)">
+ <b-form-checkbox :checked="localComputeResourcePolicy.allowedBatchQueues.includes(batchQueue.queueName)"
+ @input="batchQueueChecked(batchQueue, $event)">
{{ batchQueue.queueName }}
</b-form-checkbox>
- <batch-queue-resource-policy v-if="localComputeResourcePolicy.allowedBatchQueues.includes(batchQueue.queueName)" :batch-queue="batchQueue"
- :value="localBatchQueueResourcePolicies.find(pol => pol.queuename === batchQueue.queueName)" @input="updatedBatchQueueResourcePolicy(batchQueue, $event)"
- />
+ <batch-queue-resource-policy v-if="localComputeResourcePolicy.allowedBatchQueues.includes(batchQueue.queueName)"
+ :batch-queue="batchQueue" :value="localBatchQueueResourcePolicies.find(pol => pol.queuename === batchQueue.queueName)"
+ @input="updatedBatchQueueResourcePolicy(batchQueue, $event)" />
</div>
</b-form-group>
</div>
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 419dd2f..206ca98 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
@@ -13,12 +13,20 @@
<b-form-input id="profile-name" type="text" v-model="data.groupResourceProfileName" required placeholder="Name of this Group Resource Profile">
</b-form-input>
</b-form-group>
+ <b-form-group label="Default SSH Credential" label-for="default-credential-store-token">
+ <ssh-credential-selector id="default-credential-store-token" v-model="data.defaultCredentialStoreToken">
+ <option :value="null" slot="first">
+ --- Unset the default SSH credential for this profile
+ </option>
+ </ssh-credential-selector>
+ </b-form-group>
<share-button ref="shareButton" :entity-id="id" />
</div>
</div>
</div>
</div>
- <list-layout :items="data.computePreferences" title="Compute Preferences" new-item-button-text="New Compute Preference" @add-new-item="createComputePreference">
+ <list-layout :items="data.computePreferences" title="Compute Preferences" new-item-button-text="New Compute Preference"
+ @add-new-item="createComputePreference">
<template slot="item-list" slot-scope="slotProps">
<b-table hover :fields="computePreferencesFields" :items="slotProps.items" sort-by="computeResourceId">
@@ -55,8 +63,8 @@
<b-button class="ml-2" variant="secondary" @click="cancel">Cancel</b-button>
</div>
</div>
- <compute-resources-modal ref="modalSelectComputeResource" @selected="onSelectComputeResource" :excluded-resource-ids="excludedComputeResourceIds"
- />
+ <compute-resources-modal ref="modalSelectComputeResource" @selected="onSelectComputeResource"
+ :excluded-resource-ids="excludedComputeResourceIds" />
</div>
</template>
@@ -65,6 +73,7 @@ import { components as comps, layouts } from "django-airavata-common-ui";
import { models, services } from "django-airavata-api";
import ComputeResourcePolicySummary from "./ComputeResourcePolicySummary.vue";
import ComputeResourcesModal from "../ComputeResourcesModal.vue";
+import SSHCredentialSelector from "../../credentials/SSHCredentialSelector.vue";
export default {
name: "group-compute-resource-preference",
@@ -124,7 +133,8 @@ export default {
"share-button": comps.ShareButton,
"list-layout": layouts.ListLayout,
ComputeResourcePolicySummary,
- ComputeResourcesModal
+ ComputeResourcesModal,
+ "ssh-credential-selector": SSHCredentialSelector
},
computed: {
excludedComputeResourceIds() {
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue
index 4c84ed0..fcf115b 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/credentials/SSHCredentialSelector.vue
@@ -2,10 +2,12 @@
<div>
<b-input-group>
<b-form-select v-model="data" :options="credentialStoreTokenOptions">
- <template slot="first">
- <option :value="null">
- <em>Use the default SSH credential</em>
- </option>
+ <template v-if="$slots.first" slot="first">
+ <slot name="first">
+ <option :value="null">
+ Use the default SSH credential
+ </option>
+ </slot>
</template>
</b-form-select>
<b-input-group-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 59645e3..ff71113 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
@@ -1,121 +1,172 @@
-import BaseModel from './BaseModel'
-import BatchQueueResourcePolicy from './BatchQueueResourcePolicy'
-import ComputeResourcePolicy from './ComputeResourcePolicy'
-import GroupComputeResourcePreference from './GroupComputeResourcePreference'
+import BaseModel from "./BaseModel";
+import BatchQueueResourcePolicy from "./BatchQueueResourcePolicy";
+import ComputeResourcePolicy from "./ComputeResourcePolicy";
+import GroupComputeResourcePreference from "./GroupComputeResourcePreference";
const FIELDS = [
- 'gatewayId',
- 'groupResourceProfileId',
- 'groupResourceProfileName',
- {
- name: 'computePreferences',
- type: GroupComputeResourcePreference,
- list: true,
- default: BaseModel.defaultNewInstance(Array),
- },
- {
- name: 'computeResourcePolicies',
- type: ComputeResourcePolicy,
- list: true,
- default: BaseModel.defaultNewInstance(Array),
- },
- {
- name: 'batchQueueResourcePolicies',
- type: BatchQueueResourcePolicy,
- list: true,
- default: BaseModel.defaultNewInstance(Array),
- },
- {
- name: 'creationTime',
- type: 'date',
- },
- {
- name: 'updatedTime',
- type: 'date',
- },
- 'userHasWriteAccess', // true if current user has write access
+ "gatewayId",
+ "groupResourceProfileId",
+ "groupResourceProfileName",
+ {
+ name: "computePreferences",
+ type: GroupComputeResourcePreference,
+ list: true,
+ default: BaseModel.defaultNewInstance(Array)
+ },
+ {
+ name: "computeResourcePolicies",
+ type: ComputeResourcePolicy,
+ list: true,
+ default: BaseModel.defaultNewInstance(Array)
+ },
+ {
+ name: "batchQueueResourcePolicies",
+ type: BatchQueueResourcePolicy,
+ list: true,
+ default: BaseModel.defaultNewInstance(Array)
+ },
+ {
+ name: "creationTime",
+ type: "date"
+ },
+ {
+ name: "updatedTime",
+ type: "date"
+ },
+ "defaultCredentialStoreToken",
+ "userHasWriteAccess" // true if current user has write access
];
export default class GroupResourceProfile extends BaseModel {
+ constructor(data = {}) {
+ super(FIELDS, data);
+ }
- constructor(data = {}) {
- super(FIELDS, data);
- }
+ getComputePreference(computeResourceId) {
+ return this.computePreferences.find(
+ pref => pref.computeResourceId === computeResourceId
+ );
+ }
- getComputePreference(computeResourceId) {
- return this.computePreferences.find(pref => pref.computeResourceId === computeResourceId);
- }
+ getComputeResourcePolicy(computeResourceId) {
+ return this.computeResourcePolicies.find(
+ pol => pol.computeResourceId === computeResourceId
+ );
+ }
- getComputeResourcePolicy(computeResourceId) {
- return this.computeResourcePolicies.find(pol => pol.computeResourceId === computeResourceId);
- }
+ getBatchQueueResourcePolicies(computeResourceId) {
+ return this.batchQueueResourcePolicies.filter(
+ pol => pol.computeResourceId === computeResourceId
+ );
+ }
- getBatchQueueResourcePolicies(computeResourceId) {
- return this.batchQueueResourcePolicies.filter(pol => pol.computeResourceId === computeResourceId);
+ mergeComputeResourcePreference(
+ computeResourcePreference,
+ computeResourcePolicy,
+ batchQueueResourcePolicies
+ ) {
+ // merge/add computeResourcePreference and computeResourcePolicy
+ const existingComputeResourcePreference = this.computePreferences.find(
+ pref =>
+ pref.computeResourceId === computeResourcePreference.computeResourceId
+ );
+ if (existingComputeResourcePreference) {
+ Object.assign(
+ existingComputeResourcePreference,
+ computeResourcePreference
+ );
+ } else {
+ this.computePreferences.push(computeResourcePreference);
}
-
- mergeComputeResourcePreference(computeResourcePreference, computeResourcePolicy, batchQueueResourcePolicies) {
- // merge/add computeResourcePreference and computeResourcePolicy
- const existingComputeResourcePreference = this.computePreferences.find(pref => pref.computeResourceId === computeResourcePreference.computeResourceId);
- if (existingComputeResourcePreference) {
- Object.assign(existingComputeResourcePreference, computeResourcePreference);
- } else {
- this.computePreferences.push(computeResourcePreference);
- }
- const existingComputeResourcePolicy = this.computeResourcePolicies.find(pol => pol.computeResourceId === computeResourcePolicy.computeResourceId);
- if (existingComputeResourcePolicy) {
- Object.assign(existingComputeResourcePolicy, computeResourcePolicy);
- } else {
- this.computeResourcePolicies.push(computeResourcePolicy);
- }
- // merge/add/remove batchQueueResourcePolicies
- const existingBatchQueueResourcePolicies = this.batchQueueResourcePolicies.filter(pol => pol.computeResourceId === computeResourcePreference.computeResourceId);
- for (const batchQueueResourcePolicy of batchQueueResourcePolicies) {
- const existingBatchQueueResourcePolicy = existingBatchQueueResourcePolicies.find(pol => pol.queuename === batchQueueResourcePolicy.queuename);
- if (existingBatchQueueResourcePolicy) {
- Object.assign(existingBatchQueueResourcePolicy, batchQueueResourcePolicy);
- const existingBatchQueueResourcePolicyIndex = existingBatchQueueResourcePolicies.findIndex(pol => pol.queuename === batchQueueResourcePolicy.queuename);
- if (existingBatchQueueResourcePolicyIndex >= 0) {
- existingBatchQueueResourcePolicies.splice(existingBatchQueueResourcePolicyIndex, 1);
- }
- } else {
- this.batchQueueResourcePolicies.push(batchQueueResourcePolicy);
- }
- }
- for (const existingBatchQueueResourcePolicy of existingBatchQueueResourcePolicies) {
- const existingBatchQueueResourcePolicyIndex = this.batchQueueResourcePolicies.findIndex(
- pol => pol.computeResourceId === existingBatchQueueResourcePolicy.computeResourceId && pol.queuename === existingBatchQueueResourcePolicy.queuename);
- if (existingBatchQueueResourcePolicyIndex >= 0) {
- this.batchQueueResourcePolicies.splice(existingBatchQueueResourcePolicyIndex, 1);
- }
- }
+ const existingComputeResourcePolicy = this.computeResourcePolicies.find(
+ pol => pol.computeResourceId === computeResourcePolicy.computeResourceId
+ );
+ if (existingComputeResourcePolicy) {
+ Object.assign(existingComputeResourcePolicy, computeResourcePolicy);
+ } else {
+ this.computeResourcePolicies.push(computeResourcePolicy);
}
-
- /**
- * 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;
+ // merge/add/remove batchQueueResourcePolicies
+ const existingBatchQueueResourcePolicies = this.batchQueueResourcePolicies.filter(
+ pol =>
+ pol.computeResourceId === computeResourcePreference.computeResourceId
+ );
+ for (const batchQueueResourcePolicy of batchQueueResourcePolicies) {
+ const existingBatchQueueResourcePolicy = existingBatchQueueResourcePolicies.find(
+ pol => pol.queuename === batchQueueResourcePolicy.queuename
+ );
+ if (existingBatchQueueResourcePolicy) {
+ Object.assign(
+ existingBatchQueueResourcePolicy,
+ batchQueueResourcePolicy
+ );
+ const existingBatchQueueResourcePolicyIndex = existingBatchQueueResourcePolicies.findIndex(
+ pol => pol.queuename === batchQueueResourcePolicy.queuename
+ );
+ if (existingBatchQueueResourcePolicyIndex >= 0) {
+ existingBatchQueueResourcePolicies.splice(
+ existingBatchQueueResourcePolicyIndex,
+ 1
+ );
}
+ } else {
+ this.batchQueueResourcePolicies.push(batchQueueResourcePolicy);
+ }
+ }
+ for (const existingBatchQueueResourcePolicy of existingBatchQueueResourcePolicies) {
+ const existingBatchQueueResourcePolicyIndex = this.batchQueueResourcePolicies.findIndex(
+ pol =>
+ pol.computeResourceId ===
+ existingBatchQueueResourcePolicy.computeResourceId &&
+ pol.queuename === existingBatchQueueResourcePolicy.queuename
+ );
+ if (existingBatchQueueResourcePolicyIndex >= 0) {
+ this.batchQueueResourcePolicies.splice(
+ existingBatchQueueResourcePolicyIndex,
+ 1
+ );
+ }
+ }
+ }
- return removedChildren;
+ /**
+ * 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;
+ }
}