1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

ROUTE53: Support Route53's ALIAS record type (#239) (#301)

* Stable comparison of metadata (#239)

Iterating over a map in Go never produces twice the same ordering.
Thus when comparing two metadata map with more than one key, the
`differ` is always finding differences.

To properly compare records metadata, we need to iterate the maps
in a deterministic way.

Signed-off-by: Brice Figureau <brice@daysofwonder.com>

* Support for Route53 ALIAS record type (#239)

Route53 ALIAS doesn't behave like a regular ALIAS, and is much more
limited as its target can only be some specific AWS resources or
another record in the same zone.

According to #239, this change adds a new directive R53_ALIAS which
implements this specific alias. This record type can only be used
with the Route53 provider.

This directive usage looks like this:
```js
D("example.com", REGISTRAR, DnsProvider("ROUTE53"),
R53_ALIAS("foo1", "A", "bar") // record in same zone
R53_ALIAS("foo2", "A",
  "blahblah.elasticloadbalancing.us-west-1.amazonaws.com",
   R53_ZONE('Z368ELLRRE2KJ0')) // ELB in us-west-1

```

Unfortunately, Route53 requires indicating the hosted zone id
where the target is defined (those are listed in AWS documentation,
see the R53_ALIAS documentation for links).
This commit is contained in:
Brice Figureau
2018-01-16 11:53:12 +01:00
committed by Tom Limoncelli
parent 2fc55dfdc4
commit 7b8d608019
15 changed files with 455 additions and 104 deletions

View File

@@ -192,90 +192,93 @@ var _escData = map[string]*_escFile{
"/helpers.js": {
local: "pkg/js/helpers.js",
size: 17575,
size: 18525,
modtime: 0,
compressed: `
H4sIAAAAAAAC/+w7a3MjN47f/SuQqdu0etzTfkxmdkuOclH8yLniV8ma7GzpdC66m5I47teRbGm8iee3
X/HVTfZDdlKX7JedD4nFBkAQAEEABL2SYWCckoh7Rzs7a0QhyrMFjOCXHQAAipeEcYooG8JsHsixOGN3
Bc3XJMbOcJ4ikrUG7jKUYj36pKeI8QKVCR/TJYMRzOZHOzuLMos4yTMgGeEEJeSfeOBrJhyO+rjawlkn
d09HiskWK08WM1d4MzFzDcRCAuCPBQ4gxRwZ9sgCBmLUtzgUv2E0Au9yfPVhfOGpyZ7kf4UEKF6KFYGg
OYSa8tCiP5T/NYwKIYT1wsOiZKsBxUv/SCuKlzSTlFpLOMnYjZbKs4vIF2rWkWA+v/+EI+7B11+DR4q7
KM/WmDKSZ8wDkjn44p/4HbpwMIJFTlPE7zgfdHz3m4KJWfF7BONoXskmZsVzssnw5kTahRZLJV6/Mn+J
WS/RYqttjcP6z8ARyhB+ebLho5zGbdO9qS3XBtcWOp1eDGE/cDhhmK5blk6WWU5xfJege5y4Bm+vvaB5
hBk7QXTJBmmgN4hZ+N6e0BtgFK0gzWOyIJgGwkgIB8IAhWFYwWmKQ4hQkgiADeErTc8AIUrR49BMKkRQ
UkbWOHk0EMrWhGrpEstpMp5L6cWIo8pG70LCzvSMg9R3zG+g16BtCnDCcIU0Fhw0MMQSB8LqPklztj+J
f66IZp/mlZSOKrinrrmu5Voak92F+DPHWay5DMXSAkhdbi0PsqL5Bry/jydX51c/DvXMlTKUhykzVhZF
TjmOh+DBrsO+2c6NYQ+UzbcRNGNqn6jFPe3s7O3Bidof9fYYwjHFiGNAcHJ1qwmG8IFh4CsMBaIoxRxT
BogZeweUxYJ9FtZGeNK38aQrUCsebdmmis1KjQRGsH8EBL61/XqY4GzJV0dAdndthTjqteBnpKnop/Y0
h2oaRJdlijPeO4mAT2FUA87I/KibhbRzVmFTysVZx2lIshh/vl5Igfjw1WgEbw78lvWIr7ALntiyMY4S
RLFQARVaQhnkWYSdk8maxzhRm6E2GxJG8nBkTOX0bPzhYnoL2hszQMAwh3xhVFKLAngOqCiSR/lHksCi
5CXF5qwOBb1T4YGkY+F5TXxDkgSiBCMKKHuEguI1yUsGa5SUmIkJbSPTWFU80T7z+6zoWfXaZiaFYevZ
d3fRdHoxWPtDuMVc7pLp9EJOqvaQ2iUW2wrcOp6FZ7nllGTLwdrxLGsYyRguW07zk5Ii6RvXjhXpg8wQ
H1Abn4acJzCC9VHXQdFB2dqkKeLRCgs5rkP592Dvfwb/He/6gxlLV/Eme5z/p/8fe5oZsYwKYwRZmSRt
q10bk81yDkjolMQQ69k1O47ZlhnhMAKPea1ZZodzewINWX90wg8YCc/F8HnGK/wDo0Wx2FKGJmwIBwGk
Q3i/H8BqCG/f7++bYKScebE3hxGU4Qpew+E31fBGD8fwGv5ajWbW6Nv9avjRHn7/TnMAr0dQzsQa5k5g
s642XxUqOIZmNp4xODmmXLa1S2zcP8jqYmfrhHVk02t8KXrAx+PxWYKWA7m5G5FZbdBy+zhWrTZUhNAi
QUv4daS8gz3N3h4cj8d3x5Pz6fnx+EKcaoSTCCViGASaTFdsGGk9NU8H8O23sO8fKfFbcfYrE41eoRS/
CmDfFxAZO87LTHrDfUgxyhjEeeZxEGlYTvXJhpVXsyK80EYW28JQ10QEOkoSW52tmF+jdwT8hrCM+css
xguS4dizhVmBwJuD36JhK6qdCTaEWWtaDUWMFZukCLTmLnWkw8Iw9KUexjDS334oSSJW5o09LfvxePwS
CuNxF5HxuKZzcT6+VYQ4okvMtxAToB3UxLAhd2y44mgZSPvrp3fcxdvxeOwFdVA+vT65HvCEpP4Qzjmw
VV4mMdxjQBlgSnMq9CrnMQ50X9jVweHfVLwuAo0hzGaeYMoLoN7d8wBmHkfL9qAk5w7rlIJTlDGR3w2b
GzGQMwVVuMo6dqaMTmRkxKyY0926HC0NCEfLFoRSkYGw97di0Ex/Vab3mHZw6fiUttdgTbcR7DwZzV6N
L09fZigStEO1YtgYys108jJiN9NJm9TNdGII3U5+VoQKSnJK+GOwwWS54oFIE56lfjv5uU39dvJzZYPa
gCp5dVqS9dVwoSGUIhwIxV7/d8F3/1e1oK75/xwbZXRtlmjgzO8uWLVYA6l+ddLMaQUl/n7G8tWvlo0q
x18ytMQBMJzgiOc0UOEPyZaqohJhysmCRIhjaQLTi9sOPyRGf7cRSA76dWg464ewOf6NtiC8prMWyDAW
2Si8UvCvqij/TzQbnjAkpWKg5I9OMCMdA2l+dwLbgjII9tjvsKO6Mqtlek1VLeVzIxazIsXPPvz6K9Rl
l89Vfjj9OH2Zn5t+nHZY4cdp0wj7jzJtDA22/+izS7hgrlJsrONjBnxDIjy0YQCM6AmToAtCGdcITcDP
3BDSwCSLyZrEJUrMFKGLc3U9PR3C+UJAUwyIYivvP9BIQRVGMhNJ5FnyCCiKMGO9TATAVyUDwiHOMRPR
a4q4CFo3K8RhI1YtpiKZWWKDt//KN3iNaQD3jxKUZMuWBBTfgawDpoJLzOAeRQ8bROMGZ1GeFoiTe5II
H7xZ4UxSS3A2kFVHX2SaB7L6NCAZx5lQNUqSRx/uKUYPDXL3NH/AmSUZjGjyKFajBM/xUmeiHDNuyb2R
LFn7yW8WFp/de03A2gBGMLOgrVJSq4D4zESz/fnzc3Uy9tQ8Zi4/NiKO5/b25cf21r78+AfGGP/qKCH9
XFC8wBRnEX42TPgNLjla4ehhTJdsIP9ihtkYs8hO9FBdBoVvFZb53a6/COTeuqcujDkkWlUxMeVXCmRG
5nL2GZm3tkE9naz4vKkOYvBgF4hdBopySnHEZU3ba5miPluuXpi4XXVkbVdVyiai8tvTyc+nTkDuWzdq
DQDQED2ViUZKbGf1smLYuOuStIb6//Dkd5ZF6ju1ynDvOLpPsHV/MxVczGZJvpH1qhVZroZwGECGNz8g
hofwVpyT8vM35vM7+fn8Zgjv53NDSF7EvDqAL3AIX+AtfDmCb+ALvIMvAF/g/auqPJaQDD9XUW3wu61s
TgoYNeGd6rkAkuzCCEgRyj+PHCOUQ02zc2+EFEgTRtY8NOm7MEWFggtqtZIuFPu2sUwP45wPiH/UAnvy
w085yQZe4DW+dnpxmxlDVrHdQN5p/6VlJDReSUn8aMlJDD4rKQnUIys9RSUt8ftfKi/NkCUxyf7LZCY8
0whmFVdFmOQbPwBrQGwZv9pPeudY5im3g76nzzd6BfAFPL+rSKqgNdAReFXEfP7j1fVEVRosJ2SPdjse
aHoe92LYubtxKnHnlzfXk+nddDK+uj27nlwqH5PIoEftwuqiSrrTJnzbuTYh2jF8awpPBvFqGvU354l7
wP9/Ht3e994z57BipX2yY440+7WXktX72kerc7y5Qr89obyFUdA8aWXzNx8mP54OLBtQA5WW4/AnjIsP
2UOWbzLBAEoYNkq9ur5r4VdjvSQ4LTWF16934DV8H+OC4ghxHO/A672a1BLz6pwdKKkzjih3roryuPd0
kMDVnVtvYCGvj809m3PFZm0AAWQzPZHSVRfm98ok5VrkLTX8oqLdJ/Xdgu2CyQvOQjn1fLY/h7GJV4QV
2fBGLiMX5WAO14VKP9S1FuI53YZX2RWYnof6ztS5RjW3h/DaiGqKHjD0bAQfELPuNmGcPdabRF2u3mOL
lpiQ4Bju8UIlkYRVey206tBpyRFXme+SrHFms9UrGrEYYzsdy6z54rmkrGi65uf6G1XXEtSN7Yi/5dmk
r5zY4JcnBRFY1vWyioLwO3XE/Pucj46sFKQS+AqtsbVYlFCM4kcj+iamoG0UBSjT3TNyT1nNF/ompyvN
609Z7INfedqtuWyXwzSHpI33wnP7xamxdXBb+nCsqUMnvdroilUr4D535DR55DGMahQZqLYA2x1Meez3
BUZpHptrzY6QqLvjaAu5vT1QjXe8tlq5qXS634kkr9Lz2HJEX39t1fWcT70z68VYRJyuQIfGUSeFp87R
qqPKOoulivvl1c2g7rU6nUyuJ0Mwx5/TauV1kOy3RxW0agNoJoTNPEf2HMS6G+WXJze/qT2CbpS1NdNs
T4Fv6+OmI703NCu0C8LEHqtwWkuUsXwdwnOcPhPFC5BWZUlJo01cx/TQDOqVOuR5vNvC8ozXpPh/S0Ix
a7WxGYdvi6GTUH2CDrpouGLqIOCHcJ0lj7AVeRsDG0wxsFK5eK9ZjhMCtUsdO85OThLh8KtpdrY5sqY0
Oh2ZtowTcWYQeapaluHk3QZa3TP39bZZRlrTNNL4Dg66LEmciWVWx0aCgJFPpzP9yqE+O5jrLhF/607v
Ma2WiXlbgNyJ9+db6VWFLb0yWcNBJGlpfZtfkQ2Dla+YNRkQOYd1Vd1vM5VL6baZDmN5SSecfd3e3wvX
4GprrazulZfKGHWo1OoMb31rN15XWDwZOu1HLshT4+Buh6kd4cRRG6U61CrwWnsuqtuFG+qGWdPi3xEB
aLmpb5ZknUz+mZQNxbHKdgaxeRBglyAlh8yqJ5IF1DdWmQwMA0CMlSkGUghyFDMWVkEG0fc+jViyI4xs
xY1OyGg/mogcK+jSfleDvltTtcb77cAU552We9eitLC7O+VjHJEYwz1iOAaRzghWDfybKs0xPfNM9czX
6Y1I0MQv52paol539skLWKdXXsKatpfzM7j8WFNWKpN6NOvcsYI91tki78bFz54kqQqGu4+ELU38dTM/
xVF30rC1y/53R7ty8b1x7gui3LQvvt0a3bYjWzuqbTwS+I1gvTFvlGcsT3CY5MtB51rqZweXve8NvKD7
hNWvDrq/eoPbB1IUJFt+5XstiGdqs0873f7RfeZDcWSKXqSA+q1RdcowWNA8hRXnxXBvj3EUPeRrTBdJ
vgmjPN1De3872H/312/29w4OD96/3xeU1gQZhE9ojVhEScFDdJ+XXOIk5J4i+rh3n5BC21244qlVr70Z
xLlTDhMnWpzzkBUJ4QMvNFHw3h4UFHNOMH2jSrb26gby324825/78BoO3733YRfEwMHcb4wctkbezv3G
CyhTHC9T+74wK1PZDVo1g7qVU8mJ5zWfKVi334JeB05Wpq0HX8rvw18Enx2VwbfC53wnXc+bN05LquAR
LhFfhYskz6lkek+utjYjhzrsghd6sAtxR9UwrjqCk7yMFwmiGFBCEMNsqG65MZdPGbi8Gxc8Wl0YxiRV
v9/Z3c3k+uM/7q7PzmTHeFSRvCto/vlxCF6+WHjwdCS0fSOGICYM3Sc4bpK46qWQuQRw1oV/9uHioo/C
okwSh8buBJFkWWY1LfEF0zfm8ZEtguFOzbtuMM8XC3UYZpxU7zhgYPWg+0OXPf02o1dSdxqvlljHrFl7
0r5prp6dRUpVGcKH2+n1ZQA3k+ufz09OJ3B7c3p8fnZ+DJPT4+vJCUz/cXN6a22mOx3dY2lCZ4L+BMeE
ilPKaTSVmYvdWN/KWUxgrEr4LWOVCNUjIC/wfLld3xxII9ZLn5yenE9OjzvaqKyPW5ouWF7SSNZB+9fl
dFnEmHGSyezmRVh/7gWOWo7wAYHwAepSp+bYvW7RIpyeXt5sl6MD8W9h9grzw+SiLb8Pkwtx6unvb/cP
OkHe7h8YqLNJZye1HK4aoG/O7n74cH4hdixHD5jV9XHpsgpEORvCVL1T5Axy2SUn8EyIPOA53GP4lIuj
T4XmHni+dIfy9lShn1zdqp/Vq5qCkhTRR4tWCIPauXzvyVcgFG2G8HfZmDfYrEi0UlR8FZ7mVFb0ywwl
HFMcg4lfLD6ND5YcyQBCccRxWiSIY/WuLI6JvmwyTzDVuiL5djO2ObtjxeIvsWJvkSDOcTaEMSSEqad7
6kWextcA4nyonZ8l9g5npxyWkvevv4L1sy5dHrZbkTxbmVXBD3FIMGIcDgEnWFYYWrGInlEL1i64VsO2
obcQKdq00SjaCKQ7ijasWFSoyjOrAq3svFnhSnKW5JXvVklxoUq9BlocrNa9jbADLA82mdeJQ3T6cVrf
ponpJAum5KNFqbsHPL8iXFuRazYm0jxfGG2SbCkSQiFkzDiOA1jiDFP1yLee3UpU0aZB1IhQsaTpikTK
GahLgPvOa9wKYdSA72j9oCr2n36cDirNBFomdXeFtUgT4IslsgJHwgPGgY5z1A4Si2iuwaC5jErwik0D
05z1x+3ic1WuldpclrRTs7AACr9xp0BN0HorWUJw8tP5pWmhrV7rf3f47hu4f+TYeXr90/nlANHqIWi0
KrOHW/JP4f8P372rHz1Oeju6AkikuhClTq0wwZn4Y3dUE62r/xNTG6QhS0iEBySQrX41qJvOTcQS/y8A
AP//rK/L5adEAAA=
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
BLLUrwJ1j3MjweL/BgAA//+VzTYAXUgAAA==
`,
},