241 lines
6.9 KiB
JavaScript
241 lines
6.9 KiB
JavaScript
/**
|
|
* (c) Copyright 2016 Hewlett Packard Enterprise Development LP
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
* not use this file except in compliance with the License. You may obtain
|
|
* a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
(function () {
|
|
'use strict';
|
|
|
|
/**
|
|
* @ngdoc overview
|
|
* @ngname designatedashboard.resources.os-designate-recordset
|
|
*
|
|
* @description
|
|
* Provides all of the services and widgets required
|
|
* to support and display DNS (designate) record set related content.
|
|
*/
|
|
angular
|
|
.module('designatedashboard.resources.os-designate-recordset', [
|
|
'ngRoute',
|
|
'designatedashboard.resources.os-designate-recordset.actions',
|
|
'designatedashboard.resources.os-designate-recordset.details'
|
|
])
|
|
.constant(
|
|
'designatedashboard.resources.os-designate-recordset.resourceType',
|
|
'OS::Designate::RecordSet')
|
|
.constant(
|
|
'designatedashboard.resources.os-designate-recordset.typeMap',
|
|
{
|
|
'A': gettext('A - Address record'),
|
|
'AAAA': gettext('AAAA - IPv6 address record'),
|
|
'CNAME': gettext('CNAME - Canonical name record'),
|
|
'MX': gettext('MX - Mail exchange record'),
|
|
'PTR': gettext('PTR - Pointer record'),
|
|
'SPF': gettext('SPF - Sender Policy Framework'),
|
|
'SRV': gettext('SRV - Service locator'),
|
|
'SSHFP': gettext('SSHFP - SSH Public Key Fingerprint'),
|
|
'TXT': gettext('TXT - Text record'),
|
|
'SOA': gettext('SOA - Start of authority record'),
|
|
'NS': gettext('NS - Name server')
|
|
})
|
|
.constant(
|
|
'designatedashboard.resources.os-designate-recordset.editableTypes',
|
|
[
|
|
"A",
|
|
"AAAA",
|
|
"CNAME",
|
|
"MX",
|
|
"PTR",
|
|
"SPF",
|
|
"SRV",
|
|
"SSHFP",
|
|
"TXT"
|
|
])
|
|
.config(config)
|
|
.run(run);
|
|
|
|
config.$inject = ['$provide', '$windowProvider'];
|
|
|
|
function config($provide, $windowProvider) {
|
|
var path = $windowProvider.$get().STATIC_URL + 'designatedashboard/resources/os-designate-recordset/';
|
|
$provide.constant('designatedashboard.resources.os-designate-recordset.basePath', path);
|
|
}
|
|
|
|
run.$inject = [
|
|
'horizon.app.core.detailRoute',
|
|
'horizon.framework.conf.resource-type-registry.service',
|
|
'designatedashboard.resources.os-designate-recordset.api',
|
|
'designatedashboard.resources.os-designate-recordset.resourceType',
|
|
'designatedashboard.resources.os-designate-recordset.typeMap',
|
|
'designatedashboard.resources.util'
|
|
];
|
|
|
|
function run(detailRoute,
|
|
registry,
|
|
recordSetApi,
|
|
resourceTypeString,
|
|
typeMap,
|
|
util) {
|
|
var resourceType = registry.getResourceType(resourceTypeString);
|
|
resourceType
|
|
.setNames(gettext('DNS Record Set'), gettext('DNS Record Sets'))
|
|
.setListFunction(list)
|
|
.setProperty('id', {
|
|
label: gettext('ID')
|
|
})
|
|
.setProperty('zone_id', {
|
|
label: gettext('Zone ID'),
|
|
filters: ['noValue']
|
|
})
|
|
.setProperty('zone_name', {
|
|
label: gettext('Zone Name'),
|
|
filters: ['noName']
|
|
})
|
|
.setProperty('project_id', {
|
|
label: gettext('Project ID'),
|
|
filters: ['noValue']
|
|
})
|
|
.setProperty('name', {
|
|
label: gettext('Name'),
|
|
filters: ['noName']
|
|
})
|
|
.setProperty('description', {
|
|
label: gettext('Description'),
|
|
filters: ['noName']
|
|
})
|
|
.setProperty('type', {
|
|
label: gettext('Type'),
|
|
filters: ['uppercase'],
|
|
values: typeMap
|
|
})
|
|
.setProperty('ttl', {
|
|
label: gettext('Time To Live'),
|
|
filters: ['noValue']
|
|
})
|
|
.setProperty('records', {
|
|
label: gettext('Records'),
|
|
filters: ['noValue']
|
|
})
|
|
.setProperty('notes', {
|
|
label: gettext('Notes'),
|
|
filters: ['noName']
|
|
})
|
|
.setProperty('status', {
|
|
label: gettext('Status'),
|
|
filters: ['lowercase', 'noName'],
|
|
values: util.statusMap()
|
|
})
|
|
.setProperty('action', {
|
|
label: gettext('Action'),
|
|
filters: ['lowercase', 'noName'],
|
|
values: util.actionMap()
|
|
})
|
|
.setProperty('version', {
|
|
label: gettext('Version'),
|
|
filters: ['noValue']
|
|
})
|
|
.setProperty('created_at', {
|
|
label: gettext('Created At'),
|
|
filters: ['noValue']
|
|
})
|
|
.setProperty('updated_at', {
|
|
label: gettext('Updated At'),
|
|
filters: ['noValue']
|
|
});
|
|
|
|
resourceType
|
|
.tableColumns
|
|
.append({
|
|
id: 'name',
|
|
priority: 1,
|
|
sortDefault: true,
|
|
filters: ['noName'],
|
|
// For link format, see pathGenerator in details.module.js
|
|
template: '<a ng-href="{$ \'' + detailRoute + 'OS::Designate::RecordSet/\' + item.zone_id + \'/\' + item.id $}">{$ item.name $}</a>'
|
|
})
|
|
.append({
|
|
id: 'type',
|
|
priority: 2,
|
|
filters: ['uppercase'],
|
|
values: typeMap
|
|
})
|
|
.append({
|
|
id: 'records',
|
|
priority: 2,
|
|
filters: ['noValue']
|
|
})
|
|
.append({
|
|
id: 'status',
|
|
filters: ['lowercase'],
|
|
values: util.statusMap(),
|
|
priority: 2
|
|
});
|
|
|
|
resourceType
|
|
.filterFacets
|
|
.append({
|
|
label: gettext('Type'),
|
|
name: 'type',
|
|
isServer: false,
|
|
singleton: true,
|
|
persistent: false,
|
|
options: Object.keys(typeMap).map(function toOptionLabel(key) {
|
|
return {
|
|
label: typeMap[key],
|
|
key: key
|
|
}
|
|
})
|
|
})
|
|
.append({
|
|
label: gettext('Name'),
|
|
name: 'name',
|
|
isServer: false,
|
|
singleton: true,
|
|
persistent: false
|
|
})
|
|
.append({
|
|
label: gettext('Status'),
|
|
name: 'status',
|
|
isServer: false,
|
|
singleton: true,
|
|
persistent: false,
|
|
options: [
|
|
{label: gettext('Active'), key: 'active'},
|
|
{label: gettext('Pending'), key: 'pending'}
|
|
]
|
|
});
|
|
|
|
/**
|
|
* list all recordsets within a zone. Requires "zoneId" in the params. All other
|
|
* params will be passed unmodified as URL params to the API.
|
|
*
|
|
* @param params
|
|
* zoneId (required) list recordsets within the zone
|
|
*
|
|
* @returns {*|Object}
|
|
*/
|
|
function list(params) {
|
|
return recordSetApi.list(params.zoneId, params).then(function onList(response) {
|
|
// listFunctions are expected to return data in "items"
|
|
response.data.items = response.data.recordsets;
|
|
|
|
util.addTimestampIds(response.data.items);
|
|
|
|
return response;
|
|
});
|
|
}
|
|
}
|
|
|
|
})();
|