azure-cli
Version:
Microsoft Azure Cross Platform Command Line tool
382 lines (356 loc) • 12 kB
JavaScript
/*** Generated by streamline 0.10.17 (callbacks) - DO NOT EDIT ***//**
* Copyright (c) Microsoft. All rights reserved.
*
* 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.
*/
var __ = require('underscore');
var constants = require('./constants');
var util = require('util');
var utils = require('../../../util/utils');
var resourceUtils = require('../resource/resourceUtils');
exports.covertToAzureFormat = function (recordSet) {
var parameters = {
recordSet: {
name: recordSet.name,
location: constants.dnsZone.defLocation,
properties: {
ttl: recordSet.ttl
}
}
};
switch (recordSet.type) {
case 'SOA' :
parameters.recordSet.properties.soaRecord = recordSet.records[0];
break;
case 'A' :
parameters.recordSet.properties.aRecords = recordSet.records;
break;
case 'AAAA' :
parameters.recordSet.properties.aaaaRecords = recordSet.records;
break;
case 'NS' :
parameters.recordSet.properties.nsRecords = recordSet.records;
break;
case 'MX' :
parameters.recordSet.properties.mxRecords = recordSet.records;
break;
case 'CNAME':
parameters.recordSet.properties.cnameRecord = recordSet.records[0];
break;
case 'TXT' :
parameters.recordSet.properties.txtRecords = recordSet.records;
break;
case 'SRV' :
parameters.recordSet.properties.srvRecords = recordSet.records;
break;
case 'PTR' :
parameters.recordSet.properties.ptrRecords = recordSet.records;
break;
}
return parameters;
};
exports.getShortType = function (id) {
var resourceInfo = resourceUtils.getResourceInformation(id);
return resourceInfo.resourceType.split('/')[2];
};
exports.convertToListFormat = function (recordSets) {
var printable = [];
for (var i = 0; i < recordSets.length; i++) {
var recordSet = recordSets[i];
var items = [];
if (!__.isEmpty(recordSet.properties.soaRecord)) {
var soaRecord = recordSet.properties.soaRecord;
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: 'host: ' + soaRecord.host
});
items.push({record: 'email: ' + soaRecord.email});
items.push({record: 'refresh: ' + soaRecord.refreshTime});
items.push({record: 'retry: ' + soaRecord.retryTime});
items.push({record: 'expire: ' + soaRecord.expireTime});
items.push({record: 'minimum: ' + soaRecord.minimumTtl});
}
if (!__.isEmpty(recordSet.properties.cnameRecord)) {
var cnameRecord = recordSet.properties.cnameRecord;
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: cnameRecord.cname
});
}
if (!__.isEmpty(recordSet.properties.aRecords)) {
__.each(recordSet.properties.aRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: rec.ipv4Address
});
} else {
items.push({
record: rec.ipv4Address
});
}
});
}
if (!__.isEmpty(recordSet.properties.aaaaRecords)) {
__.each(recordSet.properties.aaaaRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: rec.ipv6Address
});
} else {
items.push({
record: rec.ipv6Address
});
}
});
}
if (!__.isEmpty(recordSet.properties.nsRecords)) {
__.each(recordSet.properties.nsRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: rec.nsdname
});
} else {
items.push({
record: rec.nsdname
});
}
});
}
if (!__.isEmpty(recordSet.properties.srvRecords)) {
__.each(recordSet.properties.srvRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: util.format('%s %s %s %s', rec.priority, rec.weight, rec.port, rec.target)
});
} else {
items.push({
record: util.format('%s %s %s %s', rec.priority, rec.weight, rec.port, rec.target)
});
}
});
}
if (!__.isEmpty(recordSet.properties.mxRecords)) {
__.each(recordSet.properties.mxRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: util.format('%s %s', rec.preference, rec.exchange)
});
} else {
items.push({
record: util.format('%s %s', rec.preference, rec.exchange)
});
}
});
}
if (!__.isEmpty(recordSet.properties.ptrRecords)) {
__.each(recordSet.properties.ptrRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: rec.ptrdname
});
} else {
items.push({
record: rec.ptrdname
});
}
});
}
if (!__.isEmpty(recordSet.properties.txtRecords)) {
var maxLength = 20;
__.each(recordSet.properties.txtRecords, function (rec, index) {
if (index === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: rec.value.length > maxLength ? rec.value.substr(0, maxLength) + '...' : rec.value
});
} else {
items.push({
record: rec.value.length > maxLength ? rec.value.substr(0, maxLength) + '...' : rec.value
});
}
});
}
// record set is empty
if (items.length === 0) {
items.push({
name: recordSet.name,
ttl: recordSet.properties.ttl,
type: exports.getShortType(recordSet.id),
tags: recordSet.tags,
record: ''
});
}
printable = printable.concat(items);
}
return printable;
};
/**
* This method is used as workaround to delete a xxxRecords objects if empty
*/
exports.removeEmptyRecords = function (recordSet) {
if (!recordSet.properties) return;
var fields = ['aRecords', 'aaaaRecords', 'nsRecords', 'mxRecords', 'srvRecords', 'txtRecords', 'soaRecord', 'ptrRecords'];
for (var i = 0; i < fields.length; i++) {
var propName = fields[i];
if (__.isEmpty(recordSet.properties[propName])) {
var type = propName.replace('Records', '');
if (!utils.ignoreCaseEquals(type, exports.getShortType(recordSet.id))) {
delete recordSet.properties[propName];
}
}
}
};
exports.merge = function (rs1, rs2, type, options, output) {
var self = this;
if (options.debug) {
console.log('\nExisting Record Set: %j \n', rs2);
console.log('\nNew Record Set: %j \n', rs1);
}
switch (type) {
case 'SOA' :
mergeSOA(rs1, rs2);
break;
case 'NS' :
mergeNS(rs1, rs2);
break;
case 'CNAME' :
mergeCNAME(rs1, rs2, output);
break;
case 'A' :
mergeA(rs1, rs2);
break;
case 'AAAA' :
mergeAAAA(rs1, rs2);
break;
case 'MX' :
mergeMX(rs1, rs2);
break;
case 'TXT' :
mergeTXT(rs1, rs2);
break;
case 'SRV' :
mergeSRV(rs1, rs2);
break;
case 'PTR' :
mergePTR(rs1, rs2);
break;
}
// to override existing set after merge
rs2.ifNoneMatch = undefined;
self.removeEmptyRecords(rs2.recordSet);
if (options.debug) {
console.log('\nAfter merge: %j \n', rs2);
}
return rs2;
};
function mergeSOA(rs1, rs2) {
var host = rs2.recordSet.properties.soaRecord.host;
rs2.recordSet.properties.soaRecord = rs1.recordSet.properties.soaRecord;
rs2.recordSet.properties.soaRecord.host = host;
rs2.recordSet.properties.ttl = rs1.recordSet.properties.ttl;
}
function mergeNS(rs1, rs2) {
if (rs2.recordSet.name === '@') {
rs2.recordSet.properties.ttl = rs1.recordSet.properties.ttl;
} else {
var nsRecords = rs1.recordSet.properties.nsRecords;
for (var i = 0; i < nsRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.nsRecords, {nsdname: nsRecords[i].nsdname})) {
rs2.recordSet.properties.nsRecords.push(nsRecords[i]);
}
}
}
}
function mergeCNAME(rs1, rs2, output) {
output.warn(util.format('Can\'t merge record set "%s" of type CNAME with existing one, skipped', rs2.recordSet.name));
}
function mergeA(rs1, rs2) {
var aRecords = rs1.recordSet.properties.aRecords;
for (var i = 0; i < aRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.aRecords, {ipv4Address: aRecords[i].ipv4Address})) {
rs2.recordSet.properties.aRecords.push(aRecords[i]);
}
}
}
function mergeAAAA(rs1, rs2) {
var aaaaRecords = rs1.recordSet.properties.aaaaRecords;
for (var i = 0; i < aaaaRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.aaaaRecords, {ipv6Address: aaaaRecords[i].ipv6Address})) {
rs2.recordSet.properties.aaaaRecords.push(aaaaRecords[i]);
}
}
}
function mergeMX(rs1, rs2) {
var mxRecords = rs1.recordSet.properties.mxRecords;
for (var i = 0; i < mxRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.mxRecords, {exchange: mxRecords[i].exchange})) {
rs2.recordSet.properties.mxRecords.push(mxRecords[i]);
}
}
}
function mergeTXT(rs1, rs2) {
var txtRecords = rs1.recordSet.properties.txtRecords;
for (var i = 0; i < txtRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.txtRecords, {value: txtRecords[i].value})) {
rs2.recordSet.properties.txtRecords.push(txtRecords[i]);
}
}
}
function mergeSRV(rs1, rs2) {
var srvRecords = rs1.recordSet.properties.srvRecords;
for (var i = 0; i < srvRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.srvRecords, {target: srvRecords[i].target})) {
rs2.recordSet.properties.srvRecords.push(srvRecords[i]);
}
}
}
function mergePTR(rs1, rs2) {
var ptrRecords = rs1.recordSet.properties.ptrRecords;
for (var i = 0; i < ptrRecords.length; i++) {
if (!utils.findFirstCaseIgnore(rs2.recordSet.properties.ptrRecords, {ptrdname: ptrRecords[i].ptrdname})) {
rs2.recordSet.properties.ptrRecords.push(ptrRecords[i]);
}
}
}