mirror of https://github.com/k3s-io/k3s
PBM govmomi dependencies
parent
199465c3a5
commit
23ee1745d3
|
@ -2438,78 +2438,93 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi",
|
"ImportPath": "github.com/vmware/govmomi",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/find",
|
"ImportPath": "github.com/vmware/govmomi/find",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/list",
|
"ImportPath": "github.com/vmware/govmomi/list",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/object",
|
"ImportPath": "github.com/vmware/govmomi/object",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/vmware/govmomi/pbm",
|
||||||
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/vmware/govmomi/pbm/methods",
|
||||||
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/vmware/govmomi/pbm/types",
|
||||||
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/property",
|
"ImportPath": "github.com/vmware/govmomi/property",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/session",
|
"ImportPath": "github.com/vmware/govmomi/session",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/task",
|
"ImportPath": "github.com/vmware/govmomi/task",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25",
|
"ImportPath": "github.com/vmware/govmomi/vim25",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/debug",
|
"ImportPath": "github.com/vmware/govmomi/vim25/debug",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/methods",
|
"ImportPath": "github.com/vmware/govmomi/vim25/methods",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/mo",
|
"ImportPath": "github.com/vmware/govmomi/vim25/mo",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/progress",
|
"ImportPath": "github.com/vmware/govmomi/vim25/progress",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/soap",
|
"ImportPath": "github.com/vmware/govmomi/vim25/soap",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/types",
|
"ImportPath": "github.com/vmware/govmomi/vim25/types",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/govmomi/vim25/xml",
|
"ImportPath": "github.com/vmware/govmomi/vim25/xml",
|
||||||
"Comment": "v0.12.1-14-g0a28e59",
|
"Comment": "v0.14.0-11-gb8b228c",
|
||||||
"Rev": "0a28e595c8e9e99879e8d2f796e82c5a68202ff0"
|
"Rev": "b8b228cfbad7f0a69ed90393ca9aee085d3c6ef1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/vmware/photon-controller-go-sdk/SSPI",
|
"ImportPath": "github.com/vmware/photon-controller-go-sdk/SSPI",
|
||||||
|
|
|
@ -77938,6 +77938,636 @@ SOFTWARE.
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
= vendor/github.com/vmware/govmomi/pbm 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/vmware/govmomi/LICENSE.txt 3b83ef96387f14655fc854ddc3c6bd57 -
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
= vendor/github.com/vmware/govmomi/pbm/methods 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/vmware/govmomi/LICENSE.txt 3b83ef96387f14655fc854ddc3c6bd57 -
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
= vendor/github.com/vmware/govmomi/pbm/types 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/vmware/govmomi/LICENSE.txt 3b83ef96387f14655fc854ddc3c6bd57 -
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
= vendor/github.com/vmware/govmomi/property licensed under: =
|
= vendor/github.com/vmware/govmomi/property licensed under: =
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
Amit Bathla <abathla@.vmware.com> <abathla@promb-1s-dhcp216.eng.vmware.com>
|
||||||
|
Bruce Downs <bruceadowns@gmail.com> <bdowns@vmware.com>
|
||||||
|
Bruce Downs <bruceadowns@gmail.com> <bruce.downs@jivesoftware.com>
|
||||||
|
Clint Greenwood <cgreenwood@vmware.com> <clint.greenwood@gmail.com>
|
||||||
|
Cédric Blomart <cblomart@gmail.com> <cedric.blomart@minfin.fed.be>
|
||||||
|
Cédric Blomart <cblomart@gmail.com> cedric <cblomart@gmail.com>
|
||||||
|
David Stark <dave@davidstark.name> <david.stark@bskyb.com>
|
||||||
|
Eric Gray <egray@vmware.com> <ericgray@users.noreply.github.com>
|
||||||
|
Eric Yutao <eric.yutao@gmail.com> eric <eric.yutao@gmail.com>
|
||||||
|
Henrik Hodne <henrik@travis-ci.com> <henrik@hodne.io>
|
||||||
|
Jeremy Canady <jcanady@jackhenry.com> <jcanady@gmail.com>
|
||||||
|
Pieter Noordhuis <pnoordhuis@vmware.com> <pcnoordhuis@gmail.com>
|
||||||
|
Takaaki Furukawa <takaaki.frkw@gmail.com> takaaki.furukawa <takaaki.furukawa@mail.rakuten.com>
|
||||||
|
Takaaki Furukawa <takaaki.frkw@gmail.com> tkak <takaaki.frkw@gmail.com>
|
||||||
|
Vadim Egorov <vegorov@vmware.com> <egorovv@gmail.com>
|
||||||
|
Zee Yang <zeey@vmware.com> <zee.yang@gmail.com>
|
|
@ -34,6 +34,7 @@ filegroup(
|
||||||
"//vendor/github.com/vmware/govmomi/find:all-srcs",
|
"//vendor/github.com/vmware/govmomi/find:all-srcs",
|
||||||
"//vendor/github.com/vmware/govmomi/list:all-srcs",
|
"//vendor/github.com/vmware/govmomi/list:all-srcs",
|
||||||
"//vendor/github.com/vmware/govmomi/object:all-srcs",
|
"//vendor/github.com/vmware/govmomi/object:all-srcs",
|
||||||
|
"//vendor/github.com/vmware/govmomi/pbm:all-srcs",
|
||||||
"//vendor/github.com/vmware/govmomi/property:all-srcs",
|
"//vendor/github.com/vmware/govmomi/property:all-srcs",
|
||||||
"//vendor/github.com/vmware/govmomi/session:all-srcs",
|
"//vendor/github.com/vmware/govmomi/session:all-srcs",
|
||||||
"//vendor/github.com/vmware/govmomi/task:all-srcs",
|
"//vendor/github.com/vmware/govmomi/task:all-srcs",
|
||||||
|
|
|
@ -1,5 +1,37 @@
|
||||||
# changelog
|
# changelog
|
||||||
|
|
||||||
|
### 0.14.0 (2017-04-08)
|
||||||
|
|
||||||
|
* Add view.ContainerView type and methods
|
||||||
|
|
||||||
|
* Add Collector.RetrieveWithFilter method
|
||||||
|
|
||||||
|
* Add property.Filter type
|
||||||
|
|
||||||
|
* Implement EthernetCardBackingInfo for OpaqueNetwork
|
||||||
|
|
||||||
|
* Finder: support changing object root in find mode
|
||||||
|
|
||||||
|
* Add VirtualDiskManager.QueryVirtualDiskInfo
|
||||||
|
|
||||||
|
* Add performance.Manager APIs
|
||||||
|
|
||||||
|
### 0.13.0 (2017-03-02)
|
||||||
|
|
||||||
|
* Add DatastoreFileManager API wrapper
|
||||||
|
|
||||||
|
* Add HostVsanInternalSystem API wrappers
|
||||||
|
|
||||||
|
* Add Container support to view package
|
||||||
|
|
||||||
|
* Finder supports Folder recursion without specifying a path
|
||||||
|
|
||||||
|
* Add VirtualMachine.QueryConfigTarget method
|
||||||
|
|
||||||
|
* Add device option to VirtualMachine.WaitForNetIP
|
||||||
|
|
||||||
|
* Remove _Task suffix from vapp methods
|
||||||
|
|
||||||
### 0.12.1 (2016-12-19)
|
### 0.12.1 (2016-12-19)
|
||||||
|
|
||||||
* Add DiagnosticLog helper
|
* Add DiagnosticLog helper
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# People who can (and typically have) contributed to this repository.
|
# People who can (and typically have) contributed to this repository.
|
||||||
#
|
#
|
||||||
# Please keep the list sorted.
|
# This script is generated by contributors.sh
|
||||||
#
|
#
|
||||||
|
|
||||||
abrarshivani <abrarshivani@users.noreply.github.com>
|
abrarshivani <abrarshivani@users.noreply.github.com>
|
||||||
|
@ -9,24 +9,26 @@ Amit Bathla <abathla@.vmware.com>
|
||||||
Andrew Chin <andrew@andrewtchin.com>
|
Andrew Chin <andrew@andrewtchin.com>
|
||||||
Arran Walker <arran.walker@zopa.com>
|
Arran Walker <arran.walker@zopa.com>
|
||||||
Austin Parker <aparker@apprenda.com>
|
Austin Parker <aparker@apprenda.com>
|
||||||
|
bastienbc <bastien.barbe.creuly@gmail.com>
|
||||||
Bob Killen <killen.bob@gmail.com>
|
Bob Killen <killen.bob@gmail.com>
|
||||||
Brad Fitzpatrick <bradfitz@golang.org>
|
Brad Fitzpatrick <bradfitz@golang.org>
|
||||||
Bruce Downs <bruceadowns@gmail.com>
|
Bruce Downs <bruceadowns@gmail.com>
|
||||||
Cédric Blomart <cblomart@gmail.com>
|
Cédric Blomart <cblomart@gmail.com>
|
||||||
Christian Höltje <docwhat@gerf.org>
|
Christian Höltje <docwhat@gerf.org>
|
||||||
Clint Greenwood <cgreenwood@vmware.com> <clint.greenwood@gmail.com>
|
Clint Greenwood <cgreenwood@vmware.com>
|
||||||
Danny Lockard <danny.lockard@banno.com>
|
Danny Lockard <danny.lockard@banno.com>
|
||||||
Dave Tucker <dave@dtucker.co.uk>
|
Dave Tucker <dave@dtucker.co.uk>
|
||||||
Davide Agnello <dagnello@hp.com>
|
Davide Agnello <dagnello@hp.com>
|
||||||
David Stark <dave@davidstark.name>
|
David Stark <dave@davidstark.name>
|
||||||
Doug MacEachern <dougm@vmware.com>
|
Doug MacEachern <dougm@vmware.com>
|
||||||
Eloy Coto <eloy.coto@gmail.com>
|
Eloy Coto <eloy.coto@gmail.com>
|
||||||
|
Eric Gray <egray@vmware.com>
|
||||||
Eric Yutao <eric.yutao@gmail.com>
|
Eric Yutao <eric.yutao@gmail.com>
|
||||||
Fabio Rapposelli <fabio@vmware.com>
|
Fabio Rapposelli <fabio@vmware.com>
|
||||||
Faiyaz Ahmed <ahmedf@vmware.com>
|
Faiyaz Ahmed <ahmedf@vmware.com>
|
||||||
forkbomber <forkbomber@users.noreply.github.com>
|
forkbomber <forkbomber@users.noreply.github.com>
|
||||||
Gavin Gray <gavin@infinio.com>
|
Gavin Gray <gavin@infinio.com>
|
||||||
Gavrie Philipson <gavrie@philipson.co.il> <gavrie.philipson@elastifile.com>
|
Gavrie Philipson <gavrie.philipson@elastifile.com>
|
||||||
George Hicken <ghicken@vmware.com>
|
George Hicken <ghicken@vmware.com>
|
||||||
Gerrit Renker <Gerrit.Renker@ctl.io>
|
Gerrit Renker <Gerrit.Renker@ctl.io>
|
||||||
gthombare <gthombare@vmware.com>
|
gthombare <gthombare@vmware.com>
|
||||||
|
@ -34,18 +36,20 @@ Hasan Mahmood <mahmoodh@vmware.com>
|
||||||
Henrik Hodne <henrik@travis-ci.com>
|
Henrik Hodne <henrik@travis-ci.com>
|
||||||
Isaac Rodman <isaac@eyz.us>
|
Isaac Rodman <isaac@eyz.us>
|
||||||
Jason Kincl <jkincl@gmail.com>
|
Jason Kincl <jkincl@gmail.com>
|
||||||
|
Jeremy Canady <jcanady@jackhenry.com>
|
||||||
Louie Jiang <jiangl@vmware.com>
|
Louie Jiang <jiangl@vmware.com>
|
||||||
|
Marc Carmier <mcarmier@gmail.com>
|
||||||
Mevan Samaratunga <mevansam@gmail.com>
|
Mevan Samaratunga <mevansam@gmail.com>
|
||||||
Nicolas Lamirault <nicolas.lamirault@gmail.com>
|
Nicolas Lamirault <nicolas.lamirault@gmail.com>
|
||||||
Pieter Noordhuis <pnoordhuis@vmware.com> <pcnoordhuis@gmail.com>
|
Pieter Noordhuis <pnoordhuis@vmware.com>
|
||||||
runner.mei <runner.mei@gmail.com>
|
runner.mei <runner.mei@gmail.com>
|
||||||
S.Çağlar Onur <conur@vmware.com>
|
S.Çağlar Onur <conur@vmware.com>
|
||||||
Sergey Ignatov <sergey.ignatov@jetbrains.com>
|
Sergey Ignatov <sergey.ignatov@jetbrains.com>
|
||||||
Steve Purcell <steve@sanityinc.com>
|
Steve Purcell <steve@sanityinc.com>
|
||||||
Takaaki Furukawa <takaaki.frkw@gmail.com> <takaaki.furukawa@mail.rakuten.com>
|
Takaaki Furukawa <takaaki.frkw@gmail.com>
|
||||||
Ted Zlatanov <tzz@lifelogs.com>
|
Ted Zlatanov <tzz@lifelogs.com>
|
||||||
Vadim Egorov <vegorov@vmware.com>
|
Vadim Egorov <vegorov@vmware.com>
|
||||||
Yang Yang <yangy@vmware.com>
|
Yang Yang <yangy@vmware.com>
|
||||||
Yuya Kusakabe <yuya.kusakabe@gmail.com>
|
Yuya Kusakabe <yuya.kusakabe@gmail.com>
|
||||||
Zach Tucker <ztucker@vmware.com>
|
Zach Tucker <ztucker@vmware.com>
|
||||||
Zee Yang <zeey@vmware.com> <zee.yang@gmail.com>
|
Zee Yang <zeey@vmware.com>
|
||||||
|
|
|
@ -61,8 +61,18 @@ Refer to the [CHANGELOG](CHANGELOG.md) for version to version changes.
|
||||||
|
|
||||||
* [Travis CI](https://github.com/travis-ci/jupiter-brain)
|
* [Travis CI](https://github.com/travis-ci/jupiter-brain)
|
||||||
|
|
||||||
|
* [collectd-vsphere](https://github.com/travis-ci/collectd-vsphere)
|
||||||
|
|
||||||
* [Gru](https://github.com/dnaeon/gru)
|
* [Gru](https://github.com/dnaeon/gru)
|
||||||
|
|
||||||
|
* [Libretto](https://github.com/apcera/libretto/tree/master/virtualmachine/vsphere)
|
||||||
|
|
||||||
|
## Related projects
|
||||||
|
|
||||||
|
* [rbvmomi](https://github.com/vmware/rbvmomi)
|
||||||
|
|
||||||
|
* [pyvmomi](https://github.com/vmware/pyvmomi)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
govmomi is available under the [Apache 2 license](LICENSE).
|
govmomi is available under the [Apache 2 license](LICENSE).
|
||||||
|
|
|
@ -10,8 +10,10 @@ load(
|
||||||
go_library(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
|
"doc.go",
|
||||||
"error.go",
|
"error.go",
|
||||||
"finder.go",
|
"finder.go",
|
||||||
|
"recurser.go",
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014-2017 VMware, Inc. 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 find implements inventory listing and searching.
|
||||||
|
|
||||||
|
The Finder is an alternative to the object.SearchIndex FindByInventoryPath() and FindChild() methods.
|
||||||
|
SearchIndex.FindByInventoryPath requires an absolute path, whereas the Finder also supports relative paths
|
||||||
|
and patterns via path.Match.
|
||||||
|
SearchIndex.FindChild requires a parent to find the child, whereas the Finder also supports an ancestor via
|
||||||
|
recursive object traversal.
|
||||||
|
|
||||||
|
The various Finder methods accept a "path" argument, which can absolute or relative to the Folder for the object type.
|
||||||
|
The Finder supports two modes, "list" and "find". The "list" mode behaves like the "ls" command, only searching within
|
||||||
|
the immediate path. The "find" mode behaves like the "find" command, with the search starting at the immediate path but
|
||||||
|
also recursing into sub Folders relative to the Datacenter. The default mode is "list" if the given path contains a "/",
|
||||||
|
otherwise "find" mode is used.
|
||||||
|
|
||||||
|
The exception is to use a "..." wildcard with a path to find all objects recursively underneath any root object.
|
||||||
|
For example: VirtualMachineList("/DC1/...")
|
||||||
|
|
||||||
|
See also: https://github.com/vmware/govmomi/blob/master/govc/README.md#usage
|
||||||
|
*/
|
||||||
|
package find
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -20,6 +20,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"path"
|
"path"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/vmware/govmomi/list"
|
"github.com/vmware/govmomi/list"
|
||||||
"github.com/vmware/govmomi/object"
|
"github.com/vmware/govmomi/object"
|
||||||
|
@ -31,16 +32,17 @@ import (
|
||||||
|
|
||||||
type Finder struct {
|
type Finder struct {
|
||||||
client *vim25.Client
|
client *vim25.Client
|
||||||
recurser list.Recurser
|
r recurser
|
||||||
|
|
||||||
dc *object.Datacenter
|
dc *object.Datacenter
|
||||||
|
si *object.SearchIndex
|
||||||
folders *object.DatacenterFolders
|
folders *object.DatacenterFolders
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFinder(client *vim25.Client, all bool) *Finder {
|
func NewFinder(client *vim25.Client, all bool) *Finder {
|
||||||
f := &Finder{
|
f := &Finder{
|
||||||
client: client,
|
client: client,
|
||||||
recurser: list.Recurser{
|
si: object.NewSearchIndex(client),
|
||||||
|
r: recurser{
|
||||||
Collector: property.DefaultCollector(client),
|
Collector: property.DefaultCollector(client),
|
||||||
All: all,
|
All: all,
|
||||||
},
|
},
|
||||||
|
@ -55,9 +57,41 @@ func (f *Finder) SetDatacenter(dc *object.Datacenter) *Finder {
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
type findRelativeFunc func(ctx context.Context) (object.Reference, error)
|
// findRoot makes it possible to use "find" mode with a different root path.
|
||||||
|
// Example: ResourcePoolList("/dc1/host/cluster1/...")
|
||||||
|
func (f *Finder) findRoot(ctx context.Context, root *list.Element, parts []string) bool {
|
||||||
|
if len(parts) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
ix := len(parts) - 1
|
||||||
|
|
||||||
|
if parts[ix] != "..." {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if ix == 0 {
|
||||||
|
return true // We already have the Object for root.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lookup the Object for the new root.Path
|
||||||
|
rootPath := path.Join(root.Path, path.Join(parts[:ix]...))
|
||||||
|
|
||||||
|
ref, err := f.si.FindByInventoryPath(ctx, rootPath)
|
||||||
|
if err != nil || ref == nil {
|
||||||
|
// If we get an error or fail to match, fall through to find() with the original root and path
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
root.Path = rootPath
|
||||||
|
root.Object = ref
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *Finder) find(ctx context.Context, arg string, s *spec) ([]list.Element, error) {
|
||||||
|
isPath := strings.Contains(arg, "/")
|
||||||
|
|
||||||
func (f *Finder) find(ctx context.Context, fn findRelativeFunc, tl bool, arg string) ([]list.Element, error) {
|
|
||||||
root := list.Element{
|
root := list.Element{
|
||||||
Path: "/",
|
Path: "/",
|
||||||
Object: object.NewRootFolder(f.client),
|
Object: object.NewRootFolder(f.client),
|
||||||
|
@ -70,7 +104,7 @@ func (f *Finder) find(ctx context.Context, fn findRelativeFunc, tl bool, arg str
|
||||||
case "..": // Not supported; many edge case, little value
|
case "..": // Not supported; many edge case, little value
|
||||||
return nil, errors.New("cannot traverse up a tree")
|
return nil, errors.New("cannot traverse up a tree")
|
||||||
case ".": // Relative to whatever
|
case ".": // Relative to whatever
|
||||||
pivot, err := fn(ctx)
|
pivot, err := s.Relative(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -93,13 +127,17 @@ func (f *Finder) find(ctx context.Context, fn findRelativeFunc, tl bool, arg str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f.recurser.TraverseLeafs = tl
|
if s.listMode(isPath) {
|
||||||
es, err := f.recurser.Recurse(ctx, root, parts)
|
if f.findRoot(ctx, &root, parts) {
|
||||||
if err != nil {
|
parts = []string{"*"}
|
||||||
return nil, err
|
} else {
|
||||||
|
return f.r.List(ctx, s, root, parts)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return es, nil
|
s.Parents = append(s.Parents, s.Nested...)
|
||||||
|
|
||||||
|
return f.r.Find(ctx, s, root, parts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) datacenter() (*object.Datacenter, error) {
|
func (f *Finder) datacenter() (*object.Datacenter, error) {
|
||||||
|
@ -208,7 +246,7 @@ func (f *Finder) rootFolder(_ context.Context) (object.Reference, error) {
|
||||||
return object.NewRootFolder(f.client), nil
|
return object.NewRootFolder(f.client), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) managedObjectList(ctx context.Context, path string, tl bool) ([]list.Element, error) {
|
func (f *Finder) managedObjectList(ctx context.Context, path string, tl bool, include []string) ([]list.Element, error) {
|
||||||
fn := f.rootFolder
|
fn := f.rootFolder
|
||||||
|
|
||||||
if f.dc != nil {
|
if f.dc != nil {
|
||||||
|
@ -219,7 +257,18 @@ func (f *Finder) managedObjectList(ctx context.Context, path string, tl bool) ([
|
||||||
path = "."
|
path = "."
|
||||||
}
|
}
|
||||||
|
|
||||||
return f.find(ctx, fn, tl, path)
|
s := &spec{
|
||||||
|
Relative: fn,
|
||||||
|
Parents: []string{"ComputeResource", "ClusterComputeResource", "HostSystem", "VirtualApp", "StoragePod"},
|
||||||
|
Include: include,
|
||||||
|
}
|
||||||
|
|
||||||
|
if tl {
|
||||||
|
s.Contents = true
|
||||||
|
s.ListMode = types.NewBool(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
return f.find(ctx, path, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Element returns an Element for the given ManagedObjectReference
|
// Element returns an Element for the given ManagedObjectReference
|
||||||
|
@ -229,7 +278,11 @@ func (f *Finder) Element(ctx context.Context, ref types.ManagedObjectReference)
|
||||||
return ref, nil
|
return ref, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
e, err := f.find(ctx, rl, false, ".")
|
s := &spec{
|
||||||
|
Relative: rl,
|
||||||
|
}
|
||||||
|
|
||||||
|
e, err := f.find(ctx, "./", s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -270,16 +323,21 @@ func (f *Finder) ObjectReference(ctx context.Context, ref types.ManagedObjectRef
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) ManagedObjectList(ctx context.Context, path string) ([]list.Element, error) {
|
func (f *Finder) ManagedObjectList(ctx context.Context, path string, include ...string) ([]list.Element, error) {
|
||||||
return f.managedObjectList(ctx, path, false)
|
return f.managedObjectList(ctx, path, false, include)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) ManagedObjectListChildren(ctx context.Context, path string) ([]list.Element, error) {
|
func (f *Finder) ManagedObjectListChildren(ctx context.Context, path string, include ...string) ([]list.Element, error) {
|
||||||
return f.managedObjectList(ctx, path, true)
|
return f.managedObjectList(ctx, path, true, include)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) DatacenterList(ctx context.Context, path string) ([]*object.Datacenter, error) {
|
func (f *Finder) DatacenterList(ctx context.Context, path string) ([]*object.Datacenter, error) {
|
||||||
es, err := f.find(ctx, f.rootFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.rootFolder,
|
||||||
|
Include: []string{"Datacenter"},
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -336,7 +394,12 @@ func (f *Finder) DatacenterOrDefault(ctx context.Context, path string) (*object.
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) DatastoreList(ctx context.Context, path string) ([]*object.Datastore, error) {
|
func (f *Finder) DatastoreList(ctx context.Context, path string) ([]*object.Datastore, error) {
|
||||||
es, err := f.find(ctx, f.datastoreFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.datastoreFolder,
|
||||||
|
Parents: []string{"StoragePod"},
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -404,7 +467,11 @@ func (f *Finder) DatastoreOrDefault(ctx context.Context, path string) (*object.D
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) DatastoreClusterList(ctx context.Context, path string) ([]*object.StoragePod, error) {
|
func (f *Finder) DatastoreClusterList(ctx context.Context, path string) ([]*object.StoragePod, error) {
|
||||||
es, err := f.find(ctx, f.datastoreFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.datastoreFolder,
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -461,7 +528,11 @@ func (f *Finder) DatastoreClusterOrDefault(ctx context.Context, path string) (*o
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) ComputeResourceList(ctx context.Context, path string) ([]*object.ComputeResource, error) {
|
func (f *Finder) ComputeResourceList(ctx context.Context, path string) ([]*object.ComputeResource, error) {
|
||||||
es, err := f.find(ctx, f.hostFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.hostFolder,
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -523,7 +594,11 @@ func (f *Finder) ComputeResourceOrDefault(ctx context.Context, path string) (*ob
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) ClusterComputeResourceList(ctx context.Context, path string) ([]*object.ClusterComputeResource, error) {
|
func (f *Finder) ClusterComputeResourceList(ctx context.Context, path string) ([]*object.ClusterComputeResource, error) {
|
||||||
es, err := f.find(ctx, f.hostFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.hostFolder,
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -564,7 +639,13 @@ func (f *Finder) ClusterComputeResource(ctx context.Context, path string) (*obje
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) HostSystemList(ctx context.Context, path string) ([]*object.HostSystem, error) {
|
func (f *Finder) HostSystemList(ctx context.Context, path string) ([]*object.HostSystem, error) {
|
||||||
es, err := f.find(ctx, f.hostFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.hostFolder,
|
||||||
|
Parents: []string{"ComputeResource", "ClusterComputeResource"},
|
||||||
|
Include: []string{"HostSystem"},
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -635,7 +716,11 @@ func (f *Finder) HostSystemOrDefault(ctx context.Context, path string) (*object.
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.NetworkReference, error) {
|
func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.NetworkReference, error) {
|
||||||
es, err := f.find(ctx, f.networkFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.networkFolder,
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -644,10 +729,14 @@ func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.Network
|
||||||
for _, e := range es {
|
for _, e := range es {
|
||||||
ref := e.Object.Reference()
|
ref := e.Object.Reference()
|
||||||
switch ref.Type {
|
switch ref.Type {
|
||||||
case "Network", "OpaqueNetwork":
|
case "Network":
|
||||||
r := object.NewNetwork(f.client, ref)
|
r := object.NewNetwork(f.client, ref)
|
||||||
r.InventoryPath = e.Path
|
r.InventoryPath = e.Path
|
||||||
ns = append(ns, r)
|
ns = append(ns, r)
|
||||||
|
case "OpaqueNetwork":
|
||||||
|
r := object.NewOpaqueNetwork(f.client, ref)
|
||||||
|
r.InventoryPath = e.Path
|
||||||
|
ns = append(ns, r)
|
||||||
case "DistributedVirtualPortgroup":
|
case "DistributedVirtualPortgroup":
|
||||||
r := object.NewDistributedVirtualPortgroup(f.client, ref)
|
r := object.NewDistributedVirtualPortgroup(f.client, ref)
|
||||||
r.InventoryPath = e.Path
|
r.InventoryPath = e.Path
|
||||||
|
@ -701,7 +790,14 @@ func (f *Finder) NetworkOrDefault(ctx context.Context, path string) (object.Netw
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) ResourcePoolList(ctx context.Context, path string) ([]*object.ResourcePool, error) {
|
func (f *Finder) ResourcePoolList(ctx context.Context, path string) ([]*object.ResourcePool, error) {
|
||||||
es, err := f.find(ctx, f.hostFolder, true, path)
|
s := &spec{
|
||||||
|
Relative: f.hostFolder,
|
||||||
|
Parents: []string{"ComputeResource", "ClusterComputeResource", "VirtualApp"},
|
||||||
|
Nested: []string{"ResourcePool"},
|
||||||
|
Contents: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -804,7 +900,12 @@ func (f *Finder) FolderOrDefault(ctx context.Context, path string) (*object.Fold
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) VirtualMachineList(ctx context.Context, path string) ([]*object.VirtualMachine, error) {
|
func (f *Finder) VirtualMachineList(ctx context.Context, path string) ([]*object.VirtualMachine, error) {
|
||||||
es, err := f.find(ctx, f.vmFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.vmFolder,
|
||||||
|
Parents: []string{"VirtualApp"},
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -840,7 +941,11 @@ func (f *Finder) VirtualMachine(ctx context.Context, path string) (*object.Virtu
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Finder) VirtualAppList(ctx context.Context, path string) ([]*object.VirtualApp, error) {
|
func (f *Finder) VirtualAppList(ctx context.Context, path string) ([]*object.VirtualApp, error) {
|
||||||
es, err := f.find(ctx, f.vmFolder, false, path)
|
s := &spec{
|
||||||
|
Relative: f.vmFolder,
|
||||||
|
}
|
||||||
|
|
||||||
|
es, err := f.find(ctx, path, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,245 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014-2017 VMware, Inc. 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 find
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/list"
|
||||||
|
"github.com/vmware/govmomi/object"
|
||||||
|
"github.com/vmware/govmomi/property"
|
||||||
|
"github.com/vmware/govmomi/vim25/mo"
|
||||||
|
)
|
||||||
|
|
||||||
|
// spec is used to specify per-search configuration, independent of the Finder instance.
|
||||||
|
type spec struct {
|
||||||
|
// Relative returns the root object to resolve Relative paths (starts with ".")
|
||||||
|
Relative func(ctx context.Context) (object.Reference, error)
|
||||||
|
|
||||||
|
// ListMode can be used to optionally force "ls" behavior, rather than "find" behavior
|
||||||
|
ListMode *bool
|
||||||
|
|
||||||
|
// Contents configures the Recurser to list the Contents of traversable leaf nodes.
|
||||||
|
// This is typically set to true when used from the ls command, where listing
|
||||||
|
// a folder means listing its Contents. This is typically set to false for
|
||||||
|
// commands that take managed entities that are not folders as input.
|
||||||
|
Contents bool
|
||||||
|
|
||||||
|
// Parents specifies the types which can contain the child types being searched for.
|
||||||
|
// for example, when searching for a HostSystem, parent types can be
|
||||||
|
// "ComputeResource" or "ClusterComputeResource".
|
||||||
|
Parents []string
|
||||||
|
|
||||||
|
// Include specifies which types to be included in the results, used only in "find" mode.
|
||||||
|
Include []string
|
||||||
|
|
||||||
|
// Nested should be set to types that can be Nested, used only in "find" mode.
|
||||||
|
Nested []string
|
||||||
|
|
||||||
|
// ChildType avoids traversing into folders that can't contain the Include types, used only in "find" mode.
|
||||||
|
ChildType []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spec) traversable(o mo.Reference) bool {
|
||||||
|
ref := o.Reference()
|
||||||
|
|
||||||
|
switch ref.Type {
|
||||||
|
case "Datacenter":
|
||||||
|
if len(s.Include) == 1 && s.Include[0] == "Datacenter" {
|
||||||
|
// No point in traversing deeper as Datacenters cannot be nested
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
case "Folder":
|
||||||
|
if f, ok := o.(mo.Folder); ok {
|
||||||
|
// TODO: Not making use of this yet, but here we can optimize when searching the entire
|
||||||
|
// inventory across Datacenters for specific types, for example: 'govc ls -t VirtualMachine /**'
|
||||||
|
// should not traverse into a Datacenter's host, network or datatore folders.
|
||||||
|
if !s.traversableChildType(f.ChildType) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, kind := range s.Parents {
|
||||||
|
if kind == ref.Type {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spec) traversableChildType(ctypes []string) bool {
|
||||||
|
if len(s.ChildType) == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, t := range ctypes {
|
||||||
|
for _, c := range s.ChildType {
|
||||||
|
if t == c {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spec) wanted(e list.Element) bool {
|
||||||
|
if len(s.Include) == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
w := e.Object.Reference().Type
|
||||||
|
|
||||||
|
for _, kind := range s.Include {
|
||||||
|
if w == kind {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// listMode is a global option to revert to the original Finder behavior,
|
||||||
|
// disabling the newer "find" mode.
|
||||||
|
var listMode = os.Getenv("GOVMOMI_FINDER_LIST_MODE") == "true"
|
||||||
|
|
||||||
|
func (s *spec) listMode(isPath bool) bool {
|
||||||
|
if listMode {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.ListMode != nil {
|
||||||
|
return *s.ListMode
|
||||||
|
}
|
||||||
|
|
||||||
|
return isPath
|
||||||
|
}
|
||||||
|
|
||||||
|
type recurser struct {
|
||||||
|
Collector *property.Collector
|
||||||
|
|
||||||
|
// All configures the recurses to fetch complete objects for leaf nodes.
|
||||||
|
All bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r recurser) List(ctx context.Context, s *spec, root list.Element, parts []string) ([]list.Element, error) {
|
||||||
|
if len(parts) == 0 {
|
||||||
|
// Include non-traversable leaf elements in result. For example, consider
|
||||||
|
// the pattern "./vm/my-vm-*", where the pattern should match the VMs and
|
||||||
|
// not try to traverse them.
|
||||||
|
//
|
||||||
|
// Include traversable leaf elements in result, if the contents
|
||||||
|
// field is set to false.
|
||||||
|
//
|
||||||
|
if !s.Contents || !s.traversable(root.Object.Reference()) {
|
||||||
|
return []list.Element{root}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
k := list.Lister{
|
||||||
|
Collector: r.Collector,
|
||||||
|
Reference: root.Object.Reference(),
|
||||||
|
Prefix: root.Path,
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.All && len(parts) < 2 {
|
||||||
|
k.All = true
|
||||||
|
}
|
||||||
|
|
||||||
|
in, err := k.List(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// This folder is a leaf as far as the glob goes.
|
||||||
|
if len(parts) == 0 {
|
||||||
|
return in, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
pattern := parts[0]
|
||||||
|
parts = parts[1:]
|
||||||
|
|
||||||
|
var out []list.Element
|
||||||
|
for _, e := range in {
|
||||||
|
matched, err := path.Match(pattern, path.Base(e.Path))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !matched {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
nres, err := r.List(ctx, s, e, parts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out = append(out, nres...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r recurser) Find(ctx context.Context, s *spec, root list.Element, parts []string) ([]list.Element, error) {
|
||||||
|
var out []list.Element
|
||||||
|
|
||||||
|
if len(parts) > 0 {
|
||||||
|
pattern := parts[0]
|
||||||
|
matched, err := path.Match(pattern, path.Base(root.Path))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if matched && s.wanted(root) {
|
||||||
|
out = append(out, root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !s.traversable(root.Object) {
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
k := list.Lister{
|
||||||
|
Collector: r.Collector,
|
||||||
|
Reference: root.Object.Reference(),
|
||||||
|
Prefix: root.Path,
|
||||||
|
}
|
||||||
|
|
||||||
|
in, err := k.List(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range in {
|
||||||
|
nres, err := r.Find(ctx, s, e, parts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
out = append(out, nres...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return out, nil
|
||||||
|
}
|
|
@ -12,7 +12,6 @@ go_library(
|
||||||
srcs = [
|
srcs = [
|
||||||
"lister.go",
|
"lister.go",
|
||||||
"path.go",
|
"path.go",
|
||||||
"recurser.go",
|
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
|
|
|
@ -33,6 +33,10 @@ type Element struct {
|
||||||
Object mo.Reference
|
Object mo.Reference
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e Element) String() string {
|
||||||
|
return fmt.Sprintf("%s @ %s", e.Object.Reference(), e.Path)
|
||||||
|
}
|
||||||
|
|
||||||
func ToElement(r mo.Reference, prefix string) Element {
|
func ToElement(r mo.Reference, prefix string) Element {
|
||||||
var name string
|
var name string
|
||||||
|
|
||||||
|
@ -112,23 +116,6 @@ type Lister struct {
|
||||||
All bool
|
All bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func traversable(ref types.ManagedObjectReference) bool {
|
|
||||||
switch ref.Type {
|
|
||||||
case "Folder":
|
|
||||||
case "Datacenter":
|
|
||||||
case "ComputeResource", "ClusterComputeResource":
|
|
||||||
// Treat ComputeResource and ClusterComputeResource as one and the same.
|
|
||||||
// It doesn't matter from the perspective of the lister.
|
|
||||||
case "HostSystem":
|
|
||||||
case "VirtualApp":
|
|
||||||
case "StoragePod":
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l Lister) retrieveProperties(ctx context.Context, req types.RetrieveProperties, dst *[]interface{}) error {
|
func (l Lister) retrieveProperties(ctx context.Context, req types.RetrieveProperties, dst *[]interface{}) error {
|
||||||
res, err := l.Collector.RetrieveProperties(ctx, req)
|
res, err := l.Collector.RetrieveProperties(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -225,6 +212,8 @@ func (l Lister) ListFolder(ctx context.Context) ([]Element, error) {
|
||||||
|
|
||||||
// Additional basic properties.
|
// Additional basic properties.
|
||||||
switch t {
|
switch t {
|
||||||
|
case "Folder":
|
||||||
|
pspec.PathSet = append(pspec.PathSet, "childType")
|
||||||
case "ComputeResource", "ClusterComputeResource":
|
case "ComputeResource", "ClusterComputeResource":
|
||||||
// The ComputeResource and ClusterComputeResource are dereferenced in
|
// The ComputeResource and ClusterComputeResource are dereferenced in
|
||||||
// the ResourcePoolFlag. Make sure they always have their resourcePool
|
// the ResourcePoolFlag. Make sure they always have their resourcePool
|
||||||
|
@ -286,7 +275,7 @@ func (l Lister) ListDatacenter(ctx context.Context) ([]Element, error) {
|
||||||
if l.All {
|
if l.All {
|
||||||
pspec.All = types.NewBool(true)
|
pspec.All = types.NewBool(true)
|
||||||
} else {
|
} else {
|
||||||
pspec.PathSet = []string{"name"}
|
pspec.PathSet = []string{"name", "childType"}
|
||||||
}
|
}
|
||||||
|
|
||||||
req := types.RetrieveProperties{
|
req := types.RetrieveProperties{
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2014-2015 VMware, Inc. 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 list
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
"github.com/vmware/govmomi/property"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Recurser struct {
|
|
||||||
Collector *property.Collector
|
|
||||||
|
|
||||||
// All configures the recurses to fetch complete objects for leaf nodes.
|
|
||||||
All bool
|
|
||||||
|
|
||||||
// TraverseLeafs configures the Recurser to traverse traversable leaf nodes.
|
|
||||||
// This is typically set to true when used from the ls command, where listing
|
|
||||||
// a folder means listing its contents. This is typically set to false for
|
|
||||||
// commands that take managed entities that are not folders as input.
|
|
||||||
TraverseLeafs bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r Recurser) Recurse(ctx context.Context, root Element, parts []string) ([]Element, error) {
|
|
||||||
if len(parts) == 0 {
|
|
||||||
// Include non-traversable leaf elements in result. For example, consider
|
|
||||||
// the pattern "./vm/my-vm-*", where the pattern should match the VMs and
|
|
||||||
// not try to traverse them.
|
|
||||||
//
|
|
||||||
// Include traversable leaf elements in result, if the TraverseLeafs
|
|
||||||
// field is set to false.
|
|
||||||
//
|
|
||||||
if !traversable(root.Object.Reference()) || !r.TraverseLeafs {
|
|
||||||
return []Element{root}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
k := Lister{
|
|
||||||
Collector: r.Collector,
|
|
||||||
Reference: root.Object.Reference(),
|
|
||||||
Prefix: root.Path,
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.All && len(parts) < 2 {
|
|
||||||
k.All = true
|
|
||||||
}
|
|
||||||
|
|
||||||
in, err := k.List(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// This folder is a leaf as far as the glob goes.
|
|
||||||
if len(parts) == 0 {
|
|
||||||
return in, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern := parts[0]
|
|
||||||
parts = parts[1:]
|
|
||||||
|
|
||||||
var out []Element
|
|
||||||
for _, e := range in {
|
|
||||||
matched, err := filepath.Match(pattern, path.Base(e.Path))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !matched {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
nres, err := r.Recurse(ctx, e, parts)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
out = append(out, nres...)
|
|
||||||
}
|
|
||||||
|
|
||||||
return out, nil
|
|
||||||
}
|
|
|
@ -11,6 +11,7 @@ go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
"authorization_manager.go",
|
"authorization_manager.go",
|
||||||
|
"authorization_manager_internal.go",
|
||||||
"cluster_compute_resource.go",
|
"cluster_compute_resource.go",
|
||||||
"common.go",
|
"common.go",
|
||||||
"compute_resource.go",
|
"compute_resource.go",
|
||||||
|
@ -19,6 +20,7 @@ go_library(
|
||||||
"datacenter.go",
|
"datacenter.go",
|
||||||
"datastore.go",
|
"datastore.go",
|
||||||
"datastore_file.go",
|
"datastore_file.go",
|
||||||
|
"datastore_file_manager.go",
|
||||||
"datastore_path.go",
|
"datastore_path.go",
|
||||||
"diagnostic_log.go",
|
"diagnostic_log.go",
|
||||||
"diagnostic_manager.go",
|
"diagnostic_manager.go",
|
||||||
|
@ -41,12 +43,13 @@ go_library(
|
||||||
"host_storage_system.go",
|
"host_storage_system.go",
|
||||||
"host_system.go",
|
"host_system.go",
|
||||||
"host_virtual_nic_manager.go",
|
"host_virtual_nic_manager.go",
|
||||||
|
"host_vsan_internal_system.go",
|
||||||
"host_vsan_system.go",
|
"host_vsan_system.go",
|
||||||
"http_nfc_lease.go",
|
"http_nfc_lease.go",
|
||||||
"list_view.go",
|
|
||||||
"namespace_manager.go",
|
"namespace_manager.go",
|
||||||
"network.go",
|
"network.go",
|
||||||
"network_reference.go",
|
"network_reference.go",
|
||||||
|
"opaque_network.go",
|
||||||
"option_manager.go",
|
"option_manager.go",
|
||||||
"ovf_manager.go",
|
"ovf_manager.go",
|
||||||
"resource_pool.go",
|
"resource_pool.go",
|
||||||
|
@ -58,6 +61,7 @@ go_library(
|
||||||
"virtual_app.go",
|
"virtual_app.go",
|
||||||
"virtual_device_list.go",
|
"virtual_device_list.go",
|
||||||
"virtual_disk_manager.go",
|
"virtual_disk_manager.go",
|
||||||
|
"virtual_disk_manager_internal.go",
|
||||||
"virtual_machine.go",
|
"virtual_machine.go",
|
||||||
"vmware_distributed_virtual_switch.go",
|
"vmware_distributed_virtual_switch.go",
|
||||||
],
|
],
|
||||||
|
|
86
vendor/github.com/vmware/govmomi/object/authorization_manager_internal.go
generated
vendored
Normal file
86
vendor/github.com/vmware/govmomi/object/authorization_manager_internal.go
generated
vendored
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25/soap"
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DisabledMethodRequest struct {
|
||||||
|
Method string `xml:"method"`
|
||||||
|
Reason string `xml:"reasonId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type disableMethodsRequest struct {
|
||||||
|
This types.ManagedObjectReference `xml:"_this"`
|
||||||
|
Entity []types.ManagedObjectReference `xml:"entity"`
|
||||||
|
Method []DisabledMethodRequest `xml:"method"`
|
||||||
|
Source string `xml:"sourceId"`
|
||||||
|
Scope bool `xml:"sessionScope,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type disableMethodsBody struct {
|
||||||
|
Req *disableMethodsRequest `xml:"urn:internalvim25 DisableMethods,omitempty"`
|
||||||
|
Res interface{} `xml:"urn:vim25 DisableMethodsResponse,omitempty"`
|
||||||
|
Err *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *disableMethodsBody) Fault() *soap.Fault { return b.Err }
|
||||||
|
|
||||||
|
func (m AuthorizationManager) DisableMethods(ctx context.Context, entity []types.ManagedObjectReference, method []DisabledMethodRequest, source string) error {
|
||||||
|
var reqBody, resBody disableMethodsBody
|
||||||
|
|
||||||
|
reqBody.Req = &disableMethodsRequest{
|
||||||
|
This: m.Reference(),
|
||||||
|
Entity: entity,
|
||||||
|
Method: method,
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
return m.Client().RoundTrip(ctx, &reqBody, &resBody)
|
||||||
|
}
|
||||||
|
|
||||||
|
type enableMethodsRequest struct {
|
||||||
|
This types.ManagedObjectReference `xml:"_this"`
|
||||||
|
Entity []types.ManagedObjectReference `xml:"entity"`
|
||||||
|
Method []string `xml:"method"`
|
||||||
|
Source string `xml:"sourceId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type enableMethodsBody struct {
|
||||||
|
Req *enableMethodsRequest `xml:"urn:internalvim25 EnableMethods,omitempty"`
|
||||||
|
Res interface{} `xml:"urn:vim25 EnableMethodsResponse,omitempty"`
|
||||||
|
Err *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *enableMethodsBody) Fault() *soap.Fault { return b.Err }
|
||||||
|
|
||||||
|
func (m AuthorizationManager) EnableMethods(ctx context.Context, entity []types.ManagedObjectReference, method []string, source string) error {
|
||||||
|
var reqBody, resBody enableMethodsBody
|
||||||
|
|
||||||
|
reqBody.Req = &enableMethodsRequest{
|
||||||
|
This: m.Reference(),
|
||||||
|
Entity: entity,
|
||||||
|
Method: method,
|
||||||
|
Source: source,
|
||||||
|
}
|
||||||
|
|
||||||
|
return m.Client().RoundTrip(ctx, &reqBody, &resBody)
|
||||||
|
}
|
|
@ -344,8 +344,6 @@ func (f *followDatastoreFile) Read(p []byte) (int, error) {
|
||||||
offset := f.r.offset.seek
|
offset := f.r.offset.seek
|
||||||
stop := false
|
stop := false
|
||||||
|
|
||||||
defer f.r.Close()
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
n, err := f.r.Read(p)
|
n, err := f.r.Read(p)
|
||||||
if err != nil && err == io.EOF {
|
if err != nil && err == io.EOF {
|
||||||
|
|
145
vendor/github.com/vmware/govmomi/object/datastore_file_manager.go
generated
vendored
Normal file
145
vendor/github.com/vmware/govmomi/object/datastore_file_manager.go
generated
vendored
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25/soap"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DatastoreFileManager combines FileManager and VirtualDiskManager to manage files on a Datastore
|
||||||
|
type DatastoreFileManager struct {
|
||||||
|
Datacenter *Datacenter
|
||||||
|
Datastore *Datastore
|
||||||
|
FileManager *FileManager
|
||||||
|
VirtualDiskManager *VirtualDiskManager
|
||||||
|
|
||||||
|
Force bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewFileManager creates a new instance of DatastoreFileManager
|
||||||
|
func (d Datastore) NewFileManager(dc *Datacenter, force bool) *DatastoreFileManager {
|
||||||
|
c := d.Client()
|
||||||
|
|
||||||
|
m := &DatastoreFileManager{
|
||||||
|
Datacenter: dc,
|
||||||
|
Datastore: &d,
|
||||||
|
FileManager: NewFileManager(c),
|
||||||
|
VirtualDiskManager: NewVirtualDiskManager(c),
|
||||||
|
Force: force,
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete dispatches to the appropriate Delete method based on file name extension
|
||||||
|
func (m *DatastoreFileManager) Delete(ctx context.Context, name string) error {
|
||||||
|
switch path.Ext(name) {
|
||||||
|
case ".vmdk":
|
||||||
|
return m.DeleteVirtualDisk(ctx, name)
|
||||||
|
default:
|
||||||
|
return m.DeleteFile(ctx, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteFile calls FileManager.DeleteDatastoreFile
|
||||||
|
func (m *DatastoreFileManager) DeleteFile(ctx context.Context, name string) error {
|
||||||
|
p := m.Path(name)
|
||||||
|
|
||||||
|
task, err := m.FileManager.DeleteDatastoreFile(ctx, p.String(), m.Datacenter)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return task.Wait(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteVirtualDisk calls VirtualDiskManager.DeleteVirtualDisk
|
||||||
|
// Regardless of the Datastore type, DeleteVirtualDisk will fail if 'ddb.deletable=false',
|
||||||
|
// so if Force=true this method attempts to set 'ddb.deletable=true' before starting the delete task.
|
||||||
|
func (m *DatastoreFileManager) DeleteVirtualDisk(ctx context.Context, name string) error {
|
||||||
|
p := m.Path(name)
|
||||||
|
|
||||||
|
var merr error
|
||||||
|
|
||||||
|
if m.Force {
|
||||||
|
merr = m.markDiskAsDeletable(ctx, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
task, err := m.VirtualDiskManager.DeleteVirtualDisk(ctx, p.String(), m.Datacenter)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("markDiskAsDeletable(%s): %s", p, merr)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return task.Wait(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Path converts path name to a DatastorePath
|
||||||
|
func (m *DatastoreFileManager) Path(name string) *DatastorePath {
|
||||||
|
var p DatastorePath
|
||||||
|
|
||||||
|
if !p.FromString(name) {
|
||||||
|
p.Path = name
|
||||||
|
p.Datastore = m.Datastore.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *DatastoreFileManager) markDiskAsDeletable(ctx context.Context, path *DatastorePath) error {
|
||||||
|
r, _, err := m.Datastore.Download(ctx, path.Path, &soap.DefaultDownload)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
hasFlag := false
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
|
||||||
|
s := bufio.NewScanner(&io.LimitedReader{R: r, N: 2048}) // should be only a few hundred bytes, limit to be sure
|
||||||
|
|
||||||
|
for s.Scan() {
|
||||||
|
line := s.Text()
|
||||||
|
if strings.HasPrefix(line, "ddb.deletable") {
|
||||||
|
hasFlag = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintln(buf, line)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.Err(); err != nil {
|
||||||
|
return err // any error other than EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
if !hasFlag {
|
||||||
|
return nil // already deletable, so leave as-is
|
||||||
|
}
|
||||||
|
|
||||||
|
// rewrite the .vmdk with ddb.deletable flag removed (the default is true)
|
||||||
|
return m.Datastore.Upload(ctx, buf, path.Path, &soap.DefaultUpload)
|
||||||
|
}
|
|
@ -105,6 +105,22 @@ func (m HostConfigManager) VsanSystem(ctx context.Context) (*HostVsanSystem, err
|
||||||
return NewHostVsanSystem(m.c, *h.ConfigManager.VsanSystem), nil
|
return NewHostVsanSystem(m.c, *h.ConfigManager.VsanSystem), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m HostConfigManager) VsanInternalSystem(ctx context.Context) (*HostVsanInternalSystem, error) {
|
||||||
|
var h mo.HostSystem
|
||||||
|
|
||||||
|
err := m.Properties(ctx, m.Reference(), []string{"configManager.vsanInternalSystem"}, &h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Added in 5.5
|
||||||
|
if h.ConfigManager.VsanInternalSystem == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
return NewHostVsanInternalSystem(m.c, *h.ConfigManager.VsanInternalSystem), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m HostConfigManager) AccountManager(ctx context.Context) (*HostAccountManager, error) {
|
func (m HostConfigManager) AccountManager(ctx context.Context) (*HostAccountManager, error) {
|
||||||
var h mo.HostSystem
|
var h mo.HostSystem
|
||||||
|
|
||||||
|
|
117
vendor/github.com/vmware/govmomi/object/host_vsan_internal_system.go
generated
vendored
Normal file
117
vendor/github.com/vmware/govmomi/object/host_vsan_internal_system.go
generated
vendored
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25"
|
||||||
|
"github.com/vmware/govmomi/vim25/methods"
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HostVsanInternalSystem struct {
|
||||||
|
Common
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHostVsanInternalSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostVsanInternalSystem {
|
||||||
|
m := HostVsanInternalSystem{
|
||||||
|
Common: NewCommon(c, ref),
|
||||||
|
}
|
||||||
|
|
||||||
|
return &m
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryVsanObjectUuidsByFilter returns vSAN DOM object uuids by filter.
|
||||||
|
func (m HostVsanInternalSystem) QueryVsanObjectUuidsByFilter(ctx context.Context, uuids []string, limit int32, version int32) ([]string, error) {
|
||||||
|
req := types.QueryVsanObjectUuidsByFilter{
|
||||||
|
This: m.Reference(),
|
||||||
|
Uuids: uuids,
|
||||||
|
Limit: limit,
|
||||||
|
Version: version,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.QueryVsanObjectUuidsByFilter(ctx, m.Client(), &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type VsanObjExtAttrs struct {
|
||||||
|
Type string `json:"Object type"`
|
||||||
|
Class string `json:"Object class"`
|
||||||
|
Size string `json:"Object size"`
|
||||||
|
Path string `json:"Object path"`
|
||||||
|
Name string `json:"User friendly name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *VsanObjExtAttrs) DatastorePath(dir string) string {
|
||||||
|
l := len(dir)
|
||||||
|
path := a.Path
|
||||||
|
|
||||||
|
if len(path) >= l {
|
||||||
|
path = a.Path[l:]
|
||||||
|
}
|
||||||
|
|
||||||
|
if path != "" {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.Name // vmnamespace
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVsanObjExtAttrs is internal and intended for troubleshooting/debugging situations in the field.
|
||||||
|
// WARNING: This API can be slow because we do IOs (reads) to all the objects.
|
||||||
|
func (m HostVsanInternalSystem) GetVsanObjExtAttrs(ctx context.Context, uuids []string) (map[string]VsanObjExtAttrs, error) {
|
||||||
|
req := types.GetVsanObjExtAttrs{
|
||||||
|
This: m.Reference(),
|
||||||
|
Uuids: uuids,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.GetVsanObjExtAttrs(ctx, m.Client(), &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var attrs map[string]VsanObjExtAttrs
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(res.Returnval), &attrs)
|
||||||
|
|
||||||
|
return attrs, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteVsanObjects is internal and intended for troubleshooting/debugging only.
|
||||||
|
// WARNING: This API can be slow because we do IOs to all the objects.
|
||||||
|
// DOM won't allow access to objects which have lost quorum. Such objects can be deleted with the optional "force" flag.
|
||||||
|
// These objects may however re-appear with quorum if the absent components come back (network partition gets resolved, etc.)
|
||||||
|
func (m HostVsanInternalSystem) DeleteVsanObjects(ctx context.Context, uuids []string, force *bool) ([]types.HostVsanInternalSystemDeleteVsanObjectsResult, error) {
|
||||||
|
req := types.DeleteVsanObjects{
|
||||||
|
This: m.Reference(),
|
||||||
|
Uuids: uuids,
|
||||||
|
Force: force,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.DeleteVsanObjects(ctx, m.Client(), &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
|
@ -1,70 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2015 VMware, Inc. 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 object
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/vmware/govmomi/vim25"
|
|
||||||
"github.com/vmware/govmomi/vim25/methods"
|
|
||||||
"github.com/vmware/govmomi/vim25/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ListView struct {
|
|
||||||
Common
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewListView(c *vim25.Client, ref types.ManagedObjectReference) *ListView {
|
|
||||||
return &ListView{
|
|
||||||
Common: NewCommon(c, ref),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v ListView) Destroy(ctx context.Context) error {
|
|
||||||
req := types.DestroyView{
|
|
||||||
This: v.Reference(),
|
|
||||||
}
|
|
||||||
_, err := methods.DestroyView(ctx, v.c, &req)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v ListView) Add(ctx context.Context, refs []types.ManagedObjectReference) error {
|
|
||||||
req := types.ModifyListView{
|
|
||||||
This: v.Reference(),
|
|
||||||
Add: refs,
|
|
||||||
}
|
|
||||||
_, err := methods.ModifyListView(ctx, v.c, &req)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v ListView) Remove(ctx context.Context, refs []types.ManagedObjectReference) error {
|
|
||||||
req := types.ModifyListView{
|
|
||||||
This: v.Reference(),
|
|
||||||
Remove: refs,
|
|
||||||
}
|
|
||||||
_, err := methods.ModifyListView(ctx, v.c, &req)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v ListView) Reset(ctx context.Context, refs []types.ManagedObjectReference) error {
|
|
||||||
req := types.ResetListView{
|
|
||||||
This: v.Reference(),
|
|
||||||
Obj: refs,
|
|
||||||
}
|
|
||||||
_, err := methods.ResetListView(ctx, v.c, &req)
|
|
||||||
return err
|
|
||||||
}
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25"
|
||||||
|
"github.com/vmware/govmomi/vim25/mo"
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type OpaqueNetwork struct {
|
||||||
|
Common
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewOpaqueNetwork(c *vim25.Client, ref types.ManagedObjectReference) *OpaqueNetwork {
|
||||||
|
return &OpaqueNetwork{
|
||||||
|
Common: NewCommon(c, ref),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthernetCardBackingInfo returns the VirtualDeviceBackingInfo for this Network
|
||||||
|
func (n OpaqueNetwork) EthernetCardBackingInfo(ctx context.Context) (types.BaseVirtualDeviceBackingInfo, error) {
|
||||||
|
var net mo.OpaqueNetwork
|
||||||
|
|
||||||
|
if err := n.Properties(ctx, n.Reference(), []string{"summary"}, &net); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
summary, ok := net.Summary.(*types.OpaqueNetworkSummary)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("%s unsupported network type: %T", n, net.Summary)
|
||||||
|
}
|
||||||
|
|
||||||
|
backing := &types.VirtualEthernetCardOpaqueNetworkBackingInfo{
|
||||||
|
OpaqueNetworkId: summary.OpaqueNetworkId,
|
||||||
|
OpaqueNetworkType: summary.OpaqueNetworkType,
|
||||||
|
}
|
||||||
|
|
||||||
|
return backing, nil
|
||||||
|
}
|
97
vendor/github.com/vmware/govmomi/object/virtual_disk_manager_internal.go
generated
vendored
Normal file
97
vendor/github.com/vmware/govmomi/object/virtual_disk_manager_internal.go
generated
vendored
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25/soap"
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("ArrayOfVirtualDiskInfo", reflect.TypeOf((*arrayOfVirtualDiskInfo)(nil)).Elem())
|
||||||
|
|
||||||
|
types.Add("VirtualDiskInfo", reflect.TypeOf((*VirtualDiskInfo)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type arrayOfVirtualDiskInfo struct {
|
||||||
|
VirtualDiskInfo []VirtualDiskInfo `xml:"VirtualDiskInfo,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type queryVirtualDiskInfoTaskRequest struct {
|
||||||
|
This types.ManagedObjectReference `xml:"_this"`
|
||||||
|
Name string `xml:"name"`
|
||||||
|
Datacenter *types.ManagedObjectReference `xml:"datacenter,omitempty"`
|
||||||
|
IncludeParents bool `xml:"includeParents"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type queryVirtualDiskInfoTaskResponse struct {
|
||||||
|
Returnval types.ManagedObjectReference `xml:"returnval"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type queryVirtualDiskInfoTaskBody struct {
|
||||||
|
Req *queryVirtualDiskInfoTaskRequest `xml:"urn:internalvim25 QueryVirtualDiskInfo_Task,omitempty"`
|
||||||
|
Res *queryVirtualDiskInfoTaskResponse `xml:"urn:vim25 QueryVirtualDiskInfo_TaskResponse,omitempty"`
|
||||||
|
Err *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *queryVirtualDiskInfoTaskBody) Fault() *soap.Fault { return b.Err }
|
||||||
|
|
||||||
|
func queryVirtualDiskInfoTask(ctx context.Context, r soap.RoundTripper, req *queryVirtualDiskInfoTaskRequest) (*queryVirtualDiskInfoTaskResponse, error) {
|
||||||
|
var reqBody, resBody queryVirtualDiskInfoTaskBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type VirtualDiskInfo struct {
|
||||||
|
Name string `xml:"unit>name"`
|
||||||
|
DiskType string `xml:"diskType"`
|
||||||
|
Parent string `xml:"parent,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m VirtualDiskManager) QueryVirtualDiskInfo(ctx context.Context, name string, dc *Datacenter, includeParents bool) ([]VirtualDiskInfo, error) {
|
||||||
|
req := queryVirtualDiskInfoTaskRequest{
|
||||||
|
This: m.Reference(),
|
||||||
|
Name: name,
|
||||||
|
IncludeParents: includeParents,
|
||||||
|
}
|
||||||
|
|
||||||
|
if dc != nil {
|
||||||
|
ref := dc.Reference()
|
||||||
|
req.Datacenter = &ref
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := queryVirtualDiskInfoTask(ctx, m.Client(), &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
info, err := NewTask(m.Client(), res.Returnval).WaitForResult(ctx, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return info.Result.(arrayOfVirtualDiskInfo).VirtualDiskInfo, nil
|
||||||
|
}
|
|
@ -725,3 +725,35 @@ func (v VirtualMachine) QueryConfigTarget(ctx context.Context) (*types.ConfigTar
|
||||||
|
|
||||||
return res.Returnval, nil
|
return res.Returnval, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v VirtualMachine) MountToolsInstaller(ctx context.Context) error {
|
||||||
|
req := types.MountToolsInstaller{
|
||||||
|
This: v.Reference(),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := methods.MountToolsInstaller(ctx, v.Client(), &req)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VirtualMachine) UnmountToolsInstaller(ctx context.Context) error {
|
||||||
|
req := types.UnmountToolsInstaller{
|
||||||
|
This: v.Reference(),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := methods.UnmountToolsInstaller(ctx, v.Client(), &req)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VirtualMachine) UpgradeTools(ctx context.Context, options string) (*Task, error) {
|
||||||
|
req := types.UpgradeTools_Task{
|
||||||
|
This: v.Reference(),
|
||||||
|
InstallerOptions: options,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.UpgradeTools_Task(ctx, v.Client(), &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return NewTask(v.c, res.Returnval), nil
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"client.go",
|
||||||
|
"pbm_util.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/vmware/govmomi/pbm/methods:go_default_library",
|
||||||
|
"//vendor/github.com/vmware/govmomi/pbm/types:go_default_library",
|
||||||
|
"//vendor/github.com/vmware/govmomi/vim25:go_default_library",
|
||||||
|
"//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library",
|
||||||
|
"//vendor/github.com/vmware/govmomi/vim25/types:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/vmware/govmomi/pbm/methods:all-srcs",
|
||||||
|
"//vendor/github.com/vmware/govmomi/pbm/types:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
|
@ -0,0 +1,217 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 pbm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/pbm/methods"
|
||||||
|
"github.com/vmware/govmomi/pbm/types"
|
||||||
|
"github.com/vmware/govmomi/vim25"
|
||||||
|
"github.com/vmware/govmomi/vim25/soap"
|
||||||
|
vim "github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
*soap.Client
|
||||||
|
|
||||||
|
ServiceContent types.PbmServiceInstanceContent
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(ctx context.Context, c *vim25.Client) (*Client, error) {
|
||||||
|
sc := c.Client.NewServiceClient("/pbm/sdk", "urn:pbm")
|
||||||
|
|
||||||
|
req := types.PbmRetrieveServiceContent{
|
||||||
|
This: vim.ManagedObjectReference{
|
||||||
|
Type: "PbmServiceInstance",
|
||||||
|
Value: "ServiceInstance",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmRetrieveServiceContent(ctx, sc, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Client{sc, res.Returnval}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) QueryProfile(ctx context.Context, rtype types.PbmProfileResourceType, category string) ([]types.PbmProfileId, error) {
|
||||||
|
req := types.PbmQueryProfile{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
ResourceType: rtype,
|
||||||
|
ProfileCategory: category,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmQueryProfile(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) RetrieveContent(ctx context.Context, ids []types.PbmProfileId) ([]types.BasePbmProfile, error) {
|
||||||
|
req := types.PbmRetrieveContent{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
ProfileIds: ids,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmRetrieveContent(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PlacementCompatibilityResult []types.PbmPlacementCompatibilityResult
|
||||||
|
|
||||||
|
func (c *Client) CheckRequirements(ctx context.Context, hubs []types.PbmPlacementHub, ref *types.PbmServerObjectRef, preq []types.BasePbmPlacementRequirement) (PlacementCompatibilityResult, error) {
|
||||||
|
req := types.PbmCheckRequirements{
|
||||||
|
This: c.ServiceContent.PlacementSolver,
|
||||||
|
HubsToSearch: hubs,
|
||||||
|
PlacementSubjectRef: ref,
|
||||||
|
PlacementSubjectRequirement: preq,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmCheckRequirements(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l PlacementCompatibilityResult) CompatibleDatastores() []types.PbmPlacementHub {
|
||||||
|
var compatibleDatastores []types.PbmPlacementHub
|
||||||
|
|
||||||
|
for _, res := range l {
|
||||||
|
if len(res.Error) == 0 {
|
||||||
|
compatibleDatastores = append(compatibleDatastores, res.Hub)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return compatibleDatastores
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l PlacementCompatibilityResult) NonCompatibleDatastores() []types.PbmPlacementHub {
|
||||||
|
var nonCompatibleDatastores []types.PbmPlacementHub
|
||||||
|
|
||||||
|
for _, res := range l {
|
||||||
|
if len(res.Error) > 0 {
|
||||||
|
nonCompatibleDatastores = append(nonCompatibleDatastores, res.Hub)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nonCompatibleDatastores
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) CreateProfile(ctx context.Context, capabilityProfileCreateSpec types.PbmCapabilityProfileCreateSpec) (*types.PbmProfileId, error) {
|
||||||
|
req := types.PbmCreate{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
CreateSpec: capabilityProfileCreateSpec,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmCreate(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) UpdateProfile(ctx context.Context, id types.PbmProfileId, updateSpec types.PbmCapabilityProfileUpdateSpec) error {
|
||||||
|
req := types.PbmUpdate{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
ProfileId: id,
|
||||||
|
UpdateSpec: updateSpec,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := methods.PbmUpdate(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) DeleteProfile(ctx context.Context, ids []types.PbmProfileId) ([]types.PbmProfileOperationOutcome, error) {
|
||||||
|
req := types.PbmDelete{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
ProfileId: ids,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmDelete(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) QueryAssociatedEntity(ctx context.Context, id types.PbmProfileId, entityType string) ([]types.PbmServerObjectRef, error) {
|
||||||
|
req := types.PbmQueryAssociatedEntity{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
Profile: id,
|
||||||
|
EntityType: entityType,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmQueryAssociatedEntity(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) QueryAssociatedEntities(ctx context.Context, ids []types.PbmProfileId) ([]types.PbmQueryProfileResult, error) {
|
||||||
|
req := types.PbmQueryAssociatedEntities{
|
||||||
|
This: c.ServiceContent.ProfileManager,
|
||||||
|
Profiles: ids,
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := methods.PbmQueryAssociatedEntities(ctx, c, &req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Returnval, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) ProfileIDByName(ctx context.Context, profileName string) (string, error) {
|
||||||
|
resourceType := types.PbmProfileResourceType{
|
||||||
|
ResourceType: string(types.PbmProfileResourceTypeEnumSTORAGE),
|
||||||
|
}
|
||||||
|
category := types.PbmProfileCategoryEnumREQUIREMENT
|
||||||
|
ids, err := c.QueryProfile(ctx, resourceType, string(category))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
profiles, err := c.RetrieveContent(ctx, ids)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range profiles {
|
||||||
|
profile := profiles[i].GetPbmProfile()
|
||||||
|
if profile.Name == profileName {
|
||||||
|
return profile.ProfileId.UniqueId, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("no pbm profile found with name: %q", profileName)
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["methods.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/vmware/govmomi/pbm/types:go_default_library",
|
||||||
|
"//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
|
@ -0,0 +1,664 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014-2017 VMware, Inc. 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 methods
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/pbm/types"
|
||||||
|
"github.com/vmware/govmomi/vim25/soap"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PbmAssignDefaultRequirementProfileBody struct {
|
||||||
|
Req *types.PbmAssignDefaultRequirementProfile `xml:"urn:pbm PbmAssignDefaultRequirementProfile,omitempty"`
|
||||||
|
Res *types.PbmAssignDefaultRequirementProfileResponse `xml:"urn:pbm PbmAssignDefaultRequirementProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmAssignDefaultRequirementProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmAssignDefaultRequirementProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmAssignDefaultRequirementProfile) (*types.PbmAssignDefaultRequirementProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmAssignDefaultRequirementProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCheckCompatibilityBody struct {
|
||||||
|
Req *types.PbmCheckCompatibility `xml:"urn:pbm PbmCheckCompatibility,omitempty"`
|
||||||
|
Res *types.PbmCheckCompatibilityResponse `xml:"urn:pbm PbmCheckCompatibilityResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCheckCompatibilityBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmCheckCompatibility(ctx context.Context, r soap.RoundTripper, req *types.PbmCheckCompatibility) (*types.PbmCheckCompatibilityResponse, error) {
|
||||||
|
var reqBody, resBody PbmCheckCompatibilityBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCheckCompatibilityWithSpecBody struct {
|
||||||
|
Req *types.PbmCheckCompatibilityWithSpec `xml:"urn:pbm PbmCheckCompatibilityWithSpec,omitempty"`
|
||||||
|
Res *types.PbmCheckCompatibilityWithSpecResponse `xml:"urn:pbm PbmCheckCompatibilityWithSpecResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCheckCompatibilityWithSpecBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmCheckCompatibilityWithSpec(ctx context.Context, r soap.RoundTripper, req *types.PbmCheckCompatibilityWithSpec) (*types.PbmCheckCompatibilityWithSpecResponse, error) {
|
||||||
|
var reqBody, resBody PbmCheckCompatibilityWithSpecBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCheckComplianceBody struct {
|
||||||
|
Req *types.PbmCheckCompliance `xml:"urn:pbm PbmCheckCompliance,omitempty"`
|
||||||
|
Res *types.PbmCheckComplianceResponse `xml:"urn:pbm PbmCheckComplianceResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCheckComplianceBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmCheckCompliance(ctx context.Context, r soap.RoundTripper, req *types.PbmCheckCompliance) (*types.PbmCheckComplianceResponse, error) {
|
||||||
|
var reqBody, resBody PbmCheckComplianceBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCheckRequirementsBody struct {
|
||||||
|
Req *types.PbmCheckRequirements `xml:"urn:pbm PbmCheckRequirements,omitempty"`
|
||||||
|
Res *types.PbmCheckRequirementsResponse `xml:"urn:pbm PbmCheckRequirementsResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCheckRequirementsBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmCheckRequirements(ctx context.Context, r soap.RoundTripper, req *types.PbmCheckRequirements) (*types.PbmCheckRequirementsResponse, error) {
|
||||||
|
var reqBody, resBody PbmCheckRequirementsBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCheckRollupComplianceBody struct {
|
||||||
|
Req *types.PbmCheckRollupCompliance `xml:"urn:pbm PbmCheckRollupCompliance,omitempty"`
|
||||||
|
Res *types.PbmCheckRollupComplianceResponse `xml:"urn:pbm PbmCheckRollupComplianceResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCheckRollupComplianceBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmCheckRollupCompliance(ctx context.Context, r soap.RoundTripper, req *types.PbmCheckRollupCompliance) (*types.PbmCheckRollupComplianceResponse, error) {
|
||||||
|
var reqBody, resBody PbmCheckRollupComplianceBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCreateBody struct {
|
||||||
|
Req *types.PbmCreate `xml:"urn:pbm PbmCreate,omitempty"`
|
||||||
|
Res *types.PbmCreateResponse `xml:"urn:pbm PbmCreateResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCreateBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmCreate(ctx context.Context, r soap.RoundTripper, req *types.PbmCreate) (*types.PbmCreateResponse, error) {
|
||||||
|
var reqBody, resBody PbmCreateBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmDeleteBody struct {
|
||||||
|
Req *types.PbmDelete `xml:"urn:pbm PbmDelete,omitempty"`
|
||||||
|
Res *types.PbmDeleteResponse `xml:"urn:pbm PbmDeleteResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmDeleteBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmDelete(ctx context.Context, r soap.RoundTripper, req *types.PbmDelete) (*types.PbmDeleteResponse, error) {
|
||||||
|
var reqBody, resBody PbmDeleteBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFetchCapabilityMetadataBody struct {
|
||||||
|
Req *types.PbmFetchCapabilityMetadata `xml:"urn:pbm PbmFetchCapabilityMetadata,omitempty"`
|
||||||
|
Res *types.PbmFetchCapabilityMetadataResponse `xml:"urn:pbm PbmFetchCapabilityMetadataResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFetchCapabilityMetadataBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFetchCapabilityMetadata(ctx context.Context, r soap.RoundTripper, req *types.PbmFetchCapabilityMetadata) (*types.PbmFetchCapabilityMetadataResponse, error) {
|
||||||
|
var reqBody, resBody PbmFetchCapabilityMetadataBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFetchCapabilitySchemaBody struct {
|
||||||
|
Req *types.PbmFetchCapabilitySchema `xml:"urn:pbm PbmFetchCapabilitySchema,omitempty"`
|
||||||
|
Res *types.PbmFetchCapabilitySchemaResponse `xml:"urn:pbm PbmFetchCapabilitySchemaResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFetchCapabilitySchemaBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFetchCapabilitySchema(ctx context.Context, r soap.RoundTripper, req *types.PbmFetchCapabilitySchema) (*types.PbmFetchCapabilitySchemaResponse, error) {
|
||||||
|
var reqBody, resBody PbmFetchCapabilitySchemaBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFetchComplianceResultBody struct {
|
||||||
|
Req *types.PbmFetchComplianceResult `xml:"urn:pbm PbmFetchComplianceResult,omitempty"`
|
||||||
|
Res *types.PbmFetchComplianceResultResponse `xml:"urn:pbm PbmFetchComplianceResultResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFetchComplianceResultBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFetchComplianceResult(ctx context.Context, r soap.RoundTripper, req *types.PbmFetchComplianceResult) (*types.PbmFetchComplianceResultResponse, error) {
|
||||||
|
var reqBody, resBody PbmFetchComplianceResultBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFetchResourceTypeBody struct {
|
||||||
|
Req *types.PbmFetchResourceType `xml:"urn:pbm PbmFetchResourceType,omitempty"`
|
||||||
|
Res *types.PbmFetchResourceTypeResponse `xml:"urn:pbm PbmFetchResourceTypeResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFetchResourceTypeBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFetchResourceType(ctx context.Context, r soap.RoundTripper, req *types.PbmFetchResourceType) (*types.PbmFetchResourceTypeResponse, error) {
|
||||||
|
var reqBody, resBody PbmFetchResourceTypeBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFetchRollupComplianceResultBody struct {
|
||||||
|
Req *types.PbmFetchRollupComplianceResult `xml:"urn:pbm PbmFetchRollupComplianceResult,omitempty"`
|
||||||
|
Res *types.PbmFetchRollupComplianceResultResponse `xml:"urn:pbm PbmFetchRollupComplianceResultResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFetchRollupComplianceResultBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFetchRollupComplianceResult(ctx context.Context, r soap.RoundTripper, req *types.PbmFetchRollupComplianceResult) (*types.PbmFetchRollupComplianceResultResponse, error) {
|
||||||
|
var reqBody, resBody PbmFetchRollupComplianceResultBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFetchVendorInfoBody struct {
|
||||||
|
Req *types.PbmFetchVendorInfo `xml:"urn:pbm PbmFetchVendorInfo,omitempty"`
|
||||||
|
Res *types.PbmFetchVendorInfoResponse `xml:"urn:pbm PbmFetchVendorInfoResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFetchVendorInfoBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFetchVendorInfo(ctx context.Context, r soap.RoundTripper, req *types.PbmFetchVendorInfo) (*types.PbmFetchVendorInfoResponse, error) {
|
||||||
|
var reqBody, resBody PbmFetchVendorInfoBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmFindApplicableDefaultProfileBody struct {
|
||||||
|
Req *types.PbmFindApplicableDefaultProfile `xml:"urn:pbm PbmFindApplicableDefaultProfile,omitempty"`
|
||||||
|
Res *types.PbmFindApplicableDefaultProfileResponse `xml:"urn:pbm PbmFindApplicableDefaultProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFindApplicableDefaultProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmFindApplicableDefaultProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmFindApplicableDefaultProfile) (*types.PbmFindApplicableDefaultProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmFindApplicableDefaultProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryAssociatedEntitiesBody struct {
|
||||||
|
Req *types.PbmQueryAssociatedEntities `xml:"urn:pbm PbmQueryAssociatedEntities,omitempty"`
|
||||||
|
Res *types.PbmQueryAssociatedEntitiesResponse `xml:"urn:pbm PbmQueryAssociatedEntitiesResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryAssociatedEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryAssociatedEntities(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryAssociatedEntities) (*types.PbmQueryAssociatedEntitiesResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryAssociatedEntitiesBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryAssociatedEntityBody struct {
|
||||||
|
Req *types.PbmQueryAssociatedEntity `xml:"urn:pbm PbmQueryAssociatedEntity,omitempty"`
|
||||||
|
Res *types.PbmQueryAssociatedEntityResponse `xml:"urn:pbm PbmQueryAssociatedEntityResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryAssociatedEntityBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryAssociatedEntity(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryAssociatedEntity) (*types.PbmQueryAssociatedEntityResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryAssociatedEntityBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryAssociatedProfileBody struct {
|
||||||
|
Req *types.PbmQueryAssociatedProfile `xml:"urn:pbm PbmQueryAssociatedProfile,omitempty"`
|
||||||
|
Res *types.PbmQueryAssociatedProfileResponse `xml:"urn:pbm PbmQueryAssociatedProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryAssociatedProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryAssociatedProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryAssociatedProfile) (*types.PbmQueryAssociatedProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryAssociatedProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryAssociatedProfilesBody struct {
|
||||||
|
Req *types.PbmQueryAssociatedProfiles `xml:"urn:pbm PbmQueryAssociatedProfiles,omitempty"`
|
||||||
|
Res *types.PbmQueryAssociatedProfilesResponse `xml:"urn:pbm PbmQueryAssociatedProfilesResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryAssociatedProfilesBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryAssociatedProfiles(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryAssociatedProfiles) (*types.PbmQueryAssociatedProfilesResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryAssociatedProfilesBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryByRollupComplianceStatusBody struct {
|
||||||
|
Req *types.PbmQueryByRollupComplianceStatus `xml:"urn:pbm PbmQueryByRollupComplianceStatus,omitempty"`
|
||||||
|
Res *types.PbmQueryByRollupComplianceStatusResponse `xml:"urn:pbm PbmQueryByRollupComplianceStatusResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryByRollupComplianceStatusBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryByRollupComplianceStatus(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryByRollupComplianceStatus) (*types.PbmQueryByRollupComplianceStatusResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryByRollupComplianceStatusBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryDefaultRequirementProfileBody struct {
|
||||||
|
Req *types.PbmQueryDefaultRequirementProfile `xml:"urn:pbm PbmQueryDefaultRequirementProfile,omitempty"`
|
||||||
|
Res *types.PbmQueryDefaultRequirementProfileResponse `xml:"urn:pbm PbmQueryDefaultRequirementProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryDefaultRequirementProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryDefaultRequirementProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryDefaultRequirementProfile) (*types.PbmQueryDefaultRequirementProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryDefaultRequirementProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryDefaultRequirementProfilesBody struct {
|
||||||
|
Req *types.PbmQueryDefaultRequirementProfiles `xml:"urn:pbm PbmQueryDefaultRequirementProfiles,omitempty"`
|
||||||
|
Res *types.PbmQueryDefaultRequirementProfilesResponse `xml:"urn:pbm PbmQueryDefaultRequirementProfilesResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryDefaultRequirementProfilesBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryDefaultRequirementProfiles(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryDefaultRequirementProfiles) (*types.PbmQueryDefaultRequirementProfilesResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryDefaultRequirementProfilesBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryMatchingHubBody struct {
|
||||||
|
Req *types.PbmQueryMatchingHub `xml:"urn:pbm PbmQueryMatchingHub,omitempty"`
|
||||||
|
Res *types.PbmQueryMatchingHubResponse `xml:"urn:pbm PbmQueryMatchingHubResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryMatchingHubBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryMatchingHub(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryMatchingHub) (*types.PbmQueryMatchingHubResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryMatchingHubBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryMatchingHubWithSpecBody struct {
|
||||||
|
Req *types.PbmQueryMatchingHubWithSpec `xml:"urn:pbm PbmQueryMatchingHubWithSpec,omitempty"`
|
||||||
|
Res *types.PbmQueryMatchingHubWithSpecResponse `xml:"urn:pbm PbmQueryMatchingHubWithSpecResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryMatchingHubWithSpecBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryMatchingHubWithSpec(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryMatchingHubWithSpec) (*types.PbmQueryMatchingHubWithSpecResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryMatchingHubWithSpecBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryProfileBody struct {
|
||||||
|
Req *types.PbmQueryProfile `xml:"urn:pbm PbmQueryProfile,omitempty"`
|
||||||
|
Res *types.PbmQueryProfileResponse `xml:"urn:pbm PbmQueryProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryProfile) (*types.PbmQueryProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQueryReplicationGroupsBody struct {
|
||||||
|
Req *types.PbmQueryReplicationGroups `xml:"urn:pbm PbmQueryReplicationGroups,omitempty"`
|
||||||
|
Res *types.PbmQueryReplicationGroupsResponse `xml:"urn:pbm PbmQueryReplicationGroupsResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQueryReplicationGroupsBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQueryReplicationGroups(ctx context.Context, r soap.RoundTripper, req *types.PbmQueryReplicationGroups) (*types.PbmQueryReplicationGroupsResponse, error) {
|
||||||
|
var reqBody, resBody PbmQueryReplicationGroupsBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmQuerySpaceStatsForStorageContainerBody struct {
|
||||||
|
Req *types.PbmQuerySpaceStatsForStorageContainer `xml:"urn:pbm PbmQuerySpaceStatsForStorageContainer,omitempty"`
|
||||||
|
Res *types.PbmQuerySpaceStatsForStorageContainerResponse `xml:"urn:pbm PbmQuerySpaceStatsForStorageContainerResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmQuerySpaceStatsForStorageContainerBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmQuerySpaceStatsForStorageContainer(ctx context.Context, r soap.RoundTripper, req *types.PbmQuerySpaceStatsForStorageContainer) (*types.PbmQuerySpaceStatsForStorageContainerResponse, error) {
|
||||||
|
var reqBody, resBody PbmQuerySpaceStatsForStorageContainerBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmResetDefaultRequirementProfileBody struct {
|
||||||
|
Req *types.PbmResetDefaultRequirementProfile `xml:"urn:pbm PbmResetDefaultRequirementProfile,omitempty"`
|
||||||
|
Res *types.PbmResetDefaultRequirementProfileResponse `xml:"urn:pbm PbmResetDefaultRequirementProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmResetDefaultRequirementProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmResetDefaultRequirementProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmResetDefaultRequirementProfile) (*types.PbmResetDefaultRequirementProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmResetDefaultRequirementProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmResetVSanDefaultProfileBody struct {
|
||||||
|
Req *types.PbmResetVSanDefaultProfile `xml:"urn:pbm PbmResetVSanDefaultProfile,omitempty"`
|
||||||
|
Res *types.PbmResetVSanDefaultProfileResponse `xml:"urn:pbm PbmResetVSanDefaultProfileResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmResetVSanDefaultProfileBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmResetVSanDefaultProfile(ctx context.Context, r soap.RoundTripper, req *types.PbmResetVSanDefaultProfile) (*types.PbmResetVSanDefaultProfileResponse, error) {
|
||||||
|
var reqBody, resBody PbmResetVSanDefaultProfileBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmRetrieveContentBody struct {
|
||||||
|
Req *types.PbmRetrieveContent `xml:"urn:pbm PbmRetrieveContent,omitempty"`
|
||||||
|
Res *types.PbmRetrieveContentResponse `xml:"urn:pbm PbmRetrieveContentResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmRetrieveContentBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmRetrieveContent(ctx context.Context, r soap.RoundTripper, req *types.PbmRetrieveContent) (*types.PbmRetrieveContentResponse, error) {
|
||||||
|
var reqBody, resBody PbmRetrieveContentBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmRetrieveServiceContentBody struct {
|
||||||
|
Req *types.PbmRetrieveServiceContent `xml:"urn:pbm PbmRetrieveServiceContent,omitempty"`
|
||||||
|
Res *types.PbmRetrieveServiceContentResponse `xml:"urn:pbm PbmRetrieveServiceContentResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmRetrieveServiceContentBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmRetrieveServiceContent(ctx context.Context, r soap.RoundTripper, req *types.PbmRetrieveServiceContent) (*types.PbmRetrieveServiceContentResponse, error) {
|
||||||
|
var reqBody, resBody PbmRetrieveServiceContentBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmUpdateBody struct {
|
||||||
|
Req *types.PbmUpdate `xml:"urn:pbm PbmUpdate,omitempty"`
|
||||||
|
Res *types.PbmUpdateResponse `xml:"urn:pbm PbmUpdateResponse,omitempty"`
|
||||||
|
Fault_ *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmUpdateBody) Fault() *soap.Fault { return b.Fault_ }
|
||||||
|
|
||||||
|
func PbmUpdate(ctx context.Context, r soap.RoundTripper, req *types.PbmUpdate) (*types.PbmUpdateResponse, error) {
|
||||||
|
var reqBody, resBody PbmUpdateBody
|
||||||
|
|
||||||
|
reqBody.Req = req
|
||||||
|
|
||||||
|
if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resBody.Res, nil
|
||||||
|
}
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 pbm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/pbm/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A struct to capture pbm create spec details.
|
||||||
|
type CapabilityProfileCreateSpec struct {
|
||||||
|
Name string
|
||||||
|
Description string
|
||||||
|
Category string
|
||||||
|
CapabilityList []Capability
|
||||||
|
}
|
||||||
|
|
||||||
|
// A struct to capture pbm capability instance details.
|
||||||
|
type Capability struct {
|
||||||
|
ID string
|
||||||
|
Namespace string
|
||||||
|
PropertyList []Property
|
||||||
|
}
|
||||||
|
|
||||||
|
// A struct to capture pbm property instance details.
|
||||||
|
type Property struct {
|
||||||
|
ID string
|
||||||
|
Operator string
|
||||||
|
Value string
|
||||||
|
DataType string
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateCapabilityProfileSpec(pbmCreateSpec CapabilityProfileCreateSpec) (*types.PbmCapabilityProfileCreateSpec, error) {
|
||||||
|
capabilities, err := createCapabilityInstances(pbmCreateSpec.CapabilityList)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pbmCapabilityProfileSpec := types.PbmCapabilityProfileCreateSpec{
|
||||||
|
Name: pbmCreateSpec.Name,
|
||||||
|
Description: pbmCreateSpec.Description,
|
||||||
|
Category: pbmCreateSpec.Category,
|
||||||
|
ResourceType: types.PbmProfileResourceType{
|
||||||
|
ResourceType: string(types.PbmProfileResourceTypeEnumSTORAGE),
|
||||||
|
},
|
||||||
|
Constraints: &types.PbmCapabilitySubProfileConstraints{
|
||||||
|
SubProfiles: []types.PbmCapabilitySubProfile{
|
||||||
|
types.PbmCapabilitySubProfile{
|
||||||
|
Capability: capabilities,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return &pbmCapabilityProfileSpec, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func createCapabilityInstances(rules []Capability) ([]types.PbmCapabilityInstance, error) {
|
||||||
|
var capabilityInstances []types.PbmCapabilityInstance
|
||||||
|
for _, capabilityRule := range rules {
|
||||||
|
capability := types.PbmCapabilityInstance{
|
||||||
|
Id: types.PbmCapabilityMetadataUniqueId{
|
||||||
|
Namespace: capabilityRule.Namespace,
|
||||||
|
Id: capabilityRule.ID,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var propertyInstances []types.PbmCapabilityPropertyInstance
|
||||||
|
for _, propertyRule := range capabilityRule.PropertyList {
|
||||||
|
property := types.PbmCapabilityPropertyInstance{
|
||||||
|
Id: propertyRule.ID,
|
||||||
|
}
|
||||||
|
if propertyRule.Operator != "" {
|
||||||
|
property.Operator = propertyRule.Operator
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
switch strings.ToLower(propertyRule.DataType) {
|
||||||
|
case "int":
|
||||||
|
// Go int32 is marshalled to xsi:int whereas Go int is marshalled to xsi:long when sending down the wire.
|
||||||
|
var val int32
|
||||||
|
val, err = verifyPropertyValueIsInt(propertyRule.Value, propertyRule.DataType)
|
||||||
|
property.Value = val
|
||||||
|
case "bool":
|
||||||
|
var val bool
|
||||||
|
val, err = verifyPropertyValueIsBoolean(propertyRule.Value, propertyRule.DataType)
|
||||||
|
property.Value = val
|
||||||
|
case "string":
|
||||||
|
property.Value = propertyRule.Value
|
||||||
|
case "set":
|
||||||
|
set := types.PbmCapabilityDiscreteSet{}
|
||||||
|
for _, val := range strings.Split(propertyRule.Value, ",") {
|
||||||
|
set.Values = append(set.Values, val)
|
||||||
|
}
|
||||||
|
property.Value = set
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("invalid value: %q with datatype: %q", propertyRule.Value, propertyRule.Value)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid value: %q with datatype: %q", propertyRule.Value, propertyRule.Value)
|
||||||
|
}
|
||||||
|
propertyInstances = append(propertyInstances, property)
|
||||||
|
}
|
||||||
|
constraintInstances := []types.PbmCapabilityConstraintInstance{
|
||||||
|
types.PbmCapabilityConstraintInstance{
|
||||||
|
PropertyInstance: propertyInstances,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
capability.Constraint = constraintInstances
|
||||||
|
capabilityInstances = append(capabilityInstances, capability)
|
||||||
|
}
|
||||||
|
return capabilityInstances, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify if the capability value is of type integer.
|
||||||
|
func verifyPropertyValueIsInt(propertyValue string, dataType string) (int32, error) {
|
||||||
|
val, err := strconv.ParseInt(propertyValue, 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
return int32(val), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify if the capability value is of type integer.
|
||||||
|
func verifyPropertyValueIsBoolean(propertyValue string, dataType string) (bool, error) {
|
||||||
|
val, err := strconv.ParseBool(propertyValue)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return val, nil
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"enum.go",
|
||||||
|
"if.go",
|
||||||
|
"types.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/vmware/govmomi/vim25/types:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
|
@ -0,0 +1,211 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014-2017 VMware, Inc. 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 types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PbmBuiltinGenericType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmBuiltinGenericTypeVMW_RANGE = PbmBuiltinGenericType("VMW_RANGE")
|
||||||
|
PbmBuiltinGenericTypeVMW_SET = PbmBuiltinGenericType("VMW_SET")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmBuiltinGenericType", reflect.TypeOf((*PbmBuiltinGenericType)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmBuiltinType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmBuiltinTypeXSD_LONG = PbmBuiltinType("XSD_LONG")
|
||||||
|
PbmBuiltinTypeXSD_SHORT = PbmBuiltinType("XSD_SHORT")
|
||||||
|
PbmBuiltinTypeXSD_INTEGER = PbmBuiltinType("XSD_INTEGER")
|
||||||
|
PbmBuiltinTypeXSD_INT = PbmBuiltinType("XSD_INT")
|
||||||
|
PbmBuiltinTypeXSD_STRING = PbmBuiltinType("XSD_STRING")
|
||||||
|
PbmBuiltinTypeXSD_BOOLEAN = PbmBuiltinType("XSD_BOOLEAN")
|
||||||
|
PbmBuiltinTypeXSD_DOUBLE = PbmBuiltinType("XSD_DOUBLE")
|
||||||
|
PbmBuiltinTypeXSD_DATETIME = PbmBuiltinType("XSD_DATETIME")
|
||||||
|
PbmBuiltinTypeVMW_TIMESPAN = PbmBuiltinType("VMW_TIMESPAN")
|
||||||
|
PbmBuiltinTypeVMW_POLICY = PbmBuiltinType("VMW_POLICY")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmBuiltinType", reflect.TypeOf((*PbmBuiltinType)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCapabilityOperator string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmCapabilityOperatorNOT = PbmCapabilityOperator("NOT")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmCapabilityOperator", reflect.TypeOf((*PbmCapabilityOperator)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmCapabilityTimeUnitType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmCapabilityTimeUnitTypeSECONDS = PbmCapabilityTimeUnitType("SECONDS")
|
||||||
|
PbmCapabilityTimeUnitTypeMINUTES = PbmCapabilityTimeUnitType("MINUTES")
|
||||||
|
PbmCapabilityTimeUnitTypeHOURS = PbmCapabilityTimeUnitType("HOURS")
|
||||||
|
PbmCapabilityTimeUnitTypeDAYS = PbmCapabilityTimeUnitType("DAYS")
|
||||||
|
PbmCapabilityTimeUnitTypeWEEKS = PbmCapabilityTimeUnitType("WEEKS")
|
||||||
|
PbmCapabilityTimeUnitTypeMONTHS = PbmCapabilityTimeUnitType("MONTHS")
|
||||||
|
PbmCapabilityTimeUnitTypeYEARS = PbmCapabilityTimeUnitType("YEARS")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmCapabilityTimeUnitType", reflect.TypeOf((*PbmCapabilityTimeUnitType)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmComplianceResultComplianceTaskStatus string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmComplianceResultComplianceTaskStatusInProgress = PbmComplianceResultComplianceTaskStatus("inProgress")
|
||||||
|
PbmComplianceResultComplianceTaskStatusSuccess = PbmComplianceResultComplianceTaskStatus("success")
|
||||||
|
PbmComplianceResultComplianceTaskStatusFailed = PbmComplianceResultComplianceTaskStatus("failed")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmComplianceResultComplianceTaskStatus", reflect.TypeOf((*PbmComplianceResultComplianceTaskStatus)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmComplianceStatus string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmComplianceStatusCompliant = PbmComplianceStatus("compliant")
|
||||||
|
PbmComplianceStatusNonCompliant = PbmComplianceStatus("nonCompliant")
|
||||||
|
PbmComplianceStatusUnknown = PbmComplianceStatus("unknown")
|
||||||
|
PbmComplianceStatusNotApplicable = PbmComplianceStatus("notApplicable")
|
||||||
|
PbmComplianceStatusOutOfDate = PbmComplianceStatus("outOfDate")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmComplianceStatus", reflect.TypeOf((*PbmComplianceStatus)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmIofilterInfoFilterType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmIofilterInfoFilterTypeINSPECTION = PbmIofilterInfoFilterType("INSPECTION")
|
||||||
|
PbmIofilterInfoFilterTypeCOMPRESSION = PbmIofilterInfoFilterType("COMPRESSION")
|
||||||
|
PbmIofilterInfoFilterTypeENCRYPTION = PbmIofilterInfoFilterType("ENCRYPTION")
|
||||||
|
PbmIofilterInfoFilterTypeREPLICATION = PbmIofilterInfoFilterType("REPLICATION")
|
||||||
|
PbmIofilterInfoFilterTypeCACHE = PbmIofilterInfoFilterType("CACHE")
|
||||||
|
PbmIofilterInfoFilterTypeDATAPROVIDER = PbmIofilterInfoFilterType("DATAPROVIDER")
|
||||||
|
PbmIofilterInfoFilterTypeDATASTOREIOCONTROL = PbmIofilterInfoFilterType("DATASTOREIOCONTROL")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmIofilterInfoFilterType", reflect.TypeOf((*PbmIofilterInfoFilterType)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmLineOfServiceInfoLineOfServiceEnum string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumINSPECTION = PbmLineOfServiceInfoLineOfServiceEnum("INSPECTION")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumCOMPRESSION = PbmLineOfServiceInfoLineOfServiceEnum("COMPRESSION")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumENCRYPTION = PbmLineOfServiceInfoLineOfServiceEnum("ENCRYPTION")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumREPLICATION = PbmLineOfServiceInfoLineOfServiceEnum("REPLICATION")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumCACHING = PbmLineOfServiceInfoLineOfServiceEnum("CACHING")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumPERSISTENCE = PbmLineOfServiceInfoLineOfServiceEnum("PERSISTENCE")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumDATA_PROVIDER = PbmLineOfServiceInfoLineOfServiceEnum("DATA_PROVIDER")
|
||||||
|
PbmLineOfServiceInfoLineOfServiceEnumDATASTORE_IO_CONTROL = PbmLineOfServiceInfoLineOfServiceEnum("DATASTORE_IO_CONTROL")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmLineOfServiceInfoLineOfServiceEnum", reflect.TypeOf((*PbmLineOfServiceInfoLineOfServiceEnum)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmObjectType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmObjectTypeVirtualMachine = PbmObjectType("virtualMachine")
|
||||||
|
PbmObjectTypeVirtualMachineAndDisks = PbmObjectType("virtualMachineAndDisks")
|
||||||
|
PbmObjectTypeVirtualDiskId = PbmObjectType("virtualDiskId")
|
||||||
|
PbmObjectTypeVirtualDiskUUID = PbmObjectType("virtualDiskUUID")
|
||||||
|
PbmObjectTypeDatastore = PbmObjectType("datastore")
|
||||||
|
PbmObjectTypeUnknown = PbmObjectType("unknown")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmObjectType", reflect.TypeOf((*PbmObjectType)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmProfileCategoryEnum string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmProfileCategoryEnumREQUIREMENT = PbmProfileCategoryEnum("REQUIREMENT")
|
||||||
|
PbmProfileCategoryEnumRESOURCE = PbmProfileCategoryEnum("RESOURCE")
|
||||||
|
PbmProfileCategoryEnumDATA_SERVICE_POLICY = PbmProfileCategoryEnum("DATA_SERVICE_POLICY")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmProfileCategoryEnum", reflect.TypeOf((*PbmProfileCategoryEnum)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmProfileResourceTypeEnum string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmProfileResourceTypeEnumSTORAGE = PbmProfileResourceTypeEnum("STORAGE")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmProfileResourceTypeEnum", reflect.TypeOf((*PbmProfileResourceTypeEnum)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmSystemCreatedProfileType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmSystemCreatedProfileTypeVsanDefaultProfile = PbmSystemCreatedProfileType("VsanDefaultProfile")
|
||||||
|
PbmSystemCreatedProfileTypeVVolDefaultProfile = PbmSystemCreatedProfileType("VVolDefaultProfile")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmSystemCreatedProfileType", reflect.TypeOf((*PbmSystemCreatedProfileType)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmVmOperation string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmVmOperationCREATE = PbmVmOperation("CREATE")
|
||||||
|
PbmVmOperationRECONFIGURE = PbmVmOperation("RECONFIGURE")
|
||||||
|
PbmVmOperationMIGRATE = PbmVmOperation("MIGRATE")
|
||||||
|
PbmVmOperationCLONE = PbmVmOperation("CLONE")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmVmOperation", reflect.TypeOf((*PbmVmOperation)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
type PbmVvolType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PbmVvolTypeConfig = PbmVvolType("Config")
|
||||||
|
PbmVvolTypeData = PbmVvolType("Data")
|
||||||
|
PbmVvolTypeSwap = PbmVvolType("Swap")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("pbm:PbmVvolType", reflect.TypeOf((*PbmVvolType)(nil)).Elem())
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014-2017 VMware, Inc. 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 types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (b *PbmCapabilityConstraints) GetPbmCapabilityConstraints() *PbmCapabilityConstraints { return b }
|
||||||
|
|
||||||
|
type BasePbmCapabilityConstraints interface {
|
||||||
|
GetPbmCapabilityConstraints() *PbmCapabilityConstraints
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmCapabilityConstraints", reflect.TypeOf((*PbmCapabilityConstraints)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCapabilityProfile) GetPbmCapabilityProfile() *PbmCapabilityProfile { return b }
|
||||||
|
|
||||||
|
type BasePbmCapabilityProfile interface {
|
||||||
|
GetPbmCapabilityProfile() *PbmCapabilityProfile
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmCapabilityProfile", reflect.TypeOf((*PbmCapabilityProfile)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCapabilityProfilePropertyMismatchFault) GetPbmCapabilityProfilePropertyMismatchFault() *PbmCapabilityProfilePropertyMismatchFault {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
type BasePbmCapabilityProfilePropertyMismatchFault interface {
|
||||||
|
GetPbmCapabilityProfilePropertyMismatchFault() *PbmCapabilityProfilePropertyMismatchFault
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmCapabilityProfilePropertyMismatchFault", reflect.TypeOf((*PbmCapabilityProfilePropertyMismatchFault)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCapabilityTypeInfo) GetPbmCapabilityTypeInfo() *PbmCapabilityTypeInfo { return b }
|
||||||
|
|
||||||
|
type BasePbmCapabilityTypeInfo interface {
|
||||||
|
GetPbmCapabilityTypeInfo() *PbmCapabilityTypeInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmCapabilityTypeInfo", reflect.TypeOf((*PbmCapabilityTypeInfo)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmCompatibilityCheckFault) GetPbmCompatibilityCheckFault() *PbmCompatibilityCheckFault {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
type BasePbmCompatibilityCheckFault interface {
|
||||||
|
GetPbmCompatibilityCheckFault() *PbmCompatibilityCheckFault
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmCompatibilityCheckFault", reflect.TypeOf((*PbmCompatibilityCheckFault)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmFault) GetPbmFault() *PbmFault { return b }
|
||||||
|
|
||||||
|
type BasePbmFault interface {
|
||||||
|
GetPbmFault() *PbmFault
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmFault", reflect.TypeOf((*PbmFault)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmLineOfServiceInfo) GetPbmLineOfServiceInfo() *PbmLineOfServiceInfo { return b }
|
||||||
|
|
||||||
|
type BasePbmLineOfServiceInfo interface {
|
||||||
|
GetPbmLineOfServiceInfo() *PbmLineOfServiceInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmLineOfServiceInfo", reflect.TypeOf((*PbmLineOfServiceInfo)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmPlacementMatchingResources) GetPbmPlacementMatchingResources() *PbmPlacementMatchingResources {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
type BasePbmPlacementMatchingResources interface {
|
||||||
|
GetPbmPlacementMatchingResources() *PbmPlacementMatchingResources
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmPlacementMatchingResources", reflect.TypeOf((*PbmPlacementMatchingResources)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmPlacementRequirement) GetPbmPlacementRequirement() *PbmPlacementRequirement { return b }
|
||||||
|
|
||||||
|
type BasePbmPlacementRequirement interface {
|
||||||
|
GetPbmPlacementRequirement() *PbmPlacementRequirement
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmPlacementRequirement", reflect.TypeOf((*PbmPlacementRequirement)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmProfile) GetPbmProfile() *PbmProfile { return b }
|
||||||
|
|
||||||
|
type BasePbmProfile interface {
|
||||||
|
GetPbmProfile() *PbmProfile
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmProfile", reflect.TypeOf((*PbmProfile)(nil)).Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *PbmPropertyMismatchFault) GetPbmPropertyMismatchFault() *PbmPropertyMismatchFault { return b }
|
||||||
|
|
||||||
|
type BasePbmPropertyMismatchFault interface {
|
||||||
|
GetPbmPropertyMismatchFault() *PbmPropertyMismatchFault
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
types.Add("BasePbmPropertyMismatchFault", reflect.TypeOf((*PbmPropertyMismatchFault)(nil)).Elem())
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -11,6 +11,7 @@ go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
"collector.go",
|
"collector.go",
|
||||||
|
"filter.go",
|
||||||
"wait.go",
|
"wait.go",
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
|
|
|
@ -164,9 +164,36 @@ func (p *Collector) Retrieve(ctx context.Context, objs []types.ManagedObjectRefe
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d, ok := dst.(*[]types.ObjectContent); ok {
|
||||||
|
*d = res.Returnval
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
return mo.LoadRetrievePropertiesResponse(res, dst)
|
return mo.LoadRetrievePropertiesResponse(res, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RetrieveWithFilter populates dst as Retrieve does, but only for entities matching the given filter.
|
||||||
|
func (p *Collector) RetrieveWithFilter(ctx context.Context, objs []types.ManagedObjectReference, ps []string, dst interface{}, filter Filter) error {
|
||||||
|
if len(filter) == 0 {
|
||||||
|
return p.Retrieve(ctx, objs, ps, dst)
|
||||||
|
}
|
||||||
|
|
||||||
|
var content []types.ObjectContent
|
||||||
|
|
||||||
|
err := p.Retrieve(ctx, objs, filter.Keys(), &content)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
objs = filter.MatchObjectContent(content)
|
||||||
|
|
||||||
|
if len(objs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return p.Retrieve(ctx, objs, ps, dst)
|
||||||
|
}
|
||||||
|
|
||||||
// RetrieveOne calls Retrieve with a single managed object reference.
|
// RetrieveOne calls Retrieve with a single managed object reference.
|
||||||
func (p *Collector) RetrieveOne(ctx context.Context, obj types.ManagedObjectReference, ps []string, dst interface{}) error {
|
func (p *Collector) RetrieveOne(ctx context.Context, obj types.ManagedObjectReference, ps []string, dst interface{}) error {
|
||||||
var objs = []types.ManagedObjectReference{obj}
|
var objs = []types.ManagedObjectReference{obj}
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2017 VMware, Inc. 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 property
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/vmware/govmomi/vim25/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Filter provides methods for matching against types.DynamicProperty
|
||||||
|
type Filter map[string]types.AnyType
|
||||||
|
|
||||||
|
// Keys returns the Filter map keys as a []string
|
||||||
|
func (f Filter) Keys() []string {
|
||||||
|
keys := make([]string, 0, len(f))
|
||||||
|
|
||||||
|
for key := range f {
|
||||||
|
keys = append(keys, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys
|
||||||
|
}
|
||||||
|
|
||||||
|
// MatchProperty returns true if a Filter entry matches the given prop.
|
||||||
|
func (f Filter) MatchProperty(prop types.DynamicProperty) bool {
|
||||||
|
match, ok := f[prop.Name]
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if match == prop.Val {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
ptype := reflect.TypeOf(prop.Val)
|
||||||
|
|
||||||
|
if strings.HasPrefix(ptype.Name(), "ArrayOf") {
|
||||||
|
pval := reflect.ValueOf(prop.Val).Field(0)
|
||||||
|
|
||||||
|
for i := 0; i < pval.Len(); i++ {
|
||||||
|
prop.Val = pval.Index(i).Interface()
|
||||||
|
|
||||||
|
if f.MatchProperty(prop) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if reflect.TypeOf(match) != ptype {
|
||||||
|
s, ok := match.(string)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert if we can
|
||||||
|
switch prop.Val.(type) {
|
||||||
|
case bool:
|
||||||
|
match, _ = strconv.ParseBool(s)
|
||||||
|
case int16:
|
||||||
|
x, _ := strconv.ParseInt(s, 10, 16)
|
||||||
|
match = int16(x)
|
||||||
|
case int32:
|
||||||
|
x, _ := strconv.ParseInt(s, 10, 32)
|
||||||
|
match = int32(x)
|
||||||
|
case int64:
|
||||||
|
match, _ = strconv.ParseInt(s, 10, 64)
|
||||||
|
case float32:
|
||||||
|
x, _ := strconv.ParseFloat(s, 32)
|
||||||
|
match = float32(x)
|
||||||
|
case float64:
|
||||||
|
match, _ = strconv.ParseFloat(s, 64)
|
||||||
|
case fmt.Stringer:
|
||||||
|
prop.Val = prop.Val.(fmt.Stringer).String()
|
||||||
|
default:
|
||||||
|
if ptype.Kind() != reflect.String {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// An enum type we can convert to a string type
|
||||||
|
prop.Val = reflect.ValueOf(prop.Val).String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch pval := prop.Val.(type) {
|
||||||
|
case string:
|
||||||
|
m, _ := filepath.Match(match.(string), pval)
|
||||||
|
return m
|
||||||
|
default:
|
||||||
|
return reflect.DeepEqual(match, pval)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MatchPropertyList returns true if all given props match the Filter.
|
||||||
|
func (f Filter) MatchPropertyList(props []types.DynamicProperty) bool {
|
||||||
|
for _, p := range props {
|
||||||
|
if !f.MatchProperty(p) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// MatchObjectContent returns a list of ObjectContent.Obj where the ObjectContent.PropSet matches the Filter.
|
||||||
|
func (f Filter) MatchObjectContent(objects []types.ObjectContent) []types.ManagedObjectReference {
|
||||||
|
var refs []types.ManagedObjectReference
|
||||||
|
|
||||||
|
for _, o := range objects {
|
||||||
|
if f.MatchPropertyList(o.PropSet) {
|
||||||
|
refs = append(refs, o.Obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return refs
|
||||||
|
}
|
|
@ -68,6 +68,11 @@ func (t *taskCallback) fn(pc []types.PropertyChange) bool {
|
||||||
t.info = &ti
|
t.info = &ti
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.info could be nil if pc can't satify the rules above
|
||||||
|
if t.info == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
pr := taskProgress{t.info}
|
pr := taskProgress{t.info}
|
||||||
|
|
||||||
// Store copy of error, so Wait() can return it as well.
|
// Store copy of error, so Wait() can return it as well.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -104,6 +104,8 @@ func Ancestors(ctx context.Context, rt soap.RoundTripper, pc, obj types.ManagedO
|
||||||
me.Name = x.Name
|
me.Name = x.Name
|
||||||
case DistributedVirtualPortgroup:
|
case DistributedVirtualPortgroup:
|
||||||
me.Name = x.Name
|
me.Name = x.Name
|
||||||
|
case OpaqueNetwork:
|
||||||
|
me.Name = x.Name
|
||||||
default:
|
default:
|
||||||
// ManagedEntity always has a Name, if we hit this point we missed a case above.
|
// ManagedEntity always has a Name, if we hit this point we missed a case above.
|
||||||
panic(fmt.Sprintf("%#v Name is empty", me.Reference()))
|
panic(fmt.Sprintf("%#v Name is empty", me.Reference()))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -150,6 +150,30 @@ func init() {
|
||||||
t["ContainerView"] = reflect.TypeOf((*ContainerView)(nil)).Elem()
|
t["ContainerView"] = reflect.TypeOf((*ContainerView)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CryptoManager struct {
|
||||||
|
Self types.ManagedObjectReference
|
||||||
|
|
||||||
|
Enabled bool `mo:"enabled"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m CryptoManager) Reference() types.ManagedObjectReference {
|
||||||
|
return m.Self
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["CryptoManager"] = reflect.TypeOf((*CryptoManager)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoManagerKmip struct {
|
||||||
|
CryptoManager
|
||||||
|
|
||||||
|
KmipServers []types.KmipClusterInfo `mo:"kmipServers"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["CryptoManagerKmip"] = reflect.TypeOf((*CryptoManagerKmip)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
type CustomFieldsManager struct {
|
type CustomFieldsManager struct {
|
||||||
Self types.ManagedObjectReference
|
Self types.ManagedObjectReference
|
||||||
|
|
||||||
|
@ -356,6 +380,34 @@ func init() {
|
||||||
t["ExtensionManager"] = reflect.TypeOf((*ExtensionManager)(nil)).Elem()
|
t["ExtensionManager"] = reflect.TypeOf((*ExtensionManager)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FailoverClusterConfigurator struct {
|
||||||
|
Self types.ManagedObjectReference
|
||||||
|
|
||||||
|
DisabledConfigureMethod []string `mo:"disabledConfigureMethod"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m FailoverClusterConfigurator) Reference() types.ManagedObjectReference {
|
||||||
|
return m.Self
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["FailoverClusterConfigurator"] = reflect.TypeOf((*FailoverClusterConfigurator)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
|
type FailoverClusterManager struct {
|
||||||
|
Self types.ManagedObjectReference
|
||||||
|
|
||||||
|
DisabledClusterMethod []string `mo:"disabledClusterMethod"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m FailoverClusterManager) Reference() types.ManagedObjectReference {
|
||||||
|
return m.Self
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["FailoverClusterManager"] = reflect.TypeOf((*FailoverClusterManager)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
type FileManager struct {
|
type FileManager struct {
|
||||||
Self types.ManagedObjectReference
|
Self types.ManagedObjectReference
|
||||||
}
|
}
|
||||||
|
@ -461,6 +513,18 @@ func init() {
|
||||||
t["GuestWindowsRegistryManager"] = reflect.TypeOf((*GuestWindowsRegistryManager)(nil)).Elem()
|
t["GuestWindowsRegistryManager"] = reflect.TypeOf((*GuestWindowsRegistryManager)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HealthUpdateManager struct {
|
||||||
|
Self types.ManagedObjectReference
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m HealthUpdateManager) Reference() types.ManagedObjectReference {
|
||||||
|
return m.Self
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["HealthUpdateManager"] = reflect.TypeOf((*HealthUpdateManager)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
type HistoryCollector struct {
|
type HistoryCollector struct {
|
||||||
Self types.ManagedObjectReference
|
Self types.ManagedObjectReference
|
||||||
|
|
||||||
|
@ -696,6 +760,7 @@ type HostGraphicsManager struct {
|
||||||
ExtensibleManagedObject
|
ExtensibleManagedObject
|
||||||
|
|
||||||
GraphicsInfo []types.HostGraphicsInfo `mo:"graphicsInfo"`
|
GraphicsInfo []types.HostGraphicsInfo `mo:"graphicsInfo"`
|
||||||
|
GraphicsConfig *types.HostGraphicsConfig `mo:"graphicsConfig"`
|
||||||
SharedPassthruGpuTypes []string `mo:"sharedPassthruGpuTypes"`
|
SharedPassthruGpuTypes []string `mo:"sharedPassthruGpuTypes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -804,6 +869,7 @@ type HostPciPassthruSystem struct {
|
||||||
ExtensibleManagedObject
|
ExtensibleManagedObject
|
||||||
|
|
||||||
PciPassthruInfo []types.BaseHostPciPassthruInfo `mo:"pciPassthruInfo"`
|
PciPassthruInfo []types.BaseHostPciPassthruInfo `mo:"pciPassthruInfo"`
|
||||||
|
SriovDevicePoolInfo []types.BaseHostSriovDevicePoolInfo `mo:"sriovDevicePoolInfo"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -868,6 +934,18 @@ func init() {
|
||||||
t["HostSnmpSystem"] = reflect.TypeOf((*HostSnmpSystem)(nil)).Elem()
|
t["HostSnmpSystem"] = reflect.TypeOf((*HostSnmpSystem)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HostSpecificationManager struct {
|
||||||
|
Self types.ManagedObjectReference
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m HostSpecificationManager) Reference() types.ManagedObjectReference {
|
||||||
|
return m.Self
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["HostSpecificationManager"] = reflect.TypeOf((*HostSpecificationManager)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
type HostStorageSystem struct {
|
type HostStorageSystem struct {
|
||||||
ExtensibleManagedObject
|
ExtensibleManagedObject
|
||||||
|
|
||||||
|
@ -931,6 +1009,14 @@ func init() {
|
||||||
t["HostVMotionSystem"] = reflect.TypeOf((*HostVMotionSystem)(nil)).Elem()
|
t["HostVMotionSystem"] = reflect.TypeOf((*HostVMotionSystem)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HostVStorageObjectManager struct {
|
||||||
|
VStorageObjectManagerBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["HostVStorageObjectManager"] = reflect.TypeOf((*HostVStorageObjectManager)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
type HostVirtualNicManager struct {
|
type HostVirtualNicManager struct {
|
||||||
ExtensibleManagedObject
|
ExtensibleManagedObject
|
||||||
|
|
||||||
|
@ -984,18 +1070,6 @@ func init() {
|
||||||
t["HttpNfcLease"] = reflect.TypeOf((*HttpNfcLease)(nil)).Elem()
|
t["HttpNfcLease"] = reflect.TypeOf((*HttpNfcLease)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
type InternalDynamicTypeManager struct {
|
|
||||||
Self types.ManagedObjectReference
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m InternalDynamicTypeManager) Reference() types.ManagedObjectReference {
|
|
||||||
return m.Self
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
t["InternalDynamicTypeManager"] = reflect.TypeOf((*InternalDynamicTypeManager)(nil)).Elem()
|
|
||||||
}
|
|
||||||
|
|
||||||
type InventoryView struct {
|
type InventoryView struct {
|
||||||
ManagedObjectView
|
ManagedObjectView
|
||||||
}
|
}
|
||||||
|
@ -1163,6 +1237,9 @@ func init() {
|
||||||
|
|
||||||
type OpaqueNetwork struct {
|
type OpaqueNetwork struct {
|
||||||
Network
|
Network
|
||||||
|
|
||||||
|
Capability *types.OpaqueNetworkCapability `mo:"capability"`
|
||||||
|
ExtraConfig []types.BaseOptionValue `mo:"extraConfig"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -1302,18 +1379,6 @@ func init() {
|
||||||
t["PropertyFilter"] = reflect.TypeOf((*PropertyFilter)(nil)).Elem()
|
t["PropertyFilter"] = reflect.TypeOf((*PropertyFilter)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReflectManagedMethodExecuter struct {
|
|
||||||
Self types.ManagedObjectReference
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m ReflectManagedMethodExecuter) Reference() types.ManagedObjectReference {
|
|
||||||
return m.Self
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
t["ReflectManagedMethodExecuter"] = reflect.TypeOf((*ReflectManagedMethodExecuter)(nil)).Elem()
|
|
||||||
}
|
|
||||||
|
|
||||||
type ResourcePlanningManager struct {
|
type ResourcePlanningManager struct {
|
||||||
Self types.ManagedObjectReference
|
Self types.ManagedObjectReference
|
||||||
}
|
}
|
||||||
|
@ -1520,6 +1585,26 @@ func init() {
|
||||||
t["UserDirectory"] = reflect.TypeOf((*UserDirectory)(nil)).Elem()
|
t["UserDirectory"] = reflect.TypeOf((*UserDirectory)(nil)).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type VStorageObjectManagerBase struct {
|
||||||
|
Self types.ManagedObjectReference
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m VStorageObjectManagerBase) Reference() types.ManagedObjectReference {
|
||||||
|
return m.Self
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["VStorageObjectManagerBase"] = reflect.TypeOf((*VStorageObjectManagerBase)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
|
type VcenterVStorageObjectManager struct {
|
||||||
|
VStorageObjectManagerBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
t["VcenterVStorageObjectManager"] = reflect.TypeOf((*VcenterVStorageObjectManager)(nil)).Elem()
|
||||||
|
}
|
||||||
|
|
||||||
type View struct {
|
type View struct {
|
||||||
Self types.ManagedObjectReference
|
Self types.ManagedObjectReference
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,10 @@ const (
|
||||||
DefaultMinVimVersion = "5.5"
|
DefaultMinVimVersion = "5.5"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type header struct {
|
||||||
|
Cookie string `xml:"vcSessionCookie,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
http.Client
|
http.Client
|
||||||
|
|
||||||
|
@ -73,6 +77,8 @@ type Client struct {
|
||||||
Namespace string // Vim namespace
|
Namespace string // Vim namespace
|
||||||
Version string // Vim version
|
Version string // Vim version
|
||||||
UserAgent string
|
UserAgent string
|
||||||
|
|
||||||
|
header *header
|
||||||
}
|
}
|
||||||
|
|
||||||
var schemeMatch = regexp.MustCompile(`^\w+://`)
|
var schemeMatch = regexp.MustCompile(`^\w+://`)
|
||||||
|
@ -147,6 +153,32 @@ func NewClient(u *url.URL, insecure bool) *Client {
|
||||||
return &c
|
return &c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewServiceClient creates a NewClient with the given URL.Path and namespace.
|
||||||
|
func (c *Client) NewServiceClient(path string, namespace string) *Client {
|
||||||
|
u := c.URL()
|
||||||
|
u.Path = path
|
||||||
|
|
||||||
|
client := NewClient(u, c.k)
|
||||||
|
|
||||||
|
client.Namespace = namespace
|
||||||
|
|
||||||
|
// Copy the cookies
|
||||||
|
client.Client.Jar.SetCookies(u, c.Client.Jar.Cookies(u))
|
||||||
|
|
||||||
|
// Set SOAP Header cookie
|
||||||
|
for _, cookie := range client.Jar.Cookies(u) {
|
||||||
|
if cookie.Name == "vmware_soap_session" {
|
||||||
|
client.header = &header{
|
||||||
|
Cookie: cookie.Value,
|
||||||
|
}
|
||||||
|
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return client
|
||||||
|
}
|
||||||
|
|
||||||
// SetRootCAs defines the set of root certificate authorities
|
// SetRootCAs defines the set of root certificate authorities
|
||||||
// that clients use when verifying server certificates.
|
// that clients use when verifying server certificates.
|
||||||
// By default TLS uses the host's root CA set.
|
// By default TLS uses the host's root CA set.
|
||||||
|
@ -401,6 +433,8 @@ func (c *Client) RoundTrip(ctx context.Context, reqBody, resBody HasFault) error
|
||||||
reqEnv := Envelope{Body: reqBody}
|
reqEnv := Envelope{Body: reqBody}
|
||||||
resEnv := Envelope{Body: resBody}
|
resEnv := Envelope{Body: resBody}
|
||||||
|
|
||||||
|
reqEnv.Header = c.header
|
||||||
|
|
||||||
// Create debugging context for this round trip
|
// Create debugging context for this round trip
|
||||||
d := c.d.newRoundTrip()
|
d := c.d.newRoundTrip()
|
||||||
if d.enabled() {
|
if d.enabled() {
|
||||||
|
|
|
@ -36,7 +36,13 @@ type soapFaultError struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s soapFaultError) Error() string {
|
func (s soapFaultError) Error() string {
|
||||||
return fmt.Sprintf("%s: %s", s.fault.Code, s.fault.String)
|
msg := s.fault.String
|
||||||
|
|
||||||
|
if msg == "" {
|
||||||
|
msg = reflect.TypeOf(s.fault.Detail.Fault).Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("%s: %s", s.fault.Code, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
type vimFaultError struct {
|
type vimFaultError struct {
|
||||||
|
|
|
@ -23,14 +23,10 @@ import (
|
||||||
|
|
||||||
type Envelope struct {
|
type Envelope struct {
|
||||||
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
|
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
|
||||||
Header *Header `xml:",omitempty"`
|
Header interface{} `xml:",omitempty"`
|
||||||
Body interface{}
|
Body interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Header struct {
|
|
||||||
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Header"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Fault struct {
|
type Fault struct {
|
||||||
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault"`
|
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault"`
|
||||||
Code string `xml:"faultcode"`
|
Code string `xml:"faultcode"`
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -46,3 +46,7 @@ func (r *ManagedObjectReference) FromString(o string) bool {
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PerfCounterInfo) Name() string {
|
||||||
|
return c.GroupInfo.GetElementDescription().Key + "." + c.NameInfo.GetElementDescription().Key + "." + string(c.RollupType)
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -16,15 +16,28 @@ limitations under the License.
|
||||||
|
|
||||||
package types
|
package types
|
||||||
|
|
||||||
import "reflect"
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
var t = map[string]reflect.Type{}
|
var t = map[string]reflect.Type{}
|
||||||
|
|
||||||
|
func Add(name string, kind reflect.Type) {
|
||||||
|
t[name] = kind
|
||||||
|
}
|
||||||
|
|
||||||
type Func func(string) (reflect.Type, bool)
|
type Func func(string) (reflect.Type, bool)
|
||||||
|
|
||||||
func TypeFunc() Func {
|
func TypeFunc() Func {
|
||||||
return func(name string) (reflect.Type, bool) {
|
return func(name string) (reflect.Type, bool) {
|
||||||
typ, ok := t[name]
|
typ, ok := t[name]
|
||||||
|
if !ok {
|
||||||
|
// The /sdk endpoint does not prefix types with the namespace,
|
||||||
|
// but extension endpoints, such as /pbm/sdk do.
|
||||||
|
name = strings.TrimPrefix(name, "vim25:")
|
||||||
|
typ, ok = t[name]
|
||||||
|
}
|
||||||
return typ, ok
|
return typ, ok
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -23,6 +23,8 @@ import (
|
||||||
|
|
||||||
var xmlSchemaInstance = Name{Space: "http://www.w3.org/2001/XMLSchema-instance", Local: "type"}
|
var xmlSchemaInstance = Name{Space: "http://www.w3.org/2001/XMLSchema-instance", Local: "type"}
|
||||||
|
|
||||||
|
var xsiType = Name{Space: "xsi", Local: "type"}
|
||||||
|
|
||||||
var stringToTypeMap = map[string]reflect.Type{
|
var stringToTypeMap = map[string]reflect.Type{
|
||||||
"xsd:boolean": reflect.TypeOf((*bool)(nil)).Elem(),
|
"xsd:boolean": reflect.TypeOf((*bool)(nil)).Elem(),
|
||||||
"xsd:byte": reflect.TypeOf((*int8)(nil)).Elem(),
|
"xsd:byte": reflect.TypeOf((*int8)(nil)).Elem(),
|
||||||
|
|
|
@ -272,13 +272,15 @@ var (
|
||||||
func (p *Decoder) typeForElement(val reflect.Value, start *StartElement) reflect.Type {
|
func (p *Decoder) typeForElement(val reflect.Value, start *StartElement) reflect.Type {
|
||||||
t := ""
|
t := ""
|
||||||
for i, a := range start.Attr {
|
for i, a := range start.Attr {
|
||||||
if a.Name == xmlSchemaInstance {
|
if a.Name == xmlSchemaInstance || a.Name == xsiType {
|
||||||
t = a.Value
|
t = a.Value
|
||||||
// HACK: ensure xsi:type is last in the list to avoid using that value for
|
// HACK: ensure xsi:type is last in the list to avoid using that value for
|
||||||
// a "type" attribute, such as ManagedObjectReference.Type for example.
|
// a "type" attribute, such as ManagedObjectReference.Type for example.
|
||||||
// Note that xsi:type is already the last attribute in VC/ESX responses.
|
// Note that xsi:type is already the last attribute in VC/ESX responses.
|
||||||
// This is only an issue with govmomi simulator generated responses.
|
// This is only an issue with govmomi simulator generated responses.
|
||||||
// Proper fix will require finding a few needles in this xml package haystack.
|
// Proper fix will require finding a few needles in this xml package haystack.
|
||||||
|
// Note: govmomi uses xmlSchemaInstance, other clients (e.g. rbvmomi) use xsiType.
|
||||||
|
// They are the same thing to XML parsers, but not to this hack here.
|
||||||
x := len(start.Attr) - 1
|
x := len(start.Attr) - 1
|
||||||
if i != x {
|
if i != x {
|
||||||
start.Attr[i] = start.Attr[x]
|
start.Attr[i] = start.Attr[x]
|
||||||
|
|
Loading…
Reference in New Issue