mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-06 02:34:03 +00:00
Merge pull request #26049 from quinton-hoole/2016-05-22-aws-route53-dnsprovider
Automatic merge from submit-queue AWS Route53 dnsprovider Still needs unit tests, and some other cleanup. Review not urgent, but feel free to make a first pass. Only need to look at the last two commits. The prior commits will go in as #26020. This will need to be rebased against #26020 once that merges. It's a bare minimum implementation, only what's required for Ubernetes Federated Services (managing basic A and CNAME records). More functionality (health checks, geolocation etc) can be fairly easily added as required. It also requires github.com/aws/aws-sdk-go/service/route53 to be vendored into godeps, which I haven't managed to do successfully yet (Oh Godep!) cc: @justinsb FYI
This commit is contained in:
commit
642049652b
10
Godeps/Godeps.json
generated
10
Godeps/Godeps.json
generated
@ -164,6 +164,11 @@
|
|||||||
"Comment": "v1.0.8",
|
"Comment": "v1.0.8",
|
||||||
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
|
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/restxml",
|
||||||
|
"Comment": "v1.0.8",
|
||||||
|
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil",
|
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil",
|
||||||
"Comment": "v1.0.8",
|
"Comment": "v1.0.8",
|
||||||
@ -199,6 +204,11 @@
|
|||||||
"Comment": "v1.0.8",
|
"Comment": "v1.0.8",
|
||||||
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
|
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/aws/aws-sdk-go/service/route53",
|
||||||
|
"Comment": "v1.0.8",
|
||||||
|
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/beorn7/perks/quantile",
|
"ImportPath": "github.com/beorn7/perks/quantile",
|
||||||
"Rev": "3ac7bf7a47d159a033b107610db8a1b6575507a4"
|
"Rev": "3ac7bf7a47d159a033b107610db8a1b6575507a4"
|
||||||
|
420
Godeps/LICENSES
generated
420
Godeps/LICENSES
generated
@ -5774,6 +5774,216 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
= vendor/github.com/aws/aws-sdk-go/private/protocol/restxml licensed under: =
|
||||||
|
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
= vendor/github.com/aws/aws-sdk-go/LICENSE.txt 3b83ef96387f14655fc854ddc3c6bd57 -
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
= vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil licensed under: =
|
= vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil licensed under: =
|
||||||
|
|
||||||
@ -7244,6 +7454,216 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
= vendor/github.com/aws/aws-sdk-go/service/route53 licensed under: =
|
||||||
|
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
= vendor/github.com/aws/aws-sdk-go/LICENSE.txt 3b83ef96387f14655fc854ddc3c6bd57 -
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
= vendor/github.com/beorn7/perks/quantile licensed under: =
|
= vendor/github.com/beorn7/perks/quantile licensed under: =
|
||||||
|
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53/testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile time check for interface adeherence
|
||||||
|
var _ dnsprovider.Interface = Interface{}
|
||||||
|
|
||||||
|
type Interface struct {
|
||||||
|
service testing.Route53API
|
||||||
|
}
|
||||||
|
|
||||||
|
// newInterfaceWithStub facilitates stubbing out the underlying AWS Route53
|
||||||
|
// library for testing purposes. It returns an provider-independent interface.
|
||||||
|
func newInterfaceWithStub(service testing.Route53API) *Interface {
|
||||||
|
return &Interface{service}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i Interface) Zones() (zones dnsprovider.Zones, supported bool) {
|
||||||
|
return Zones{&i}, true
|
||||||
|
}
|
44
federation/pkg/dnsprovider/providers/aws/route53/route53.go
Normal file
44
federation/pkg/dnsprovider/providers/aws/route53/route53.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// route53 is the implementation of pkg/dnsprovider interface for AWS Route53
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ProviderName = "aws-route53"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
dnsprovider.RegisterDnsProvider(ProviderName, func(config io.Reader) (dnsprovider.Interface, error) {
|
||||||
|
return newRoute53(config)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// newRoute53 creates a new instance of an AWS Route53 DNS Interface.
|
||||||
|
func newRoute53(config io.Reader) (*Interface, error) {
|
||||||
|
// Connect to AWS Route53 - TODO: Do more sophisticated auth
|
||||||
|
svc := route53.New(session.New())
|
||||||
|
return newInterfaceWithStub(svc), nil
|
||||||
|
}
|
236
federation/pkg/dnsprovider/providers/aws/route53/route53_test.go
Normal file
236
federation/pkg/dnsprovider/providers/aws/route53/route53_test.go
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
route53testing "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53/testing"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
)
|
||||||
|
|
||||||
|
func newTestInterface() (dnsprovider.Interface, error) {
|
||||||
|
// Use this to test the real cloud service.
|
||||||
|
// i, err := dnsprovider.GetDnsProvider(ProviderName, strings.NewReader("\n[global]\nproject-id = federation0-cluster00"))
|
||||||
|
return newFakeInterface() // Use this to stub out the entire cloud service
|
||||||
|
}
|
||||||
|
|
||||||
|
func newFakeInterface() (dnsprovider.Interface, error) {
|
||||||
|
var service route53testing.Route53API
|
||||||
|
service = route53testing.NewRoute53APIStub()
|
||||||
|
iface := newInterfaceWithStub(service)
|
||||||
|
// Add a fake zone to test against.
|
||||||
|
params := &route53.CreateHostedZoneInput{
|
||||||
|
CallerReference: aws.String("Nonce"), // Required
|
||||||
|
Name: aws.String("example.com"), // Required
|
||||||
|
}
|
||||||
|
_, err := iface.service.CreateHostedZone(params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return iface, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var interface_ dnsprovider.Interface
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
fmt.Printf("Parsing flags.\n")
|
||||||
|
flag.Parse()
|
||||||
|
var err error
|
||||||
|
fmt.Printf("Getting new test interface.\n")
|
||||||
|
interface_, err = newTestInterface()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error creating interface: %v", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Printf("Running tests...\n")
|
||||||
|
os.Exit(m.Run())
|
||||||
|
}
|
||||||
|
|
||||||
|
// firstZone returns the first zone for the configured dns provider account/project,
|
||||||
|
// or fails if it can't be found
|
||||||
|
func firstZone(t *testing.T) dnsprovider.Zone {
|
||||||
|
t.Logf("Getting zones")
|
||||||
|
z, supported := interface_.Zones()
|
||||||
|
if supported {
|
||||||
|
t.Logf("Got zones %v\n", z)
|
||||||
|
} else {
|
||||||
|
t.Fatalf("Zones interface not supported by interface %v", interface_)
|
||||||
|
}
|
||||||
|
zones, err := z.List()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to list zones: %v", err)
|
||||||
|
} else {
|
||||||
|
t.Logf("Got zone list: %v\n", zones)
|
||||||
|
}
|
||||||
|
if len(zones) < 1 {
|
||||||
|
t.Fatalf("Zone listing returned %d, expected >= %d", len(zones), 1)
|
||||||
|
} else {
|
||||||
|
t.Logf("Got at least 1 zone in list:%v\n", zones[0])
|
||||||
|
}
|
||||||
|
return zones[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
/* rrs returns the ResourceRecordSets interface for a given zone */
|
||||||
|
func rrs(t *testing.T, zone dnsprovider.Zone) (r dnsprovider.ResourceRecordSets) {
|
||||||
|
rrsets, supported := zone.ResourceRecordSets()
|
||||||
|
if !supported {
|
||||||
|
t.Fatalf("ResourceRecordSets interface not supported by zone %v", zone)
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
return rrsets
|
||||||
|
}
|
||||||
|
|
||||||
|
func listRrsOrFail(t *testing.T, rrsets dnsprovider.ResourceRecordSets) []dnsprovider.ResourceRecordSet {
|
||||||
|
rrset, err := rrsets.List()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to list recordsets: %v", err)
|
||||||
|
} else {
|
||||||
|
if len(rrset) < 0 {
|
||||||
|
t.Fatalf("Record set length=%d, expected >=0", len(rrset))
|
||||||
|
} else {
|
||||||
|
t.Logf("Got %d recordsets: %v", len(rrset), rrset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rrset
|
||||||
|
}
|
||||||
|
|
||||||
|
func getExampleRrs(zone dnsprovider.Zone) dnsprovider.ResourceRecordSet {
|
||||||
|
rrsets, _ := zone.ResourceRecordSets()
|
||||||
|
return rrsets.New("www11."+zone.Name(), []string{"10.10.10.10", "169.20.20.20"}, 180, rrstype.A)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getInvalidRrs(zone dnsprovider.Zone) dnsprovider.ResourceRecordSet {
|
||||||
|
rrsets, _ := zone.ResourceRecordSets()
|
||||||
|
return rrsets.New("www12."+zone.Name(), []string{"rubbish", "rubbish"}, 180, rrstype.A)
|
||||||
|
}
|
||||||
|
|
||||||
|
func addRrsetOrFail(t *testing.T, rrsets dnsprovider.ResourceRecordSets, rrset dnsprovider.ResourceRecordSet) dnsprovider.ResourceRecordSet {
|
||||||
|
result, err := rrsets.Add(rrset)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to add recordsets: %v", err)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsList verifies that listing of zones succeeds */
|
||||||
|
func TestZonesList(t *testing.T) {
|
||||||
|
firstZone(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsList verifies that listing of RRS's succeeds */
|
||||||
|
func TestResourceRecordSetsList(t *testing.T) {
|
||||||
|
listRrsOrFail(t, rrs(t, firstZone(t)))
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsAddSuccess verifies that addition of a valid RRS succeeds */
|
||||||
|
func TestResourceRecordSetsAddSuccess(t *testing.T) {
|
||||||
|
zone := firstZone(t)
|
||||||
|
sets := rrs(t, zone)
|
||||||
|
set := addRrsetOrFail(t, sets, getExampleRrs(zone))
|
||||||
|
defer sets.Remove(set)
|
||||||
|
t.Logf("Successfully added resource record set: %v", set)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsAdditionVisible verifies that added RRS is visible after addition */
|
||||||
|
func TestResourceRecordSetsAdditionVisible(t *testing.T) {
|
||||||
|
zone := firstZone(t)
|
||||||
|
sets := rrs(t, zone)
|
||||||
|
rrset := getExampleRrs(zone)
|
||||||
|
set := addRrsetOrFail(t, sets, rrset)
|
||||||
|
defer sets.Remove(set)
|
||||||
|
t.Logf("Successfully added resource record set: %v", set)
|
||||||
|
found := false
|
||||||
|
for _, record := range listRrsOrFail(t, sets) {
|
||||||
|
if record.Name() == rrset.Name() {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
t.Errorf("Failed to find added resource record set %s", rrset.Name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsAddDuplicateFail verifies that addition of a duplicate RRS fails */
|
||||||
|
func TestResourceRecordSetsAddDuplicateFail(t *testing.T) {
|
||||||
|
zone := firstZone(t)
|
||||||
|
sets := rrs(t, zone)
|
||||||
|
rrset := getExampleRrs(zone)
|
||||||
|
set := addRrsetOrFail(t, sets, rrset)
|
||||||
|
defer sets.Remove(set)
|
||||||
|
t.Logf("Successfully added resource record set: %v", set)
|
||||||
|
// Try to add it again, and verify that the call fails.
|
||||||
|
rrs, err := sets.Add(rrset)
|
||||||
|
if err == nil {
|
||||||
|
defer sets.Remove(rrs)
|
||||||
|
t.Errorf("Should have failed to add duplicate resource record %v, but succeeded instead.", set)
|
||||||
|
} else {
|
||||||
|
t.Logf("Correctly failed to add duplicate resource record %v: %v", set, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsRemove verifies that the removal of an existing RRS succeeds */
|
||||||
|
func TestResourceRecordSetsRemove(t *testing.T) {
|
||||||
|
zone := firstZone(t)
|
||||||
|
sets := rrs(t, zone)
|
||||||
|
rrset := getExampleRrs(zone)
|
||||||
|
set := addRrsetOrFail(t, sets, rrset)
|
||||||
|
err := sets.Remove(set)
|
||||||
|
if err != nil {
|
||||||
|
// Try again to clean up.
|
||||||
|
defer sets.Remove(rrset)
|
||||||
|
t.Errorf("Failed to remove resource record set %v after adding", rrset)
|
||||||
|
} else {
|
||||||
|
t.Logf("Successfully removed resource set %v after adding", set)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TestResourceRecordSetsRemoveGone verifies that a removed RRS no longer exists */
|
||||||
|
func TestResourceRecordSetsRemoveGone(t *testing.T) {
|
||||||
|
zone := firstZone(t)
|
||||||
|
sets := rrs(t, zone)
|
||||||
|
rrset := getExampleRrs(zone)
|
||||||
|
set := addRrsetOrFail(t, sets, rrset)
|
||||||
|
err := sets.Remove(set)
|
||||||
|
if err != nil {
|
||||||
|
// Try again to clean up.
|
||||||
|
defer sets.Remove(rrset)
|
||||||
|
t.Errorf("Failed to remove resource record set %v after adding", rrset)
|
||||||
|
} else {
|
||||||
|
t.Logf("Successfully removed resource set %v after adding", set)
|
||||||
|
}
|
||||||
|
// Check that it's gone
|
||||||
|
list := listRrsOrFail(t, sets)
|
||||||
|
found := false
|
||||||
|
for _, set := range list {
|
||||||
|
if set.Name() == rrset.Name() {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
t.Errorf("Deleted resource record set %v is still present", rrset)
|
||||||
|
}
|
||||||
|
}
|
53
federation/pkg/dnsprovider/providers/aws/route53/rrset.go
Normal file
53
federation/pkg/dnsprovider/providers/aws/route53/rrset.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile time check for interface adeherence
|
||||||
|
var _ dnsprovider.ResourceRecordSet = ResourceRecordSet{}
|
||||||
|
|
||||||
|
type ResourceRecordSet struct {
|
||||||
|
impl *route53.ResourceRecordSet
|
||||||
|
rrsets *ResourceRecordSets
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrset ResourceRecordSet) Name() string {
|
||||||
|
return *rrset.impl.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrset ResourceRecordSet) Rrdatas() []string {
|
||||||
|
// Sigh - need to unpack the strings out of the route53 ResourceRecords
|
||||||
|
result := make([]string, len(rrset.impl.ResourceRecords))
|
||||||
|
for i, record := range rrset.impl.ResourceRecords {
|
||||||
|
result[i] = *record.Value
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrset ResourceRecordSet) Ttl() int64 {
|
||||||
|
return *rrset.impl.TTL
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrset ResourceRecordSet) Type() rrstype.RrsType {
|
||||||
|
return rrstype.RrsType(*rrset.impl.Type)
|
||||||
|
}
|
136
federation/pkg/dnsprovider/providers/aws/route53/rrsets.go
Normal file
136
federation/pkg/dnsprovider/providers/aws/route53/rrsets.go
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider/rrstype"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile time check for interface adeherence
|
||||||
|
var _ dnsprovider.ResourceRecordSets = ResourceRecordSets{}
|
||||||
|
|
||||||
|
type ResourceRecordSets struct {
|
||||||
|
zone *Zone
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrsets ResourceRecordSets) List() ([]dnsprovider.ResourceRecordSet, error) {
|
||||||
|
input := route53.ListResourceRecordSetsInput{
|
||||||
|
HostedZoneId: rrsets.zone.impl.Id,
|
||||||
|
}
|
||||||
|
response, err := rrsets.zone.zones.interface_.service.ListResourceRecordSets(&input)
|
||||||
|
// TODO: Handle truncated responses
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
list := make([]dnsprovider.ResourceRecordSet, len(response.ResourceRecordSets))
|
||||||
|
for i, rrset := range response.ResourceRecordSets {
|
||||||
|
list[i] = &ResourceRecordSet{rrset, &rrsets}
|
||||||
|
}
|
||||||
|
return list, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrsets ResourceRecordSets) Add(rrset dnsprovider.ResourceRecordSet) (dnsprovider.ResourceRecordSet, error) {
|
||||||
|
service := rrsets.zone.zones.interface_.service
|
||||||
|
input := getChangeResourceRecordSetsInput("CREATE", rrset.Name(), string(rrset.Type()), *rrset.(ResourceRecordSet).rrsets.zone.impl.Id, rrset.Rrdatas(), rrset.Ttl())
|
||||||
|
_, err := service.ChangeResourceRecordSets(input)
|
||||||
|
if err != nil {
|
||||||
|
// Cast err to awserr.Error to get the Code and
|
||||||
|
// Message from an error.
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ResourceRecordSet{input.ChangeBatch.Changes[0].ResourceRecordSet, &rrsets}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrsets ResourceRecordSets) Remove(rrset dnsprovider.ResourceRecordSet) error {
|
||||||
|
input := getChangeResourceRecordSetsInput("DELETE", rrset.Name(), string(rrset.Type()), *rrset.(ResourceRecordSet).rrsets.zone.impl.Id, rrset.Rrdatas(), rrset.Ttl())
|
||||||
|
_, err := rrsets.zone.zones.interface_.service.ChangeResourceRecordSets(input)
|
||||||
|
if err != nil {
|
||||||
|
// Cast err to awserr.Error to get the Code and
|
||||||
|
// Message from an error.
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getChangeResourceRecordSetsInput(action, name, type_, hostedZoneId string, rrdatas []string, ttl int64) *route53.ChangeResourceRecordSetsInput {
|
||||||
|
input := &route53.ChangeResourceRecordSetsInput{
|
||||||
|
ChangeBatch: &route53.ChangeBatch{ // Required
|
||||||
|
Changes: []*route53.Change{ // Required
|
||||||
|
{ // Required
|
||||||
|
Action: aws.String(action), // Required
|
||||||
|
ResourceRecordSet: &route53.ResourceRecordSet{ // Required
|
||||||
|
Name: aws.String(name), // Required
|
||||||
|
Type: aws.String(type_), // Required
|
||||||
|
/*
|
||||||
|
AliasTarget: &route53.AliasTarget{
|
||||||
|
DNSName: aws.String("DNSName"), // Required
|
||||||
|
EvaluateTargetHealth: aws.Bool(true), // Required
|
||||||
|
HostedZoneId: aws.String("ResourceId"), // Required
|
||||||
|
},
|
||||||
|
Failover: aws.String("ResourceRecordSetFailover"),
|
||||||
|
GeoLocation: &route53.GeoLocation{
|
||||||
|
ContinentCode: aws.String("GeoLocationContinentCode"),
|
||||||
|
CountryCode: aws.String("GeoLocationCountryCode"),
|
||||||
|
SubdivisionCode: aws.String("GeoLocationSubdivisionCode"),
|
||||||
|
},
|
||||||
|
HealthCheckId: aws.String("HealthCheckId"),
|
||||||
|
Region: aws.String("ResourceRecordSetRegion"),
|
||||||
|
*/
|
||||||
|
ResourceRecords: []*route53.ResourceRecord{
|
||||||
|
{ // Required
|
||||||
|
Value: aws.String(rrdatas[0]), // Required
|
||||||
|
},
|
||||||
|
// More values...
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
SetIdentifier: aws.String("ResourceRecordSetIdentifier"),
|
||||||
|
|
||||||
|
*/
|
||||||
|
TTL: aws.Int64(ttl),
|
||||||
|
/*
|
||||||
|
TrafficPolicyInstanceId: aws.String("TrafficPolicyInstanceId"),
|
||||||
|
Weight: aws.Int64(1),
|
||||||
|
*/
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// More values...
|
||||||
|
},
|
||||||
|
},
|
||||||
|
HostedZoneId: aws.String(hostedZoneId), // Required
|
||||||
|
}
|
||||||
|
return input
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rrsets ResourceRecordSets) New(name string, rrdatas []string, ttl int64, rrstype rrstype.RrsType) dnsprovider.ResourceRecordSet {
|
||||||
|
rrstypeStr := string(rrstype)
|
||||||
|
return ResourceRecordSet{
|
||||||
|
&route53.ResourceRecordSet{
|
||||||
|
Name: &name,
|
||||||
|
Type: &rrstypeStr,
|
||||||
|
TTL: &ttl,
|
||||||
|
ResourceRecords: []*route53.ResourceRecord{
|
||||||
|
{
|
||||||
|
Value: &rrdatas[0],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, // TODO: Add remaining rrdatas
|
||||||
|
&rrsets,
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* internal implements a stub for the AWS Route53 API, used primarily for unit testing purposes */
|
||||||
|
package testing
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile time check for interface conformance
|
||||||
|
var _ Route53API = &Route53APIStub{}
|
||||||
|
|
||||||
|
/* Route53API is the subset of the AWS Route53 API that we actually use. Add methods as required. Signatures must match exactly. */
|
||||||
|
type Route53API interface {
|
||||||
|
ListResourceRecordSets(*route53.ListResourceRecordSetsInput) (*route53.ListResourceRecordSetsOutput, error)
|
||||||
|
ChangeResourceRecordSets(*route53.ChangeResourceRecordSetsInput) (*route53.ChangeResourceRecordSetsOutput, error)
|
||||||
|
ListHostedZones(*route53.ListHostedZonesInput) (*route53.ListHostedZonesOutput, error)
|
||||||
|
CreateHostedZone(*route53.CreateHostedZoneInput) (*route53.CreateHostedZoneOutput, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Route53APIStub is a minimal implementation of Route53API, used primarily for unit testing.
|
||||||
|
// See http://http://docs.aws.amazon.com/sdk-for-go/api/service/route53.html for descriptions
|
||||||
|
// of all of it's methods.
|
||||||
|
type Route53APIStub struct {
|
||||||
|
zones map[string]*route53.HostedZone
|
||||||
|
recordSets map[string]map[string][]*route53.ResourceRecordSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRoute53APIStub returns an initlialized Route53APIStub
|
||||||
|
func NewRoute53APIStub() *Route53APIStub {
|
||||||
|
return &Route53APIStub{
|
||||||
|
zones: make(map[string]*route53.HostedZone),
|
||||||
|
recordSets: make(map[string]map[string][]*route53.ResourceRecordSet),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Route53APIStub) ListResourceRecordSets(input *route53.ListResourceRecordSetsInput) (*route53.ListResourceRecordSetsOutput, error) {
|
||||||
|
output := route53.ListResourceRecordSetsOutput{} // TODO: Support optional input args.
|
||||||
|
if len(r.recordSets) <= 0 {
|
||||||
|
output.ResourceRecordSets = []*route53.ResourceRecordSet{}
|
||||||
|
} else if _, ok := r.recordSets[*input.HostedZoneId]; !ok {
|
||||||
|
output.ResourceRecordSets = []*route53.ResourceRecordSet{}
|
||||||
|
} else {
|
||||||
|
for _, rrsets := range r.recordSets[*input.HostedZoneId] {
|
||||||
|
for _, rrset := range rrsets {
|
||||||
|
output.ResourceRecordSets = append(output.ResourceRecordSets, rrset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &output, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Route53APIStub) ChangeResourceRecordSets(input *route53.ChangeResourceRecordSetsInput) (*route53.ChangeResourceRecordSetsOutput, error) {
|
||||||
|
output := &route53.ChangeResourceRecordSetsOutput{}
|
||||||
|
recordSets, ok := r.recordSets[*input.HostedZoneId]
|
||||||
|
if !ok {
|
||||||
|
recordSets = make(map[string][]*route53.ResourceRecordSet)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, change := range input.ChangeBatch.Changes {
|
||||||
|
switch *change.Action {
|
||||||
|
case route53.ChangeActionCreate:
|
||||||
|
if _, found := recordSets[*change.ResourceRecordSet.Name]; found {
|
||||||
|
return nil, fmt.Errorf("Attempt to create duplicate rrset %s", change.ResourceRecordSet.Name) // TODO: Return AWS errors with codes etc
|
||||||
|
}
|
||||||
|
recordSets[*change.ResourceRecordSet.Name] = append(recordSets[*change.ResourceRecordSet.Name], change.ResourceRecordSet)
|
||||||
|
case route53.ChangeActionDelete:
|
||||||
|
if _, found := recordSets[*change.ResourceRecordSet.Name]; !found {
|
||||||
|
return nil, fmt.Errorf("Attempt to delete non-existant rrset %s", change.ResourceRecordSet.Name) // TODO: Check other fields too
|
||||||
|
}
|
||||||
|
delete(recordSets, *change.ResourceRecordSet.Name)
|
||||||
|
case route53.ChangeActionUpsert:
|
||||||
|
// TODO - not used yet
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.recordSets[*input.HostedZoneId] = recordSets
|
||||||
|
return output, nil // TODO: We should ideally return status etc, but we dont' use that yet.
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Route53APIStub) ListHostedZones(*route53.ListHostedZonesInput) (*route53.ListHostedZonesOutput, error) {
|
||||||
|
output := &route53.ListHostedZonesOutput{}
|
||||||
|
for _, zone := range r.zones {
|
||||||
|
output.HostedZones = append(output.HostedZones, zone)
|
||||||
|
}
|
||||||
|
return output, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Route53APIStub) CreateHostedZone(input *route53.CreateHostedZoneInput) (*route53.CreateHostedZoneOutput, error) {
|
||||||
|
if _, ok := r.zones[*input.Name]; ok {
|
||||||
|
return nil, fmt.Errorf("Error creating hosted DNS zone: %s already exists", input.Name)
|
||||||
|
}
|
||||||
|
r.zones[*input.Name] = &route53.HostedZone{
|
||||||
|
Id: input.Name,
|
||||||
|
Name: input.Name,
|
||||||
|
}
|
||||||
|
return &route53.CreateHostedZoneOutput{HostedZone: r.zones[*input.Name]}, nil
|
||||||
|
}
|
38
federation/pkg/dnsprovider/providers/aws/route53/zone.go
Normal file
38
federation/pkg/dnsprovider/providers/aws/route53/zone.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile time check for interface adeherence
|
||||||
|
var _ dnsprovider.Zone = &Zone{}
|
||||||
|
|
||||||
|
type Zone struct {
|
||||||
|
impl *route53.HostedZone
|
||||||
|
zones *Zones
|
||||||
|
}
|
||||||
|
|
||||||
|
func (zone *Zone) Name() string {
|
||||||
|
return *zone.impl.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (zone *Zone) ResourceRecordSets() (dnsprovider.ResourceRecordSets, bool) {
|
||||||
|
return &ResourceRecordSets{zone}, true
|
||||||
|
}
|
45
federation/pkg/dnsprovider/providers/aws/route53/zones.go
Normal file
45
federation/pkg/dnsprovider/providers/aws/route53/zones.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 The Kubernetes Authors 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/service/route53"
|
||||||
|
"k8s.io/kubernetes/federation/pkg/dnsprovider"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile time check for interface adeherence
|
||||||
|
var _ dnsprovider.Zones = Zones{}
|
||||||
|
|
||||||
|
type Zones struct {
|
||||||
|
interface_ *Interface
|
||||||
|
}
|
||||||
|
|
||||||
|
func (zones Zones) List() ([]dnsprovider.Zone, error) {
|
||||||
|
input := route53.ListHostedZonesInput{}
|
||||||
|
response, err := zones.interface_.service.ListHostedZones(&input)
|
||||||
|
if err != nil {
|
||||||
|
return []dnsprovider.Zone{}, err
|
||||||
|
}
|
||||||
|
hostedZones := response.HostedZones
|
||||||
|
// TODO: Handle result truncation
|
||||||
|
// https://docs.aws.amazon.com/sdk-for-go/api/service/route53/Route53.html#ListHostedZones-instance_method
|
||||||
|
zoneList := make([]dnsprovider.Zone, len(hostedZones))
|
||||||
|
for i, zone := range hostedZones {
|
||||||
|
zoneList[i] = &Zone{zone, &zones}
|
||||||
|
}
|
||||||
|
return zoneList, nil
|
||||||
|
}
|
57
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go
generated
vendored
Normal file
57
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go
generated
vendored
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// Package restxml provides RESTful XML serialisation of AWS
|
||||||
|
// requests and responses.
|
||||||
|
package restxml
|
||||||
|
|
||||||
|
//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/rest-xml.json build_test.go
|
||||||
|
//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/rest-xml.json unmarshal_test.go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/xml"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/query"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/rest"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Build builds a request payload for the REST XML protocol.
|
||||||
|
func Build(r *request.Request) {
|
||||||
|
rest.Build(r)
|
||||||
|
|
||||||
|
if t := rest.PayloadType(r.Params); t == "structure" || t == "" {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf))
|
||||||
|
if err != nil {
|
||||||
|
r.Error = awserr.New("SerializationError", "failed to encode rest XML request", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r.SetBufferBody(buf.Bytes())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal unmarshals a payload response for the REST XML protocol.
|
||||||
|
func Unmarshal(r *request.Request) {
|
||||||
|
if t := rest.PayloadType(r.Data); t == "structure" || t == "" {
|
||||||
|
defer r.HTTPResponse.Body.Close()
|
||||||
|
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
||||||
|
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
||||||
|
if err != nil {
|
||||||
|
r.Error = awserr.New("SerializationError", "failed to decode REST XML response", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rest.Unmarshal(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalMeta unmarshals response headers for the REST XML protocol.
|
||||||
|
func UnmarshalMeta(r *request.Request) {
|
||||||
|
rest.UnmarshalMeta(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalError unmarshals a response error for the REST XML protocol.
|
||||||
|
func UnmarshalError(r *request.Request) {
|
||||||
|
query.UnmarshalError(r)
|
||||||
|
}
|
5646
vendor/github.com/aws/aws-sdk-go/service/route53/api.go
generated
vendored
Normal file
5646
vendor/github.com/aws/aws-sdk-go/service/route53/api.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
21
vendor/github.com/aws/aws-sdk-go/service/route53/customizations.go
generated
vendored
Normal file
21
vendor/github.com/aws/aws-sdk-go/service/route53/customizations.go
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"regexp"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
initClient = func(c *client.Client) {
|
||||||
|
c.Handlers.Build.PushBack(sanitizeURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var reSanitizeURL = regexp.MustCompile(`\/%2F\w+%2F`)
|
||||||
|
|
||||||
|
func sanitizeURL(r *request.Request) {
|
||||||
|
r.HTTPRequest.URL.Opaque =
|
||||||
|
reSanitizeURL.ReplaceAllString(r.HTTPRequest.URL.Opaque, "/")
|
||||||
|
}
|
86
vendor/github.com/aws/aws-sdk-go/service/route53/service.go
generated
vendored
Normal file
86
vendor/github.com/aws/aws-sdk-go/service/route53/service.go
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
|
||||||
|
|
||||||
|
package route53
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/client/metadata"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/restxml"
|
||||||
|
"github.com/aws/aws-sdk-go/private/signer/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Route53 is a client for Route 53.
|
||||||
|
//The service client's operations are safe to be used concurrently.
|
||||||
|
// It is not safe to mutate any of the client's properties though.
|
||||||
|
type Route53 struct {
|
||||||
|
*client.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used for custom client initialization logic
|
||||||
|
var initClient func(*client.Client)
|
||||||
|
|
||||||
|
// Used for custom request initialization logic
|
||||||
|
var initRequest func(*request.Request)
|
||||||
|
|
||||||
|
// A ServiceName is the name of the service the client will make API calls to.
|
||||||
|
const ServiceName = "route53"
|
||||||
|
|
||||||
|
// New creates a new instance of the Route53 client with a session.
|
||||||
|
// If additional configuration is needed for the client instance use the optional
|
||||||
|
// aws.Config parameter to add your extra config.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// // Create a Route53 client from just a session.
|
||||||
|
// svc := route53.New(mySession)
|
||||||
|
//
|
||||||
|
// // Create a Route53 client with additional configuration
|
||||||
|
// svc := route53.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *Route53 {
|
||||||
|
c := p.ClientConfig(ServiceName, cfgs...)
|
||||||
|
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion)
|
||||||
|
}
|
||||||
|
|
||||||
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
|
func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion string) *Route53 {
|
||||||
|
svc := &Route53{
|
||||||
|
Client: client.New(
|
||||||
|
cfg,
|
||||||
|
metadata.ClientInfo{
|
||||||
|
ServiceName: ServiceName,
|
||||||
|
SigningRegion: signingRegion,
|
||||||
|
Endpoint: endpoint,
|
||||||
|
APIVersion: "2013-04-01",
|
||||||
|
},
|
||||||
|
handlers,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handlers
|
||||||
|
svc.Handlers.Sign.PushBack(v4.Sign)
|
||||||
|
svc.Handlers.Build.PushBack(restxml.Build)
|
||||||
|
svc.Handlers.Unmarshal.PushBack(restxml.Unmarshal)
|
||||||
|
svc.Handlers.UnmarshalMeta.PushBack(restxml.UnmarshalMeta)
|
||||||
|
svc.Handlers.UnmarshalError.PushBack(restxml.UnmarshalError)
|
||||||
|
|
||||||
|
// Run custom client initialization if present
|
||||||
|
if initClient != nil {
|
||||||
|
initClient(svc.Client)
|
||||||
|
}
|
||||||
|
|
||||||
|
return svc
|
||||||
|
}
|
||||||
|
|
||||||
|
// newRequest creates a new request for a Route53 operation and runs any
|
||||||
|
// custom request initialization.
|
||||||
|
func (c *Route53) newRequest(op *request.Operation, params, data interface{}) *request.Request {
|
||||||
|
req := c.NewRequest(op, params, data)
|
||||||
|
|
||||||
|
// Run custom request initialization if present
|
||||||
|
if initRequest != nil {
|
||||||
|
initRequest(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
return req
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user