mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-07 03:03:59 +00:00
Merge pull request #17483 from brendandburns/kubectl5
Auto commit by PR queue bot
This commit is contained in:
commit
46c2df3e05
@ -479,6 +479,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -1220,6 +1236,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -1961,6 +1993,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -2670,6 +2718,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -3291,6 +3355,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -4217,6 +4297,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -4985,6 +5081,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -5587,6 +5699,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -7871,6 +7999,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -8612,6 +8756,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -9412,6 +9572,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -10212,6 +10388,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -10953,6 +11145,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
|
@ -310,6 +310,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -1110,6 +1126,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
@ -1910,6 +1942,22 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false
|
"allowMultiple": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "export",
|
||||||
|
"description": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"paramType": "query",
|
||||||
|
"name": "exact",
|
||||||
|
"description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
"required": false,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"paramType": "path",
|
"paramType": "path",
|
||||||
|
@ -1282,6 +1282,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -2288,6 +2304,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -3294,6 +3326,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -5530,7 +5578,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated 2015-12-08 11:56:55 UTC
|
Last updated 2015-12-15 06:44:37 UTC
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -2016,6 +2016,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -2901,6 +2917,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -3786,6 +3818,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -4671,6 +4719,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -5677,6 +5741,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -8723,6 +8803,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -9608,6 +9704,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -10614,6 +10726,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -11620,6 +11748,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -12505,6 +12649,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td>
|
||||||
@ -13719,6 +13879,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">name of the Namespace</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">name of the Namespace</p></td>
|
||||||
@ -14774,6 +14950,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">name of the Node</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">name of the Node</p></td>
|
||||||
@ -15853,6 +16045,22 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
<td class="tableblock halign-left valign-top"></td>
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">export</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should this value be exported. Export strips fields that a user can not specify.</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">exact</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Should the export be exact. Exact export maintains cluster-specific fields like <em>Namespace</em></p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
|
||||||
|
<td class="tableblock halign-left valign-top"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
|
||||||
<td class="tableblock halign-left valign-top"><p class="tableblock">name of the PersistentVolume</p></td>
|
<td class="tableblock halign-left valign-top"><p class="tableblock">name of the PersistentVolume</p></td>
|
||||||
@ -25525,7 +25733,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
|
|||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated 2015-12-08 11:56:49 UTC
|
Last updated 2015-12-15 06:44:31 UTC
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -54,7 +54,7 @@ function depends {
|
|||||||
file=${generated_files[$1]//\.generated\.go/.go}
|
file=${generated_files[$1]//\.generated\.go/.go}
|
||||||
deps=$(go list -f "{{.Deps}}" ${file} | tr "[" " " | tr "]" " ")
|
deps=$(go list -f "{{.Deps}}" ${file} | tr "[" " " | tr "]" " ")
|
||||||
inputfile=${generated_files[$2]//\.generated\.go/.go}
|
inputfile=${generated_files[$2]//\.generated\.go/.go}
|
||||||
fullpath=$(readlink -f ${generated_files[$2]//\.generated\.go/.go})
|
fullpath=${generated_files[$2]//\.generated\.go/.go}
|
||||||
candidate=$(dirname "${fullpath}")
|
candidate=$(dirname "${fullpath}")
|
||||||
result=false
|
result=false
|
||||||
for dep in ${deps}; do
|
for dep in ${deps}; do
|
||||||
|
@ -24,8 +24,6 @@ import (
|
|||||||
resource "k8s.io/kubernetes/pkg/api/resource"
|
resource "k8s.io/kubernetes/pkg/api/resource"
|
||||||
unversioned "k8s.io/kubernetes/pkg/api/unversioned"
|
unversioned "k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
conversion "k8s.io/kubernetes/pkg/conversion"
|
conversion "k8s.io/kubernetes/pkg/conversion"
|
||||||
fields "k8s.io/kubernetes/pkg/fields"
|
|
||||||
labels "k8s.io/kubernetes/pkg/labels"
|
|
||||||
runtime "k8s.io/kubernetes/pkg/runtime"
|
runtime "k8s.io/kubernetes/pkg/runtime"
|
||||||
intstr "k8s.io/kubernetes/pkg/util/intstr"
|
intstr "k8s.io/kubernetes/pkg/util/intstr"
|
||||||
inf "speter.net/go/exp/math/dec/inf"
|
inf "speter.net/go/exp/math/dec/inf"
|
||||||
@ -809,35 +807,6 @@ func deepCopy_api_List(in List, out *List, c *conversion.Cloner) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func deepCopy_api_ListOptions(in ListOptions, out *ListOptions, c *conversion.Cloner) error {
|
|
||||||
if err := deepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if newVal, err := c.DeepCopy(in.LabelSelector); err != nil {
|
|
||||||
return err
|
|
||||||
} else if newVal == nil {
|
|
||||||
out.LabelSelector = nil
|
|
||||||
} else {
|
|
||||||
out.LabelSelector = newVal.(labels.Selector)
|
|
||||||
}
|
|
||||||
if newVal, err := c.DeepCopy(in.FieldSelector); err != nil {
|
|
||||||
return err
|
|
||||||
} else if newVal == nil {
|
|
||||||
out.FieldSelector = nil
|
|
||||||
} else {
|
|
||||||
out.FieldSelector = newVal.(fields.Selector)
|
|
||||||
}
|
|
||||||
out.Watch = in.Watch
|
|
||||||
out.ResourceVersion = in.ResourceVersion
|
|
||||||
if in.TimeoutSeconds != nil {
|
|
||||||
out.TimeoutSeconds = new(int64)
|
|
||||||
*out.TimeoutSeconds = *in.TimeoutSeconds
|
|
||||||
} else {
|
|
||||||
out.TimeoutSeconds = nil
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func deepCopy_api_LoadBalancerIngress(in LoadBalancerIngress, out *LoadBalancerIngress, c *conversion.Cloner) error {
|
func deepCopy_api_LoadBalancerIngress(in LoadBalancerIngress, out *LoadBalancerIngress, c *conversion.Cloner) error {
|
||||||
out.IP = in.IP
|
out.IP = in.IP
|
||||||
out.Hostname = in.Hostname
|
out.Hostname = in.Hostname
|
||||||
@ -2417,7 +2386,6 @@ func init() {
|
|||||||
deepCopy_api_LimitRangeList,
|
deepCopy_api_LimitRangeList,
|
||||||
deepCopy_api_LimitRangeSpec,
|
deepCopy_api_LimitRangeSpec,
|
||||||
deepCopy_api_List,
|
deepCopy_api_List,
|
||||||
deepCopy_api_ListOptions,
|
|
||||||
deepCopy_api_LoadBalancerIngress,
|
deepCopy_api_LoadBalancerIngress,
|
||||||
deepCopy_api_LoadBalancerStatus,
|
deepCopy_api_LoadBalancerStatus,
|
||||||
deepCopy_api_LocalObjectReference,
|
deepCopy_api_LocalObjectReference,
|
||||||
|
@ -88,6 +88,8 @@ func init() {
|
|||||||
|
|
||||||
// Register Unversioned types
|
// Register Unversioned types
|
||||||
// TODO this should not be done here
|
// TODO this should not be done here
|
||||||
|
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.ExportOptions{})
|
||||||
|
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.ListOptions{})
|
||||||
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.Status{})
|
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.Status{})
|
||||||
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIVersions{})
|
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIVersions{})
|
||||||
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIGroupList{})
|
Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIGroupList{})
|
||||||
@ -155,3 +157,4 @@ func (obj *SerializedReference) GetObjectKind() unversioned.ObjectKind { r
|
|||||||
func (obj *RangeAllocation) GetObjectMeta() meta.Object { return &obj.ObjectMeta }
|
func (obj *RangeAllocation) GetObjectMeta() meta.Object { return &obj.ObjectMeta }
|
||||||
func (obj *RangeAllocation) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
func (obj *RangeAllocation) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
||||||
func (obj *ObjectReference) GetObjectKind() unversioned.ObjectKind { return obj }
|
func (obj *ObjectReference) GetObjectKind() unversioned.ObjectKind { return obj }
|
||||||
|
func (obj *ExportOptions) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
||||||
|
28
pkg/api/rest/export.go
Normal file
28
pkg/api/rest/export.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package rest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RESTExportStrategy is the interface that defines how to export a Kubernetes object
|
||||||
|
type RESTExportStrategy interface {
|
||||||
|
// Export strips fields that can not be set by the user. If 'exact' is false
|
||||||
|
// fields specific to the cluster are also stripped
|
||||||
|
Export(obj runtime.Object, exact bool) error
|
||||||
|
}
|
@ -64,6 +64,14 @@ type Lister interface {
|
|||||||
List(ctx api.Context, options *unversioned.ListOptions) (runtime.Object, error)
|
List(ctx api.Context, options *unversioned.ListOptions) (runtime.Object, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Exporter is an object that knows how to strip a RESTful resource for export
|
||||||
|
type Exporter interface {
|
||||||
|
// Export an object. Fields that are not user specified (e.g. Status, ObjectMeta.ResourceVersion) are stripped out
|
||||||
|
// Returns the stripped object. If 'exact' is true, fields that are specific to the cluster (e.g. namespace) are
|
||||||
|
// retained, otherwise they are stripped also.
|
||||||
|
Export(ctx api.Context, name string, opts unversioned.ExportOptions) (runtime.Object, error)
|
||||||
|
}
|
||||||
|
|
||||||
// Getter is an object that can retrieve a named RESTful resource.
|
// Getter is an object that can retrieve a named RESTful resource.
|
||||||
type Getter interface {
|
type Getter interface {
|
||||||
// Get finds a resource in the storage by name and returns it.
|
// Get finds a resource in the storage by name and returns it.
|
||||||
|
@ -147,9 +147,9 @@ func TestList(t *testing.T) {
|
|||||||
roundTripSame(t, item)
|
roundTripSame(t, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
var nonRoundTrippableTypes = sets.NewString()
|
var nonRoundTrippableTypes = sets.NewString("ExportOptions")
|
||||||
|
|
||||||
var nonInternalRoundTrippableTypes = sets.NewString("List", "ListOptions")
|
var nonInternalRoundTrippableTypes = sets.NewString("List", "ListOptions", "ExportOptions")
|
||||||
var nonRoundTrippableTypesByVersion = map[string][]string{}
|
var nonRoundTrippableTypesByVersion = map[string][]string{}
|
||||||
|
|
||||||
func TestRoundTripTypes(t *testing.T) {
|
func TestRoundTripTypes(t *testing.T) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1669,6 +1669,15 @@ type DeleteOptions struct {
|
|||||||
GracePeriodSeconds *int64 `json:"gracePeriodSeconds"`
|
GracePeriodSeconds *int64 `json:"gracePeriodSeconds"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExportOptions is the query options to the standard REST get call.
|
||||||
|
type ExportOptions struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
// Should this value be exported. Export strips fields that a user can not specify.
|
||||||
|
Export bool `json:"export"`
|
||||||
|
// Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'
|
||||||
|
Exact bool `json:"exact"`
|
||||||
|
}
|
||||||
|
|
||||||
// ListOptions is the query options to a standard REST list call, and has future support for
|
// ListOptions is the query options to a standard REST list call, and has future support for
|
||||||
// watch calls.
|
// watch calls.
|
||||||
type ListOptions struct {
|
type ListOptions struct {
|
||||||
|
@ -40,3 +40,4 @@ func (obj *APIVersions) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
|||||||
func (obj *APIGroupList) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
func (obj *APIGroupList) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
||||||
func (obj *APIGroup) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
func (obj *APIGroup) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
||||||
func (obj *APIResourceList) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
func (obj *APIResourceList) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
||||||
|
func (obj *ExportOptions) GetObjectKind() ObjectKind { return &obj.TypeMeta }
|
||||||
|
@ -54,6 +54,15 @@ type ListMeta struct {
|
|||||||
ResourceVersion string `json:"resourceVersion,omitempty"`
|
ResourceVersion string `json:"resourceVersion,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExportOptions is the query options to the standard REST get call.
|
||||||
|
type ExportOptions struct {
|
||||||
|
TypeMeta `json:",inline"`
|
||||||
|
// Should this value be exported. Export strips fields that a user can not specify.`
|
||||||
|
Export bool `json:"export"`
|
||||||
|
// Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'
|
||||||
|
Exact bool `json:"exact"`
|
||||||
|
}
|
||||||
|
|
||||||
// ListOptions is the query options to a standard REST list/watch calls.
|
// ListOptions is the query options to a standard REST list/watch calls.
|
||||||
type ListOptions struct {
|
type ListOptions struct {
|
||||||
TypeMeta `json:",inline"`
|
TypeMeta `json:",inline"`
|
||||||
|
@ -76,6 +76,16 @@ func (APIVersions) SwaggerDoc() map[string]string {
|
|||||||
return map_APIVersions
|
return map_APIVersions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_ExportOptions = map[string]string{
|
||||||
|
"": "ExportOptions is the query options to the standard REST get call.",
|
||||||
|
"export": "Should this value be exported. Export strips fields that a user can not specify.`",
|
||||||
|
"exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ExportOptions) SwaggerDoc() map[string]string {
|
||||||
|
return map_ExportOptions
|
||||||
|
}
|
||||||
|
|
||||||
var map_GroupVersionForDiscovery = map[string]string{
|
var map_GroupVersionForDiscovery = map[string]string{
|
||||||
"": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensiblity.",
|
"": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensiblity.",
|
||||||
"groupVersion": "groupVersion specifies the API group and version in the form \"group/version\"",
|
"groupVersion": "groupVersion specifies the API group and version in the form \"group/version\"",
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
api "k8s.io/kubernetes/pkg/api"
|
api "k8s.io/kubernetes/pkg/api"
|
||||||
resource "k8s.io/kubernetes/pkg/api/resource"
|
resource "k8s.io/kubernetes/pkg/api/resource"
|
||||||
|
unversioned "k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
conversion "k8s.io/kubernetes/pkg/conversion"
|
conversion "k8s.io/kubernetes/pkg/conversion"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1115,34 +1116,6 @@ func convert_api_List_To_v1_List(in *api.List, out *List, s conversion.Scope) er
|
|||||||
return autoconvert_api_List_To_v1_List(in, out, s)
|
return autoconvert_api_List_To_v1_List(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func autoconvert_api_ListOptions_To_v1_ListOptions(in *api.ListOptions, out *ListOptions, s conversion.Scope) error {
|
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
||||||
defaulting.(func(*api.ListOptions))(in)
|
|
||||||
}
|
|
||||||
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.Convert(&in.LabelSelector, &out.LabelSelector, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.Convert(&in.FieldSelector, &out.FieldSelector, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
out.Watch = in.Watch
|
|
||||||
out.ResourceVersion = in.ResourceVersion
|
|
||||||
if in.TimeoutSeconds != nil {
|
|
||||||
out.TimeoutSeconds = new(int64)
|
|
||||||
*out.TimeoutSeconds = *in.TimeoutSeconds
|
|
||||||
} else {
|
|
||||||
out.TimeoutSeconds = nil
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func convert_api_ListOptions_To_v1_ListOptions(in *api.ListOptions, out *ListOptions, s conversion.Scope) error {
|
|
||||||
return autoconvert_api_ListOptions_To_v1_ListOptions(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoconvert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress(in *api.LoadBalancerIngress, out *LoadBalancerIngress, s conversion.Scope) error {
|
func autoconvert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress(in *api.LoadBalancerIngress, out *LoadBalancerIngress, s conversion.Scope) error {
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
defaulting.(func(*api.LoadBalancerIngress))(in)
|
defaulting.(func(*api.LoadBalancerIngress))(in)
|
||||||
@ -3065,6 +3038,50 @@ func convert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out *Volu
|
|||||||
return autoconvert_api_VolumeSource_To_v1_VolumeSource(in, out, s)
|
return autoconvert_api_VolumeSource_To_v1_VolumeSource(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func autoconvert_unversioned_ExportOptions_To_v1_ExportOptions(in *unversioned.ExportOptions, out *ExportOptions, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*unversioned.ExportOptions))(in)
|
||||||
|
}
|
||||||
|
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out.Export = in.Export
|
||||||
|
out.Exact = in.Exact
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func convert_unversioned_ExportOptions_To_v1_ExportOptions(in *unversioned.ExportOptions, out *ExportOptions, s conversion.Scope) error {
|
||||||
|
return autoconvert_unversioned_ExportOptions_To_v1_ExportOptions(in, out, s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func autoconvert_unversioned_ListOptions_To_v1_ListOptions(in *unversioned.ListOptions, out *ListOptions, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*unversioned.ListOptions))(in)
|
||||||
|
}
|
||||||
|
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.Convert(&in.LabelSelector, &out.LabelSelector, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.Convert(&in.FieldSelector, &out.FieldSelector, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out.Watch = in.Watch
|
||||||
|
out.ResourceVersion = in.ResourceVersion
|
||||||
|
if in.TimeoutSeconds != nil {
|
||||||
|
out.TimeoutSeconds = new(int64)
|
||||||
|
*out.TimeoutSeconds = *in.TimeoutSeconds
|
||||||
|
} else {
|
||||||
|
out.TimeoutSeconds = nil
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func convert_unversioned_ListOptions_To_v1_ListOptions(in *unversioned.ListOptions, out *ListOptions, s conversion.Scope) error {
|
||||||
|
return autoconvert_unversioned_ListOptions_To_v1_ListOptions(in, out, s)
|
||||||
|
}
|
||||||
|
|
||||||
func autoconvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(in *AWSElasticBlockStoreVolumeSource, out *api.AWSElasticBlockStoreVolumeSource, s conversion.Scope) error {
|
func autoconvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(in *AWSElasticBlockStoreVolumeSource, out *api.AWSElasticBlockStoreVolumeSource, s conversion.Scope) error {
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
defaulting.(func(*AWSElasticBlockStoreVolumeSource))(in)
|
defaulting.(func(*AWSElasticBlockStoreVolumeSource))(in)
|
||||||
@ -3804,6 +3821,22 @@ func convert_v1_ExecAction_To_api_ExecAction(in *ExecAction, out *api.ExecAction
|
|||||||
return autoconvert_v1_ExecAction_To_api_ExecAction(in, out, s)
|
return autoconvert_v1_ExecAction_To_api_ExecAction(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func autoconvert_v1_ExportOptions_To_unversioned_ExportOptions(in *ExportOptions, out *unversioned.ExportOptions, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*ExportOptions))(in)
|
||||||
|
}
|
||||||
|
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out.Export = in.Export
|
||||||
|
out.Exact = in.Exact
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func convert_v1_ExportOptions_To_unversioned_ExportOptions(in *ExportOptions, out *unversioned.ExportOptions, s conversion.Scope) error {
|
||||||
|
return autoconvert_v1_ExportOptions_To_unversioned_ExportOptions(in, out, s)
|
||||||
|
}
|
||||||
|
|
||||||
func autoconvert_v1_FCVolumeSource_To_api_FCVolumeSource(in *FCVolumeSource, out *api.FCVolumeSource, s conversion.Scope) error {
|
func autoconvert_v1_FCVolumeSource_To_api_FCVolumeSource(in *FCVolumeSource, out *api.FCVolumeSource, s conversion.Scope) error {
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
defaulting.(func(*FCVolumeSource))(in)
|
defaulting.(func(*FCVolumeSource))(in)
|
||||||
@ -4154,7 +4187,7 @@ func convert_v1_List_To_api_List(in *List, out *api.List, s conversion.Scope) er
|
|||||||
return autoconvert_v1_List_To_api_List(in, out, s)
|
return autoconvert_v1_List_To_api_List(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func autoconvert_v1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.ListOptions, s conversion.Scope) error {
|
func autoconvert_v1_ListOptions_To_unversioned_ListOptions(in *ListOptions, out *unversioned.ListOptions, s conversion.Scope) error {
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
defaulting.(func(*ListOptions))(in)
|
defaulting.(func(*ListOptions))(in)
|
||||||
}
|
}
|
||||||
@ -4178,8 +4211,8 @@ func autoconvert_v1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.Lis
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func convert_v1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.ListOptions, s conversion.Scope) error {
|
func convert_v1_ListOptions_To_unversioned_ListOptions(in *ListOptions, out *unversioned.ListOptions, s conversion.Scope) error {
|
||||||
return autoconvert_v1_ListOptions_To_api_ListOptions(in, out, s)
|
return autoconvert_v1_ListOptions_To_unversioned_ListOptions(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func autoconvert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress(in *LoadBalancerIngress, out *api.LoadBalancerIngress, s conversion.Scope) error {
|
func autoconvert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress(in *LoadBalancerIngress, out *api.LoadBalancerIngress, s conversion.Scope) error {
|
||||||
@ -6154,7 +6187,6 @@ func init() {
|
|||||||
autoconvert_api_LimitRangeList_To_v1_LimitRangeList,
|
autoconvert_api_LimitRangeList_To_v1_LimitRangeList,
|
||||||
autoconvert_api_LimitRangeSpec_To_v1_LimitRangeSpec,
|
autoconvert_api_LimitRangeSpec_To_v1_LimitRangeSpec,
|
||||||
autoconvert_api_LimitRange_To_v1_LimitRange,
|
autoconvert_api_LimitRange_To_v1_LimitRange,
|
||||||
autoconvert_api_ListOptions_To_v1_ListOptions,
|
|
||||||
autoconvert_api_List_To_v1_List,
|
autoconvert_api_List_To_v1_List,
|
||||||
autoconvert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress,
|
autoconvert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress,
|
||||||
autoconvert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus,
|
autoconvert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus,
|
||||||
@ -6227,6 +6259,8 @@ func init() {
|
|||||||
autoconvert_api_VolumeMount_To_v1_VolumeMount,
|
autoconvert_api_VolumeMount_To_v1_VolumeMount,
|
||||||
autoconvert_api_VolumeSource_To_v1_VolumeSource,
|
autoconvert_api_VolumeSource_To_v1_VolumeSource,
|
||||||
autoconvert_api_Volume_To_v1_Volume,
|
autoconvert_api_Volume_To_v1_Volume,
|
||||||
|
autoconvert_unversioned_ExportOptions_To_v1_ExportOptions,
|
||||||
|
autoconvert_unversioned_ListOptions_To_v1_ListOptions,
|
||||||
autoconvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource,
|
autoconvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource,
|
||||||
autoconvert_v1_Binding_To_api_Binding,
|
autoconvert_v1_Binding_To_api_Binding,
|
||||||
autoconvert_v1_Capabilities_To_api_Capabilities,
|
autoconvert_v1_Capabilities_To_api_Capabilities,
|
||||||
@ -6258,6 +6292,7 @@ func init() {
|
|||||||
autoconvert_v1_EventSource_To_api_EventSource,
|
autoconvert_v1_EventSource_To_api_EventSource,
|
||||||
autoconvert_v1_Event_To_api_Event,
|
autoconvert_v1_Event_To_api_Event,
|
||||||
autoconvert_v1_ExecAction_To_api_ExecAction,
|
autoconvert_v1_ExecAction_To_api_ExecAction,
|
||||||
|
autoconvert_v1_ExportOptions_To_unversioned_ExportOptions,
|
||||||
autoconvert_v1_FCVolumeSource_To_api_FCVolumeSource,
|
autoconvert_v1_FCVolumeSource_To_api_FCVolumeSource,
|
||||||
autoconvert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource,
|
autoconvert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource,
|
||||||
autoconvert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource,
|
autoconvert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource,
|
||||||
@ -6272,7 +6307,7 @@ func init() {
|
|||||||
autoconvert_v1_LimitRangeList_To_api_LimitRangeList,
|
autoconvert_v1_LimitRangeList_To_api_LimitRangeList,
|
||||||
autoconvert_v1_LimitRangeSpec_To_api_LimitRangeSpec,
|
autoconvert_v1_LimitRangeSpec_To_api_LimitRangeSpec,
|
||||||
autoconvert_v1_LimitRange_To_api_LimitRange,
|
autoconvert_v1_LimitRange_To_api_LimitRange,
|
||||||
autoconvert_v1_ListOptions_To_api_ListOptions,
|
autoconvert_v1_ListOptions_To_unversioned_ListOptions,
|
||||||
autoconvert_v1_List_To_api_List,
|
autoconvert_v1_List_To_api_List,
|
||||||
autoconvert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress,
|
autoconvert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress,
|
||||||
autoconvert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus,
|
autoconvert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus,
|
||||||
|
@ -587,6 +587,15 @@ func deepCopy_v1_ExecAction(in ExecAction, out *ExecAction, c *conversion.Cloner
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func deepCopy_v1_ExportOptions(in ExportOptions, out *ExportOptions, c *conversion.Cloner) error {
|
||||||
|
if err := deepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out.Export = in.Export
|
||||||
|
out.Exact = in.Exact
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func deepCopy_v1_FCVolumeSource(in FCVolumeSource, out *FCVolumeSource, c *conversion.Cloner) error {
|
func deepCopy_v1_FCVolumeSource(in FCVolumeSource, out *FCVolumeSource, c *conversion.Cloner) error {
|
||||||
if in.TargetWWNs != nil {
|
if in.TargetWWNs != nil {
|
||||||
out.TargetWWNs = make([]string, len(in.TargetWWNs))
|
out.TargetWWNs = make([]string, len(in.TargetWWNs))
|
||||||
@ -2415,6 +2424,7 @@ func init() {
|
|||||||
deepCopy_v1_EventList,
|
deepCopy_v1_EventList,
|
||||||
deepCopy_v1_EventSource,
|
deepCopy_v1_EventSource,
|
||||||
deepCopy_v1_ExecAction,
|
deepCopy_v1_ExecAction,
|
||||||
|
deepCopy_v1_ExportOptions,
|
||||||
deepCopy_v1_FCVolumeSource,
|
deepCopy_v1_FCVolumeSource,
|
||||||
deepCopy_v1_FlockerVolumeSource,
|
deepCopy_v1_FlockerVolumeSource,
|
||||||
deepCopy_v1_GCEPersistentDiskVolumeSource,
|
deepCopy_v1_GCEPersistentDiskVolumeSource,
|
||||||
|
@ -79,6 +79,7 @@ func addKnownTypes() {
|
|||||||
&PersistentVolumeClaim{},
|
&PersistentVolumeClaim{},
|
||||||
&PersistentVolumeClaimList{},
|
&PersistentVolumeClaimList{},
|
||||||
&DeleteOptions{},
|
&DeleteOptions{},
|
||||||
|
&ExportOptions{},
|
||||||
&ListOptions{},
|
&ListOptions{},
|
||||||
&PodAttachOptions{},
|
&PodAttachOptions{},
|
||||||
&PodLogOptions{},
|
&PodLogOptions{},
|
||||||
@ -135,3 +136,4 @@ func (obj *ComponentStatus) GetObjectKind() unversioned.ObjectKind { r
|
|||||||
func (obj *ComponentStatusList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
func (obj *ComponentStatusList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
||||||
func (obj *SerializedReference) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
func (obj *SerializedReference) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
||||||
func (obj *RangeAllocation) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
func (obj *RangeAllocation) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
||||||
|
func (obj *ExportOptions) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2073,6 +2073,16 @@ type DeleteOptions struct {
|
|||||||
GracePeriodSeconds *int64 `json:"gracePeriodSeconds"`
|
GracePeriodSeconds *int64 `json:"gracePeriodSeconds"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExportOptions is the query options to the standard REST get call.
|
||||||
|
type ExportOptions struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
|
||||||
|
// Should this value be exported. Export strips fields that a user can not specify.
|
||||||
|
Export bool `json:"export"`
|
||||||
|
// Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'
|
||||||
|
Exact bool `json:"exact"`
|
||||||
|
}
|
||||||
|
|
||||||
// ListOptions is the query options to a standard REST list call.
|
// ListOptions is the query options to a standard REST list call.
|
||||||
type ListOptions struct {
|
type ListOptions struct {
|
||||||
unversioned.TypeMeta `json:",inline"`
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
@ -379,6 +379,16 @@ func (ExecAction) SwaggerDoc() map[string]string {
|
|||||||
return map_ExecAction
|
return map_ExecAction
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_ExportOptions = map[string]string{
|
||||||
|
"": "ExportOptions is the query options to the standard REST get call.",
|
||||||
|
"export": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ExportOptions) SwaggerDoc() map[string]string {
|
||||||
|
return map_ExportOptions
|
||||||
|
}
|
||||||
|
|
||||||
var map_FCVolumeSource = map[string]string{
|
var map_FCVolumeSource = map[string]string{
|
||||||
"": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.",
|
"": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.",
|
||||||
"targetWWNs": "Required: FC target world wide names (WWNs)",
|
"targetWWNs": "Required: FC target world wide names (WWNs)",
|
||||||
|
@ -67,6 +67,7 @@ func addKnownTypes() {
|
|||||||
&api.ListOptions{},
|
&api.ListOptions{},
|
||||||
&ConfigMap{},
|
&ConfigMap{},
|
||||||
&ConfigMapList{},
|
&ConfigMapList{},
|
||||||
|
&api.ExportOptions{},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -663,6 +663,15 @@ type ClusterAutoscalerList struct {
|
|||||||
Items []ClusterAutoscaler `json:"items"`
|
Items []ClusterAutoscaler `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExportOptions is the query options to the standard REST get call.
|
||||||
|
type ExportOptions struct {
|
||||||
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
// Should this value be exported. Export strips fields that a user can not specify.
|
||||||
|
Export bool `json:"export"`
|
||||||
|
// Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'
|
||||||
|
Exact bool `json:"exact"`
|
||||||
|
}
|
||||||
|
|
||||||
// ListOptions is the query options to a standard REST list call.
|
// ListOptions is the query options to a standard REST list call.
|
||||||
type ListOptions struct {
|
type ListOptions struct {
|
||||||
unversioned.TypeMeta `json:",inline"`
|
unversioned.TypeMeta `json:",inline"`
|
||||||
|
@ -190,6 +190,16 @@ func (DeploymentStrategy) SwaggerDoc() map[string]string {
|
|||||||
return map_DeploymentStrategy
|
return map_DeploymentStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map_ExportOptions = map[string]string{
|
||||||
|
"": "ExportOptions is the query options to the standard REST get call.",
|
||||||
|
"export": "Should this value be exported. Export strips fields that a user can not specify.",
|
||||||
|
"exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ExportOptions) SwaggerDoc() map[string]string {
|
||||||
|
return map_ExportOptions
|
||||||
|
}
|
||||||
|
|
||||||
var map_HTTPIngressPath = map[string]string{
|
var map_HTTPIngressPath = map[string]string{
|
||||||
"": "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.",
|
"": "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.",
|
||||||
"path": "Path is a extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.",
|
"path": "Path is a extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.",
|
||||||
|
@ -210,6 +210,15 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
if !isMetadata {
|
if !isMetadata {
|
||||||
storageMeta = defaultStorageMetadata{}
|
storageMeta = defaultStorageMetadata{}
|
||||||
}
|
}
|
||||||
|
exporter, isExporter := storage.(rest.Exporter)
|
||||||
|
if !isExporter {
|
||||||
|
exporter = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
versionedExportOptions, err := a.group.Creater.New(optionsExternalVersion.WithKind("ExportOptions"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if isNamedCreater {
|
if isNamedCreater {
|
||||||
isCreater = true
|
isCreater = true
|
||||||
@ -310,6 +319,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
scope := mapping.Scope
|
scope := mapping.Scope
|
||||||
nameParam := ws.PathParameter("name", "name of the "+kind).DataType("string")
|
nameParam := ws.PathParameter("name", "name of the "+kind).DataType("string")
|
||||||
pathParam := ws.PathParameter("path", "path to the resource").DataType("string")
|
pathParam := ws.PathParameter("path", "path to the resource").DataType("string")
|
||||||
|
|
||||||
params := []*restful.Parameter{}
|
params := []*restful.Parameter{}
|
||||||
actions := []action{}
|
actions := []action{}
|
||||||
|
|
||||||
@ -444,9 +454,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
case "GET": // Get a resource.
|
case "GET": // Get a resource.
|
||||||
var handler restful.RouteFunction
|
var handler restful.RouteFunction
|
||||||
if isGetterWithOptions {
|
if isGetterWithOptions {
|
||||||
handler = GetResourceWithOptions(getterWithOptions, reqScope, getOptionsInternalKind, getOptionsExternalKind, getSubpath, getSubpathKey)
|
handler = GetResourceWithOptions(getterWithOptions, exporter, reqScope, getOptionsInternalKind, getOptionsExternalKind, getSubpath, getSubpathKey)
|
||||||
} else {
|
} else {
|
||||||
handler = GetResource(getter, reqScope)
|
handler = GetResource(getter, exporter, reqScope)
|
||||||
}
|
}
|
||||||
doc := "read the specified " + kind
|
doc := "read the specified " + kind
|
||||||
if hasSubresource {
|
if hasSubresource {
|
||||||
@ -465,6 +475,11 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if isExporter {
|
||||||
|
if err := addObjectParams(ws, route, versionedExportOptions); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
addParams(route, action.Params)
|
addParams(route, action.Params)
|
||||||
ws.Route(route)
|
ws.Route(route)
|
||||||
case "LIST": // List all resources of a kind.
|
case "LIST": // List all resources of a kind.
|
||||||
|
@ -117,14 +117,16 @@ func addGrouplessTypes() {
|
|||||||
func addTestTypes() {
|
func addTestTypes() {
|
||||||
api.Scheme.AddKnownTypes(
|
api.Scheme.AddKnownTypes(
|
||||||
testGroupVersion, &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
testGroupVersion, &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
||||||
&unversioned.ListOptions{}, &api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
|
&unversioned.ListOptions{}, &api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
|
||||||
|
&unversioned.ExportOptions{})
|
||||||
api.Scheme.AddKnownTypes(testGroupVersion, &api.Pod{})
|
api.Scheme.AddKnownTypes(testGroupVersion, &api.Pod{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func addNewTestTypes() {
|
func addNewTestTypes() {
|
||||||
api.Scheme.AddKnownTypes(
|
api.Scheme.AddKnownTypes(
|
||||||
newGroupVersion, &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
newGroupVersion, &apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &unversioned.Status{},
|
||||||
&unversioned.ListOptions{}, &api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
|
&unversioned.ListOptions{}, &api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
|
||||||
|
&unversioned.ExportOptions{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -334,6 +336,21 @@ type SimpleRESTStorage struct {
|
|||||||
injectedFunction func(obj runtime.Object) (returnObj runtime.Object, err error)
|
injectedFunction func(obj runtime.Object) (returnObj runtime.Object, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (storage *SimpleRESTStorage) Export(ctx api.Context, name string, opts unversioned.ExportOptions) (runtime.Object, error) {
|
||||||
|
obj, err := storage.Get(ctx, name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
s, ok := obj.(*apiservertesting.Simple)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("unexpected object")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set a marker to verify the method was called
|
||||||
|
s.Other = "exported"
|
||||||
|
return obj, storage.errors["export"]
|
||||||
|
}
|
||||||
|
|
||||||
func (storage *SimpleRESTStorage) List(ctx api.Context, options *unversioned.ListOptions) (runtime.Object, error) {
|
func (storage *SimpleRESTStorage) List(ctx api.Context, options *unversioned.ListOptions) (runtime.Object, error) {
|
||||||
storage.checkContext(ctx)
|
storage.checkContext(ctx)
|
||||||
result := &apiservertesting.SimpleList{
|
result := &apiservertesting.SimpleList{
|
||||||
@ -1150,6 +1167,55 @@ func TestMetadata(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExport(t *testing.T) {
|
||||||
|
storage := map[string]rest.Storage{}
|
||||||
|
simpleStorage := SimpleRESTStorage{
|
||||||
|
item: apiservertesting.Simple{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
ResourceVersion: "1234",
|
||||||
|
CreationTimestamp: unversioned.NewTime(time.Unix(10, 10)),
|
||||||
|
},
|
||||||
|
Other: "foo",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
selfLinker := &setTestSelfLinker{
|
||||||
|
t: t,
|
||||||
|
expectedSet: "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/namespaces/default/simple/id",
|
||||||
|
name: "id",
|
||||||
|
namespace: "default",
|
||||||
|
}
|
||||||
|
storage["simple"] = &simpleStorage
|
||||||
|
handler := handleLinker(storage, selfLinker)
|
||||||
|
server := httptest.NewServer(handler)
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
resp, err := http.Get(server.URL + "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/namespaces/default/simple/id?export=true")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
data, _ := ioutil.ReadAll(resp.Body)
|
||||||
|
resp.Body.Close()
|
||||||
|
t.Fatalf("unexpected response: %#v\n%s\n", resp, string(data))
|
||||||
|
}
|
||||||
|
var itemOut apiservertesting.Simple
|
||||||
|
body, err := extractBody(resp, &itemOut)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if itemOut.Name != simpleStorage.item.Name {
|
||||||
|
t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
|
||||||
|
}
|
||||||
|
if itemOut.Other != "exported" {
|
||||||
|
t.Errorf("Expected: exported, saw: %s", itemOut.Other)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !selfLinker.called {
|
||||||
|
t.Errorf("Never set self link")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGet(t *testing.T) {
|
func TestGet(t *testing.T) {
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
simpleStorage := SimpleRESTStorage{
|
simpleStorage := SimpleRESTStorage{
|
||||||
|
@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
@ -112,24 +113,43 @@ func getResourceHandler(scope RequestScope, getter getterFunc) restful.RouteFunc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetResource returns a function that handles retrieving a single resource from a rest.Storage object.
|
// GetResource returns a function that handles retrieving a single resource from a rest.Storage object.
|
||||||
func GetResource(r rest.Getter, scope RequestScope) restful.RouteFunction {
|
func GetResource(r rest.Getter, e rest.Exporter, scope RequestScope) restful.RouteFunction {
|
||||||
return getResourceHandler(scope,
|
return getResourceHandler(scope,
|
||||||
func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) {
|
func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) {
|
||||||
// For performance tracking purposes.
|
// For performance tracking purposes.
|
||||||
trace := util.NewTrace("Get " + req.Request.URL.Path)
|
trace := util.NewTrace("Get " + req.Request.URL.Path)
|
||||||
defer trace.LogIfLong(250 * time.Millisecond)
|
defer trace.LogIfLong(250 * time.Millisecond)
|
||||||
|
opts := v1.ExportOptions{}
|
||||||
|
if err := scope.Codec.DecodeParametersInto(req.Request.URL.Query(), &opts); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
internalOpts := unversioned.ExportOptions{}
|
||||||
|
scope.Convertor.Convert(&opts, &internalOpts)
|
||||||
|
if internalOpts.Export {
|
||||||
|
if e == nil {
|
||||||
|
return nil, errors.NewBadRequest("export unsupported")
|
||||||
|
}
|
||||||
|
return e.Export(ctx, name, internalOpts)
|
||||||
|
}
|
||||||
return r.Get(ctx, name)
|
return r.Get(ctx, name)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResourceWithOptions returns a function that handles retrieving a single resource from a rest.Storage object.
|
// GetResourceWithOptions returns a function that handles retrieving a single resource from a rest.Storage object.
|
||||||
func GetResourceWithOptions(r rest.GetterWithOptions, scope RequestScope, internalKind, externalKind unversioned.GroupVersionKind, subpath bool, subpathKey string) restful.RouteFunction {
|
func GetResourceWithOptions(r rest.GetterWithOptions, e rest.Exporter, scope RequestScope, internalKind, externalKind unversioned.GroupVersionKind, subpath bool, subpathKey string) restful.RouteFunction {
|
||||||
return getResourceHandler(scope,
|
return getResourceHandler(scope,
|
||||||
func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) {
|
func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) {
|
||||||
opts, err := getRequestOptions(req, scope, internalKind, externalKind, subpath, subpathKey)
|
opts, err := getRequestOptions(req, scope, internalKind, externalKind, subpath, subpathKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
exportOpts := unversioned.ExportOptions{}
|
||||||
|
if err := scope.Codec.DecodeParametersInto(req.Request.URL.Query(), &exportOpts); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if exportOpts.Export {
|
||||||
|
return nil, errors.NewBadRequest("export unsupported")
|
||||||
|
}
|
||||||
return r.Get(ctx, name, opts)
|
return r.Get(ctx, name, opts)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package etcd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
kubeerr "k8s.io/kubernetes/pkg/api/errors"
|
kubeerr "k8s.io/kubernetes/pkg/api/errors"
|
||||||
@ -103,6 +104,8 @@ type Etcd struct {
|
|||||||
// If true, return the object that was deleted. Otherwise, return a generic
|
// If true, return the object that was deleted. Otherwise, return a generic
|
||||||
// success status response.
|
// success status response.
|
||||||
ReturnDeletedObject bool
|
ReturnDeletedObject bool
|
||||||
|
// Allows extended behavior during export, optional
|
||||||
|
ExportStrategy rest.RESTExportStrategy
|
||||||
|
|
||||||
// Used for all etcd access functions
|
// Used for all etcd access functions
|
||||||
Storage storage.Interface
|
Storage storage.Interface
|
||||||
@ -536,3 +539,39 @@ func (e *Etcd) calculateTTL(obj runtime.Object, defaultTTL int64, update bool) (
|
|||||||
}
|
}
|
||||||
return ttl, err
|
return ttl, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func exportObjectMeta(objMeta *api.ObjectMeta, exact bool) {
|
||||||
|
objMeta.UID = ""
|
||||||
|
if !exact {
|
||||||
|
objMeta.Namespace = ""
|
||||||
|
}
|
||||||
|
objMeta.CreationTimestamp = unversioned.Time{}
|
||||||
|
objMeta.DeletionTimestamp = nil
|
||||||
|
objMeta.ResourceVersion = ""
|
||||||
|
objMeta.SelfLink = ""
|
||||||
|
if len(objMeta.GenerateName) > 0 && !exact {
|
||||||
|
objMeta.Name = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implements the rest.Exporter interface
|
||||||
|
func (e *Etcd) Export(ctx api.Context, name string, opts unversioned.ExportOptions) (runtime.Object, error) {
|
||||||
|
obj, err := e.Get(ctx, name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if meta, err := api.ObjectMetaFor(obj); err == nil {
|
||||||
|
exportObjectMeta(meta, opts.Exact)
|
||||||
|
} else {
|
||||||
|
glog.V(4).Infof("Object of type %v does not have ObjectMeta: %v", reflect.TypeOf(obj), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if e.ExportStrategy != nil {
|
||||||
|
if err = e.ExportStrategy.Export(obj, opts.Exact); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
e.CreateStrategy.PrepareForCreate(obj)
|
||||||
|
}
|
||||||
|
return obj, nil
|
||||||
|
}
|
||||||
|
@ -20,10 +20,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
@ -50,7 +52,19 @@ func (t *testRESTStrategy) NamespaceScoped() bool { return t.namespaceS
|
|||||||
func (t *testRESTStrategy) AllowCreateOnUpdate() bool { return t.allowCreateOnUpdate }
|
func (t *testRESTStrategy) AllowCreateOnUpdate() bool { return t.allowCreateOnUpdate }
|
||||||
func (t *testRESTStrategy) AllowUnconditionalUpdate() bool { return t.allowUnconditionalUpdate }
|
func (t *testRESTStrategy) AllowUnconditionalUpdate() bool { return t.allowUnconditionalUpdate }
|
||||||
|
|
||||||
func (t *testRESTStrategy) PrepareForCreate(obj runtime.Object) {}
|
func (t *testRESTStrategy) PrepareForCreate(obj runtime.Object) {
|
||||||
|
metaObj, err := meta.Accessor(obj)
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
|
labels := metaObj.GetLabels()
|
||||||
|
if labels == nil {
|
||||||
|
labels = map[string]string{}
|
||||||
|
}
|
||||||
|
labels["prepare_create"] = "true"
|
||||||
|
metaObj.SetLabels(labels)
|
||||||
|
}
|
||||||
|
|
||||||
func (t *testRESTStrategy) PrepareForUpdate(obj, old runtime.Object) {}
|
func (t *testRESTStrategy) PrepareForUpdate(obj, old runtime.Object) {}
|
||||||
func (t *testRESTStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList {
|
func (t *testRESTStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList {
|
||||||
return nil
|
return nil
|
||||||
@ -325,6 +339,95 @@ func TestEtcdUpdate(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type testPodExport struct{}
|
||||||
|
|
||||||
|
func (t testPodExport) Export(obj runtime.Object, exact bool) error {
|
||||||
|
pod := obj.(*api.Pod)
|
||||||
|
if pod.Labels == nil {
|
||||||
|
pod.Labels = map[string]string{}
|
||||||
|
}
|
||||||
|
pod.Labels["exported"] = "true"
|
||||||
|
pod.Labels["exact"] = strconv.FormatBool(exact)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEtcdCustomExport(t *testing.T) {
|
||||||
|
podA := api.Pod{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Namespace: "test",
|
||||||
|
Name: "foo",
|
||||||
|
Labels: map[string]string{},
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{NodeName: "machine"},
|
||||||
|
}
|
||||||
|
|
||||||
|
server, registry := NewTestGenericEtcdRegistry(t)
|
||||||
|
defer server.Terminate(t)
|
||||||
|
|
||||||
|
registry.ExportStrategy = testPodExport{}
|
||||||
|
|
||||||
|
testContext := api.WithNamespace(api.NewContext(), "test")
|
||||||
|
registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = true
|
||||||
|
if !updateAndVerify(t, testContext, registry, &podA) {
|
||||||
|
t.Errorf("Unexpected error updating podA")
|
||||||
|
}
|
||||||
|
|
||||||
|
obj, err := registry.Export(testContext, podA.Name, unversioned.ExportOptions{})
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
exportedPod := obj.(*api.Pod)
|
||||||
|
if exportedPod.Labels["exported"] != "true" {
|
||||||
|
t.Errorf("expected: exported->true, found: %s", exportedPod.Labels["exported"])
|
||||||
|
}
|
||||||
|
if exportedPod.Labels["exact"] != "false" {
|
||||||
|
t.Errorf("expected: exact->false, found: %s", exportedPod.Labels["exact"])
|
||||||
|
}
|
||||||
|
delete(exportedPod.Labels, "exported")
|
||||||
|
delete(exportedPod.Labels, "exact")
|
||||||
|
exportObjectMeta(&podA.ObjectMeta, false)
|
||||||
|
podA.Spec = exportedPod.Spec
|
||||||
|
if !reflect.DeepEqual(&podA, exportedPod) {
|
||||||
|
t.Errorf("expected:\n%v\nsaw:\n%v\n", &podA, exportedPod)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEtcdBasicExport(t *testing.T) {
|
||||||
|
podA := api.Pod{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Namespace: "test",
|
||||||
|
Name: "foo",
|
||||||
|
Labels: map[string]string{},
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{NodeName: "machine"},
|
||||||
|
Status: api.PodStatus{HostIP: "1.2.3.4"},
|
||||||
|
}
|
||||||
|
|
||||||
|
server, registry := NewTestGenericEtcdRegistry(t)
|
||||||
|
defer server.Terminate(t)
|
||||||
|
|
||||||
|
testContext := api.WithNamespace(api.NewContext(), "test")
|
||||||
|
registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = true
|
||||||
|
if !updateAndVerify(t, testContext, registry, &podA) {
|
||||||
|
t.Errorf("Unexpected error updating podA")
|
||||||
|
}
|
||||||
|
|
||||||
|
obj, err := registry.Export(testContext, podA.Name, unversioned.ExportOptions{})
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
exportedPod := obj.(*api.Pod)
|
||||||
|
if exportedPod.Labels["prepare_create"] != "true" {
|
||||||
|
t.Errorf("expected: prepare_create->true, found: %s", exportedPod.Labels["prepare_create"])
|
||||||
|
}
|
||||||
|
exportObjectMeta(&podA.ObjectMeta, false)
|
||||||
|
podA.Spec = exportedPod.Spec
|
||||||
|
if !reflect.DeepEqual(&podA, exportedPod) {
|
||||||
|
t.Errorf("expected:\n%v\nsaw:\n%v\n", &podA, exportedPod)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestEtcdGet(t *testing.T) {
|
func TestEtcdGet(t *testing.T) {
|
||||||
podA := &api.Pod{
|
podA := &api.Pod{
|
||||||
ObjectMeta: api.ObjectMeta{Namespace: "test", Name: "foo"},
|
ObjectMeta: api.ObjectMeta{Namespace: "test", Name: "foo"},
|
||||||
@ -344,7 +447,6 @@ func TestEtcdGet(t *testing.T) {
|
|||||||
if !updateAndVerify(t, testContext, registry, podA) {
|
if !updateAndVerify(t, testContext, registry, podA) {
|
||||||
t.Errorf("Unexpected error updating podA")
|
t.Errorf("Unexpected error updating podA")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEtcdDelete(t *testing.T) {
|
func TestEtcdDelete(t *testing.T) {
|
||||||
|
@ -58,6 +58,7 @@ func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *RE
|
|||||||
|
|
||||||
CreateStrategy: limitrange.Strategy,
|
CreateStrategy: limitrange.Strategy,
|
||||||
UpdateStrategy: limitrange.Strategy,
|
UpdateStrategy: limitrange.Strategy,
|
||||||
|
ExportStrategy: limitrange.Strategy,
|
||||||
|
|
||||||
Storage: storageInterface,
|
Storage: storageInterface,
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,13 @@ func LimitRangeToSelectableFields(limitRange *api.LimitRange) fields.Set {
|
|||||||
return fields.Set{}
|
return fields.Set{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (limitrangeStrategy) Export(runtime.Object, bool) error {
|
||||||
|
// Copied from OpenShift exporter
|
||||||
|
// TODO: this needs to be fixed
|
||||||
|
// limitrange.Strategy.PrepareForCreate(obj)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func MatchLimitRange(label labels.Selector, field fields.Selector) generic.Matcher {
|
func MatchLimitRange(label labels.Selector, field fields.Selector) generic.Matcher {
|
||||||
return &generic.SelectionPredicate{
|
return &generic.SelectionPredicate{
|
||||||
Label: label,
|
Label: label,
|
||||||
|
@ -76,6 +76,7 @@ func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator, con
|
|||||||
|
|
||||||
CreateStrategy: node.Strategy,
|
CreateStrategy: node.Strategy,
|
||||||
UpdateStrategy: node.Strategy,
|
UpdateStrategy: node.Strategy,
|
||||||
|
ExportStrategy: node.Strategy,
|
||||||
|
|
||||||
Storage: storageInterface,
|
Storage: storageInterface,
|
||||||
}
|
}
|
||||||
|
@ -90,6 +90,22 @@ func (nodeStrategy) AllowUnconditionalUpdate() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ns nodeStrategy) Export(obj runtime.Object, exact bool) error {
|
||||||
|
n, ok := obj.(*api.Node)
|
||||||
|
if !ok {
|
||||||
|
// unexpected programmer error
|
||||||
|
return fmt.Errorf("unexpected object: %v", obj)
|
||||||
|
}
|
||||||
|
ns.PrepareForCreate(obj)
|
||||||
|
if exact {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// Nodes are the only resources that allow direct status edits, therefore
|
||||||
|
// we clear that without exact so that the node value can be reused.
|
||||||
|
n.Status = api.NodeStatus{}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type nodeStatusStrategy struct {
|
type nodeStatusStrategy struct {
|
||||||
nodeStrategy
|
nodeStrategy
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,8 @@ func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *RE
|
|||||||
|
|
||||||
CreateStrategy: podtemplate.Strategy,
|
CreateStrategy: podtemplate.Strategy,
|
||||||
UpdateStrategy: podtemplate.Strategy,
|
UpdateStrategy: podtemplate.Strategy,
|
||||||
|
ExportStrategy: podtemplate.Strategy,
|
||||||
|
|
||||||
ReturnDeletedObject: true,
|
ReturnDeletedObject: true,
|
||||||
|
|
||||||
Storage: storageInterface,
|
Storage: storageInterface,
|
||||||
|
@ -77,6 +77,11 @@ func (podTemplateStrategy) AllowUnconditionalUpdate() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (podTemplateStrategy) Export(obj runtime.Object, exact bool) error {
|
||||||
|
// Do nothing
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func PodTemplateToSelectableFields(podTemplate *api.PodTemplate) fields.Set {
|
func PodTemplateToSelectableFields(podTemplate *api.PodTemplate) fields.Set {
|
||||||
return fields.Set{}
|
return fields.Set{}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
@ -72,6 +73,26 @@ func (strategy) AllowUnconditionalUpdate() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s strategy) Export(obj runtime.Object, exact bool) error {
|
||||||
|
t, ok := obj.(*api.Secret)
|
||||||
|
if !ok {
|
||||||
|
// unexpected programmer error
|
||||||
|
return fmt.Errorf("unexpected object: %v", obj)
|
||||||
|
}
|
||||||
|
s.PrepareForCreate(obj)
|
||||||
|
if exact {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// secrets that are tied to the UID of a service account cannot be exported anyway
|
||||||
|
if t.Type == api.SecretTypeServiceAccountToken || len(t.Annotations[api.ServiceAccountUIDKey]) > 0 {
|
||||||
|
errs := []*field.Error{
|
||||||
|
field.Invalid(field.NewPath("type"), t, "can not export service account secrets"),
|
||||||
|
}
|
||||||
|
return errors.NewInvalid("Secret", t.Name, errs)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Matcher returns a generic matcher for a given label and field selector.
|
// Matcher returns a generic matcher for a given label and field selector.
|
||||||
func Matcher(label labels.Selector, field fields.Selector) generic.Matcher {
|
func Matcher(label labels.Selector, field fields.Selector) generic.Matcher {
|
||||||
return generic.MatcherFunc(func(obj runtime.Object) (bool, error) {
|
return generic.MatcherFunc(func(obj runtime.Object) (bool, error) {
|
||||||
|
99
pkg/registry/secret/strategy_test.go
Normal file
99
pkg/registry/secret/strategy_test.go
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package secret
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestExportSecret(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
objIn runtime.Object
|
||||||
|
objOut runtime.Object
|
||||||
|
exact bool
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
objIn: &api.Secret{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
Data: map[string][]byte{
|
||||||
|
"foo": []byte("bar"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
objOut: &api.Secret{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
Data: map[string][]byte{
|
||||||
|
"foo": []byte("bar"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
exact: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
objIn: &api.Secret{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
Type: api.SecretTypeServiceAccountToken,
|
||||||
|
},
|
||||||
|
expectErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
objIn: &api.Secret{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
Annotations: map[string]string{
|
||||||
|
api.ServiceAccountUIDKey: "true",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
objIn: &api.Pod{},
|
||||||
|
expectErr: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
err := Strategy.Export(test.objIn, test.exact)
|
||||||
|
if err != nil {
|
||||||
|
if !test.expectErr {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if test.expectErr {
|
||||||
|
t.Error("unexpected non-error")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(test.objIn, test.objOut) {
|
||||||
|
t.Errorf("expected:\n%v\nsaw:\n%v\n", test.objOut, test.objIn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -79,6 +79,28 @@ func (svcStrategy) AllowUnconditionalUpdate() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (svcStrategy) Export(obj runtime.Object, exact bool) error {
|
||||||
|
t, ok := obj.(*api.Service)
|
||||||
|
if !ok {
|
||||||
|
// unexpected programmer error
|
||||||
|
return fmt.Errorf("unexpected object: %v", obj)
|
||||||
|
}
|
||||||
|
// TODO: service does not yet have a prepare create strategy (see above)
|
||||||
|
t.Status = api.ServiceStatus{}
|
||||||
|
if exact {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if t.Spec.ClusterIP != api.ClusterIPNone {
|
||||||
|
t.Spec.ClusterIP = ""
|
||||||
|
}
|
||||||
|
if t.Spec.Type == api.ServiceTypeNodePort {
|
||||||
|
for i := range t.Spec.Ports {
|
||||||
|
t.Spec.Ports[i].NodePort = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func MatchServices(label labels.Selector, field fields.Selector) generic.Matcher {
|
func MatchServices(label labels.Selector, field fields.Selector) generic.Matcher {
|
||||||
return &generic.SelectionPredicate{
|
return &generic.SelectionPredicate{
|
||||||
Label: label,
|
Label: label,
|
||||||
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
@ -26,6 +27,83 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestExportService(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
objIn runtime.Object
|
||||||
|
objOut runtime.Object
|
||||||
|
exact bool
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
objIn: &api.Service{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
Status: api.ServiceStatus{
|
||||||
|
LoadBalancer: api.LoadBalancerStatus{
|
||||||
|
Ingress: []api.LoadBalancerIngress{
|
||||||
|
{IP: "1.2.3.4"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
objOut: &api.Service{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
exact: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
objIn: &api.Service{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
Spec: api.ServiceSpec{
|
||||||
|
ClusterIP: "10.0.0.1",
|
||||||
|
},
|
||||||
|
Status: api.ServiceStatus{
|
||||||
|
LoadBalancer: api.LoadBalancerStatus{
|
||||||
|
Ingress: []api.LoadBalancerIngress{
|
||||||
|
{IP: "1.2.3.4"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
objOut: &api.Service{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Namespace: "bar",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
objIn: &api.Pod{},
|
||||||
|
expectErr: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
err := Strategy.Export(test.objIn, test.exact)
|
||||||
|
if err != nil {
|
||||||
|
if !test.expectErr {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if test.expectErr {
|
||||||
|
t.Error("unexpected non-error")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(test.objIn, test.objOut) {
|
||||||
|
t.Errorf("expected:\n%v\nsaw:\n%v\n", test.objOut, test.objIn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCheckGeneratedNameError(t *testing.T) {
|
func TestCheckGeneratedNameError(t *testing.T) {
|
||||||
expect := errors.NewNotFound("foo", "bar")
|
expect := errors.NewNotFound("foo", "bar")
|
||||||
if err := rest.CheckGeneratedNameError(Strategy, expect, &api.Pod{}); err != expect {
|
if err := rest.CheckGeneratedNameError(Strategy, expect, &api.Pod{}); err != expect {
|
||||||
|
@ -399,6 +399,9 @@ func TestGuaranteedUpdate(t *testing.T) {
|
|||||||
|
|
||||||
return objUpdate, nil
|
return objUpdate, nil
|
||||||
}))
|
}))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
objCheck := &storagetesting.TestResource{}
|
objCheck := &storagetesting.TestResource{}
|
||||||
err = helper.Get(context.TODO(), key, objCheck, false)
|
err = helper.Get(context.TODO(), key, objCheck, false)
|
||||||
@ -406,7 +409,7 @@ func TestGuaranteedUpdate(t *testing.T) {
|
|||||||
t.Errorf("Unexpected error %#v", err)
|
t.Errorf("Unexpected error %#v", err)
|
||||||
}
|
}
|
||||||
if objCheck.Value != 2 {
|
if objCheck.Value != 2 {
|
||||||
t.Errorf("Value should have been 2 but got", objCheck.Value)
|
t.Errorf("Value should have been 2 but got %v", objCheck.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !callbackCalled {
|
if !callbackCalled {
|
||||||
|
Loading…
Reference in New Issue
Block a user