| ... | ... |
@@ -4232,6 +4232,432 @@ |
| 4232 | 4232 |
] |
| 4233 | 4233 |
}, |
| 4234 | 4234 |
{
|
| 4235 |
+ "path": "/oapi/v1/groups", |
|
| 4236 |
+ "description": "OpenShift REST API, version v1", |
|
| 4237 |
+ "operations": [ |
|
| 4238 |
+ {
|
|
| 4239 |
+ "type": "v1.GroupList", |
|
| 4240 |
+ "method": "GET", |
|
| 4241 |
+ "summary": "list or watch objects of kind Group", |
|
| 4242 |
+ "nickname": "listGroup", |
|
| 4243 |
+ "parameters": [ |
|
| 4244 |
+ {
|
|
| 4245 |
+ "type": "string", |
|
| 4246 |
+ "paramType": "query", |
|
| 4247 |
+ "name": "pretty", |
|
| 4248 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4249 |
+ "required": false, |
|
| 4250 |
+ "allowMultiple": false |
|
| 4251 |
+ }, |
|
| 4252 |
+ {
|
|
| 4253 |
+ "type": "string", |
|
| 4254 |
+ "paramType": "query", |
|
| 4255 |
+ "name": "labelSelector", |
|
| 4256 |
+ "description": "a selector to restrict the list of returned objects by their labels; defaults to everything", |
|
| 4257 |
+ "required": false, |
|
| 4258 |
+ "allowMultiple": false |
|
| 4259 |
+ }, |
|
| 4260 |
+ {
|
|
| 4261 |
+ "type": "string", |
|
| 4262 |
+ "paramType": "query", |
|
| 4263 |
+ "name": "fieldSelector", |
|
| 4264 |
+ "description": "a selector to restrict the list of returned objects by their fields; defaults to everything", |
|
| 4265 |
+ "required": false, |
|
| 4266 |
+ "allowMultiple": false |
|
| 4267 |
+ }, |
|
| 4268 |
+ {
|
|
| 4269 |
+ "type": "boolean", |
|
| 4270 |
+ "paramType": "query", |
|
| 4271 |
+ "name": "watch", |
|
| 4272 |
+ "description": "watch for changes to the described resources and return them as a stream of add, update, and remove notifications; specify resourceVersion", |
|
| 4273 |
+ "required": false, |
|
| 4274 |
+ "allowMultiple": false |
|
| 4275 |
+ }, |
|
| 4276 |
+ {
|
|
| 4277 |
+ "type": "string", |
|
| 4278 |
+ "paramType": "query", |
|
| 4279 |
+ "name": "resourceVersion", |
|
| 4280 |
+ "description": "when specified with a watch call, shows changes that occur after that particular version of a resource; defaults to changes from the beginning of history", |
|
| 4281 |
+ "required": false, |
|
| 4282 |
+ "allowMultiple": false |
|
| 4283 |
+ } |
|
| 4284 |
+ ], |
|
| 4285 |
+ "responseMessages": [ |
|
| 4286 |
+ {
|
|
| 4287 |
+ "code": 200, |
|
| 4288 |
+ "message": "OK", |
|
| 4289 |
+ "responseModel": "v1.GroupList" |
|
| 4290 |
+ } |
|
| 4291 |
+ ], |
|
| 4292 |
+ "produces": [ |
|
| 4293 |
+ "application/json" |
|
| 4294 |
+ ], |
|
| 4295 |
+ "consumes": [ |
|
| 4296 |
+ "*/*" |
|
| 4297 |
+ ] |
|
| 4298 |
+ }, |
|
| 4299 |
+ {
|
|
| 4300 |
+ "type": "v1.Group", |
|
| 4301 |
+ "method": "POST", |
|
| 4302 |
+ "summary": "create a Group", |
|
| 4303 |
+ "nickname": "createGroup", |
|
| 4304 |
+ "parameters": [ |
|
| 4305 |
+ {
|
|
| 4306 |
+ "type": "string", |
|
| 4307 |
+ "paramType": "query", |
|
| 4308 |
+ "name": "pretty", |
|
| 4309 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4310 |
+ "required": false, |
|
| 4311 |
+ "allowMultiple": false |
|
| 4312 |
+ }, |
|
| 4313 |
+ {
|
|
| 4314 |
+ "type": "v1.Group", |
|
| 4315 |
+ "paramType": "body", |
|
| 4316 |
+ "name": "body", |
|
| 4317 |
+ "description": "", |
|
| 4318 |
+ "required": true, |
|
| 4319 |
+ "allowMultiple": false |
|
| 4320 |
+ } |
|
| 4321 |
+ ], |
|
| 4322 |
+ "responseMessages": [ |
|
| 4323 |
+ {
|
|
| 4324 |
+ "code": 200, |
|
| 4325 |
+ "message": "OK", |
|
| 4326 |
+ "responseModel": "v1.Group" |
|
| 4327 |
+ } |
|
| 4328 |
+ ], |
|
| 4329 |
+ "produces": [ |
|
| 4330 |
+ "application/json" |
|
| 4331 |
+ ], |
|
| 4332 |
+ "consumes": [ |
|
| 4333 |
+ "*/*" |
|
| 4334 |
+ ] |
|
| 4335 |
+ } |
|
| 4336 |
+ ] |
|
| 4337 |
+ }, |
|
| 4338 |
+ {
|
|
| 4339 |
+ "path": "/oapi/v1/watch/groups", |
|
| 4340 |
+ "description": "OpenShift REST API, version v1", |
|
| 4341 |
+ "operations": [ |
|
| 4342 |
+ {
|
|
| 4343 |
+ "type": "json.WatchEvent", |
|
| 4344 |
+ "method": "GET", |
|
| 4345 |
+ "summary": "watch individual changes to a list of Group", |
|
| 4346 |
+ "nickname": "watchGroupList", |
|
| 4347 |
+ "parameters": [ |
|
| 4348 |
+ {
|
|
| 4349 |
+ "type": "string", |
|
| 4350 |
+ "paramType": "query", |
|
| 4351 |
+ "name": "pretty", |
|
| 4352 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4353 |
+ "required": false, |
|
| 4354 |
+ "allowMultiple": false |
|
| 4355 |
+ }, |
|
| 4356 |
+ {
|
|
| 4357 |
+ "type": "string", |
|
| 4358 |
+ "paramType": "query", |
|
| 4359 |
+ "name": "labelSelector", |
|
| 4360 |
+ "description": "a selector to restrict the list of returned objects by their labels; defaults to everything", |
|
| 4361 |
+ "required": false, |
|
| 4362 |
+ "allowMultiple": false |
|
| 4363 |
+ }, |
|
| 4364 |
+ {
|
|
| 4365 |
+ "type": "string", |
|
| 4366 |
+ "paramType": "query", |
|
| 4367 |
+ "name": "fieldSelector", |
|
| 4368 |
+ "description": "a selector to restrict the list of returned objects by their fields; defaults to everything", |
|
| 4369 |
+ "required": false, |
|
| 4370 |
+ "allowMultiple": false |
|
| 4371 |
+ }, |
|
| 4372 |
+ {
|
|
| 4373 |
+ "type": "boolean", |
|
| 4374 |
+ "paramType": "query", |
|
| 4375 |
+ "name": "watch", |
|
| 4376 |
+ "description": "watch for changes to the described resources and return them as a stream of add, update, and remove notifications; specify resourceVersion", |
|
| 4377 |
+ "required": false, |
|
| 4378 |
+ "allowMultiple": false |
|
| 4379 |
+ }, |
|
| 4380 |
+ {
|
|
| 4381 |
+ "type": "string", |
|
| 4382 |
+ "paramType": "query", |
|
| 4383 |
+ "name": "resourceVersion", |
|
| 4384 |
+ "description": "when specified with a watch call, shows changes that occur after that particular version of a resource; defaults to changes from the beginning of history", |
|
| 4385 |
+ "required": false, |
|
| 4386 |
+ "allowMultiple": false |
|
| 4387 |
+ } |
|
| 4388 |
+ ], |
|
| 4389 |
+ "responseMessages": [ |
|
| 4390 |
+ {
|
|
| 4391 |
+ "code": 200, |
|
| 4392 |
+ "message": "OK", |
|
| 4393 |
+ "responseModel": "json.WatchEvent" |
|
| 4394 |
+ } |
|
| 4395 |
+ ], |
|
| 4396 |
+ "produces": [ |
|
| 4397 |
+ "application/json" |
|
| 4398 |
+ ], |
|
| 4399 |
+ "consumes": [ |
|
| 4400 |
+ "*/*" |
|
| 4401 |
+ ] |
|
| 4402 |
+ } |
|
| 4403 |
+ ] |
|
| 4404 |
+ }, |
|
| 4405 |
+ {
|
|
| 4406 |
+ "path": "/oapi/v1/groups/{name}",
|
|
| 4407 |
+ "description": "OpenShift REST API, version v1", |
|
| 4408 |
+ "operations": [ |
|
| 4409 |
+ {
|
|
| 4410 |
+ "type": "v1.Group", |
|
| 4411 |
+ "method": "GET", |
|
| 4412 |
+ "summary": "read the specified Group", |
|
| 4413 |
+ "nickname": "readGroup", |
|
| 4414 |
+ "parameters": [ |
|
| 4415 |
+ {
|
|
| 4416 |
+ "type": "string", |
|
| 4417 |
+ "paramType": "query", |
|
| 4418 |
+ "name": "pretty", |
|
| 4419 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4420 |
+ "required": false, |
|
| 4421 |
+ "allowMultiple": false |
|
| 4422 |
+ }, |
|
| 4423 |
+ {
|
|
| 4424 |
+ "type": "string", |
|
| 4425 |
+ "paramType": "path", |
|
| 4426 |
+ "name": "name", |
|
| 4427 |
+ "description": "name of the Group", |
|
| 4428 |
+ "required": true, |
|
| 4429 |
+ "allowMultiple": false |
|
| 4430 |
+ } |
|
| 4431 |
+ ], |
|
| 4432 |
+ "responseMessages": [ |
|
| 4433 |
+ {
|
|
| 4434 |
+ "code": 200, |
|
| 4435 |
+ "message": "OK", |
|
| 4436 |
+ "responseModel": "v1.Group" |
|
| 4437 |
+ } |
|
| 4438 |
+ ], |
|
| 4439 |
+ "produces": [ |
|
| 4440 |
+ "application/json" |
|
| 4441 |
+ ], |
|
| 4442 |
+ "consumes": [ |
|
| 4443 |
+ "*/*" |
|
| 4444 |
+ ] |
|
| 4445 |
+ }, |
|
| 4446 |
+ {
|
|
| 4447 |
+ "type": "v1.Group", |
|
| 4448 |
+ "method": "PUT", |
|
| 4449 |
+ "summary": "replace the specified Group", |
|
| 4450 |
+ "nickname": "replaceGroup", |
|
| 4451 |
+ "parameters": [ |
|
| 4452 |
+ {
|
|
| 4453 |
+ "type": "string", |
|
| 4454 |
+ "paramType": "query", |
|
| 4455 |
+ "name": "pretty", |
|
| 4456 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4457 |
+ "required": false, |
|
| 4458 |
+ "allowMultiple": false |
|
| 4459 |
+ }, |
|
| 4460 |
+ {
|
|
| 4461 |
+ "type": "v1.Group", |
|
| 4462 |
+ "paramType": "body", |
|
| 4463 |
+ "name": "body", |
|
| 4464 |
+ "description": "", |
|
| 4465 |
+ "required": true, |
|
| 4466 |
+ "allowMultiple": false |
|
| 4467 |
+ }, |
|
| 4468 |
+ {
|
|
| 4469 |
+ "type": "string", |
|
| 4470 |
+ "paramType": "path", |
|
| 4471 |
+ "name": "name", |
|
| 4472 |
+ "description": "name of the Group", |
|
| 4473 |
+ "required": true, |
|
| 4474 |
+ "allowMultiple": false |
|
| 4475 |
+ } |
|
| 4476 |
+ ], |
|
| 4477 |
+ "responseMessages": [ |
|
| 4478 |
+ {
|
|
| 4479 |
+ "code": 200, |
|
| 4480 |
+ "message": "OK", |
|
| 4481 |
+ "responseModel": "v1.Group" |
|
| 4482 |
+ } |
|
| 4483 |
+ ], |
|
| 4484 |
+ "produces": [ |
|
| 4485 |
+ "application/json" |
|
| 4486 |
+ ], |
|
| 4487 |
+ "consumes": [ |
|
| 4488 |
+ "*/*" |
|
| 4489 |
+ ] |
|
| 4490 |
+ }, |
|
| 4491 |
+ {
|
|
| 4492 |
+ "type": "v1.Group", |
|
| 4493 |
+ "method": "PATCH", |
|
| 4494 |
+ "summary": "partially update the specified Group", |
|
| 4495 |
+ "nickname": "patchGroup", |
|
| 4496 |
+ "parameters": [ |
|
| 4497 |
+ {
|
|
| 4498 |
+ "type": "string", |
|
| 4499 |
+ "paramType": "query", |
|
| 4500 |
+ "name": "pretty", |
|
| 4501 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4502 |
+ "required": false, |
|
| 4503 |
+ "allowMultiple": false |
|
| 4504 |
+ }, |
|
| 4505 |
+ {
|
|
| 4506 |
+ "type": "api.Patch", |
|
| 4507 |
+ "paramType": "body", |
|
| 4508 |
+ "name": "body", |
|
| 4509 |
+ "description": "", |
|
| 4510 |
+ "required": true, |
|
| 4511 |
+ "allowMultiple": false |
|
| 4512 |
+ }, |
|
| 4513 |
+ {
|
|
| 4514 |
+ "type": "string", |
|
| 4515 |
+ "paramType": "path", |
|
| 4516 |
+ "name": "name", |
|
| 4517 |
+ "description": "name of the Group", |
|
| 4518 |
+ "required": true, |
|
| 4519 |
+ "allowMultiple": false |
|
| 4520 |
+ } |
|
| 4521 |
+ ], |
|
| 4522 |
+ "responseMessages": [ |
|
| 4523 |
+ {
|
|
| 4524 |
+ "code": 200, |
|
| 4525 |
+ "message": "OK", |
|
| 4526 |
+ "responseModel": "v1.Group" |
|
| 4527 |
+ } |
|
| 4528 |
+ ], |
|
| 4529 |
+ "produces": [ |
|
| 4530 |
+ "application/json" |
|
| 4531 |
+ ], |
|
| 4532 |
+ "consumes": [ |
|
| 4533 |
+ "application/json-patch+json", |
|
| 4534 |
+ "application/merge-patch+json", |
|
| 4535 |
+ "application/strategic-merge-patch+json" |
|
| 4536 |
+ ] |
|
| 4537 |
+ }, |
|
| 4538 |
+ {
|
|
| 4539 |
+ "type": "v1.Status", |
|
| 4540 |
+ "method": "DELETE", |
|
| 4541 |
+ "summary": "delete a Group", |
|
| 4542 |
+ "nickname": "deleteGroup", |
|
| 4543 |
+ "parameters": [ |
|
| 4544 |
+ {
|
|
| 4545 |
+ "type": "string", |
|
| 4546 |
+ "paramType": "query", |
|
| 4547 |
+ "name": "pretty", |
|
| 4548 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4549 |
+ "required": false, |
|
| 4550 |
+ "allowMultiple": false |
|
| 4551 |
+ }, |
|
| 4552 |
+ {
|
|
| 4553 |
+ "type": "v1.DeleteOptions", |
|
| 4554 |
+ "paramType": "body", |
|
| 4555 |
+ "name": "body", |
|
| 4556 |
+ "description": "", |
|
| 4557 |
+ "required": true, |
|
| 4558 |
+ "allowMultiple": false |
|
| 4559 |
+ }, |
|
| 4560 |
+ {
|
|
| 4561 |
+ "type": "string", |
|
| 4562 |
+ "paramType": "path", |
|
| 4563 |
+ "name": "name", |
|
| 4564 |
+ "description": "name of the Group", |
|
| 4565 |
+ "required": true, |
|
| 4566 |
+ "allowMultiple": false |
|
| 4567 |
+ } |
|
| 4568 |
+ ], |
|
| 4569 |
+ "responseMessages": [ |
|
| 4570 |
+ {
|
|
| 4571 |
+ "code": 200, |
|
| 4572 |
+ "message": "OK", |
|
| 4573 |
+ "responseModel": "v1.Status" |
|
| 4574 |
+ } |
|
| 4575 |
+ ], |
|
| 4576 |
+ "produces": [ |
|
| 4577 |
+ "application/json" |
|
| 4578 |
+ ], |
|
| 4579 |
+ "consumes": [ |
|
| 4580 |
+ "*/*" |
|
| 4581 |
+ ] |
|
| 4582 |
+ } |
|
| 4583 |
+ ] |
|
| 4584 |
+ }, |
|
| 4585 |
+ {
|
|
| 4586 |
+ "path": "/oapi/v1/watch/groups/{name}",
|
|
| 4587 |
+ "description": "OpenShift REST API, version v1", |
|
| 4588 |
+ "operations": [ |
|
| 4589 |
+ {
|
|
| 4590 |
+ "type": "json.WatchEvent", |
|
| 4591 |
+ "method": "GET", |
|
| 4592 |
+ "summary": "watch changes to an object of kind Group", |
|
| 4593 |
+ "nickname": "watchGroup", |
|
| 4594 |
+ "parameters": [ |
|
| 4595 |
+ {
|
|
| 4596 |
+ "type": "string", |
|
| 4597 |
+ "paramType": "query", |
|
| 4598 |
+ "name": "pretty", |
|
| 4599 |
+ "description": "If 'true', then the output is pretty printed.", |
|
| 4600 |
+ "required": false, |
|
| 4601 |
+ "allowMultiple": false |
|
| 4602 |
+ }, |
|
| 4603 |
+ {
|
|
| 4604 |
+ "type": "string", |
|
| 4605 |
+ "paramType": "query", |
|
| 4606 |
+ "name": "labelSelector", |
|
| 4607 |
+ "description": "a selector to restrict the list of returned objects by their labels; defaults to everything", |
|
| 4608 |
+ "required": false, |
|
| 4609 |
+ "allowMultiple": false |
|
| 4610 |
+ }, |
|
| 4611 |
+ {
|
|
| 4612 |
+ "type": "string", |
|
| 4613 |
+ "paramType": "query", |
|
| 4614 |
+ "name": "fieldSelector", |
|
| 4615 |
+ "description": "a selector to restrict the list of returned objects by their fields; defaults to everything", |
|
| 4616 |
+ "required": false, |
|
| 4617 |
+ "allowMultiple": false |
|
| 4618 |
+ }, |
|
| 4619 |
+ {
|
|
| 4620 |
+ "type": "boolean", |
|
| 4621 |
+ "paramType": "query", |
|
| 4622 |
+ "name": "watch", |
|
| 4623 |
+ "description": "watch for changes to the described resources and return them as a stream of add, update, and remove notifications; specify resourceVersion", |
|
| 4624 |
+ "required": false, |
|
| 4625 |
+ "allowMultiple": false |
|
| 4626 |
+ }, |
|
| 4627 |
+ {
|
|
| 4628 |
+ "type": "string", |
|
| 4629 |
+ "paramType": "query", |
|
| 4630 |
+ "name": "resourceVersion", |
|
| 4631 |
+ "description": "when specified with a watch call, shows changes that occur after that particular version of a resource; defaults to changes from the beginning of history", |
|
| 4632 |
+ "required": false, |
|
| 4633 |
+ "allowMultiple": false |
|
| 4634 |
+ }, |
|
| 4635 |
+ {
|
|
| 4636 |
+ "type": "string", |
|
| 4637 |
+ "paramType": "path", |
|
| 4638 |
+ "name": "name", |
|
| 4639 |
+ "description": "name of the Group", |
|
| 4640 |
+ "required": true, |
|
| 4641 |
+ "allowMultiple": false |
|
| 4642 |
+ } |
|
| 4643 |
+ ], |
|
| 4644 |
+ "responseMessages": [ |
|
| 4645 |
+ {
|
|
| 4646 |
+ "code": 200, |
|
| 4647 |
+ "message": "OK", |
|
| 4648 |
+ "responseModel": "json.WatchEvent" |
|
| 4649 |
+ } |
|
| 4650 |
+ ], |
|
| 4651 |
+ "produces": [ |
|
| 4652 |
+ "application/json" |
|
| 4653 |
+ ], |
|
| 4654 |
+ "consumes": [ |
|
| 4655 |
+ "*/*" |
|
| 4656 |
+ ] |
|
| 4657 |
+ } |
|
| 4658 |
+ ] |
|
| 4659 |
+ }, |
|
| 4660 |
+ {
|
|
| 4235 | 4661 |
"path": "/oapi/v1/hostsubnets", |
| 4236 | 4662 |
"description": "OpenShift REST API, version v1", |
| 4237 | 4663 |
"operations": [ |
| ... | ... |
@@ -14652,6 +15078,58 @@ |
| 14652 | 14652 |
} |
| 14653 | 14653 |
} |
| 14654 | 14654 |
}, |
| 14655 |
+ "v1.GroupList": {
|
|
| 14656 |
+ "id": "v1.GroupList", |
|
| 14657 |
+ "required": [ |
|
| 14658 |
+ "items" |
|
| 14659 |
+ ], |
|
| 14660 |
+ "properties": {
|
|
| 14661 |
+ "kind": {
|
|
| 14662 |
+ "type": "string", |
|
| 14663 |
+ "description": "kind of object, in CamelCase; cannot be updated; see http://releases.k8s.io/v1.0.0/docs/api-conventions.md#types-kinds" |
|
| 14664 |
+ }, |
|
| 14665 |
+ "apiVersion": {
|
|
| 14666 |
+ "type": "string", |
|
| 14667 |
+ "description": "version of the schema the object should have; see http://releases.k8s.io/v1.0.0/docs/api-conventions.md#resources" |
|
| 14668 |
+ }, |
|
| 14669 |
+ "metadata": {
|
|
| 14670 |
+ "$ref": "v1.ListMeta" |
|
| 14671 |
+ }, |
|
| 14672 |
+ "items": {
|
|
| 14673 |
+ "type": "array", |
|
| 14674 |
+ "items": {
|
|
| 14675 |
+ "$ref": "v1.Group" |
|
| 14676 |
+ }, |
|
| 14677 |
+ "description": "list of groups" |
|
| 14678 |
+ } |
|
| 14679 |
+ } |
|
| 14680 |
+ }, |
|
| 14681 |
+ "v1.Group": {
|
|
| 14682 |
+ "id": "v1.Group", |
|
| 14683 |
+ "required": [ |
|
| 14684 |
+ "users" |
|
| 14685 |
+ ], |
|
| 14686 |
+ "properties": {
|
|
| 14687 |
+ "kind": {
|
|
| 14688 |
+ "type": "string", |
|
| 14689 |
+ "description": "kind of object, in CamelCase; cannot be updated; see http://releases.k8s.io/v1.0.0/docs/api-conventions.md#types-kinds" |
|
| 14690 |
+ }, |
|
| 14691 |
+ "apiVersion": {
|
|
| 14692 |
+ "type": "string", |
|
| 14693 |
+ "description": "version of the schema the object should have; see http://releases.k8s.io/v1.0.0/docs/api-conventions.md#resources" |
|
| 14694 |
+ }, |
|
| 14695 |
+ "metadata": {
|
|
| 14696 |
+ "$ref": "v1.ObjectMeta" |
|
| 14697 |
+ }, |
|
| 14698 |
+ "users": {
|
|
| 14699 |
+ "type": "array", |
|
| 14700 |
+ "items": {
|
|
| 14701 |
+ "type": "string" |
|
| 14702 |
+ }, |
|
| 14703 |
+ "description": "list of users in this group" |
|
| 14704 |
+ } |
|
| 14705 |
+ } |
|
| 14706 |
+ }, |
|
| 14655 | 14707 |
"v1.HostSubnetList": {
|
| 14656 | 14708 |
"id": "v1.HostSubnetList", |
| 14657 | 14709 |
"required": [ |
| ... | ... |
@@ -2303,6 +2303,52 @@ func deepCopy_api_TemplateList(in templateapi.TemplateList, out *templateapi.Tem |
| 2303 | 2303 |
return nil |
| 2304 | 2304 |
} |
| 2305 | 2305 |
|
| 2306 |
+func deepCopy_api_Group(in userapi.Group, out *userapi.Group, c *conversion.Cloner) error {
|
|
| 2307 |
+ if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
|
| 2308 |
+ return err |
|
| 2309 |
+ } else {
|
|
| 2310 |
+ out.TypeMeta = newVal.(api.TypeMeta) |
|
| 2311 |
+ } |
|
| 2312 |
+ if newVal, err := c.DeepCopy(in.ObjectMeta); err != nil {
|
|
| 2313 |
+ return err |
|
| 2314 |
+ } else {
|
|
| 2315 |
+ out.ObjectMeta = newVal.(api.ObjectMeta) |
|
| 2316 |
+ } |
|
| 2317 |
+ if in.Users != nil {
|
|
| 2318 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2319 |
+ for i := range in.Users {
|
|
| 2320 |
+ out.Users[i] = in.Users[i] |
|
| 2321 |
+ } |
|
| 2322 |
+ } else {
|
|
| 2323 |
+ out.Users = nil |
|
| 2324 |
+ } |
|
| 2325 |
+ return nil |
|
| 2326 |
+} |
|
| 2327 |
+ |
|
| 2328 |
+func deepCopy_api_GroupList(in userapi.GroupList, out *userapi.GroupList, c *conversion.Cloner) error {
|
|
| 2329 |
+ if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
|
| 2330 |
+ return err |
|
| 2331 |
+ } else {
|
|
| 2332 |
+ out.TypeMeta = newVal.(api.TypeMeta) |
|
| 2333 |
+ } |
|
| 2334 |
+ if newVal, err := c.DeepCopy(in.ListMeta); err != nil {
|
|
| 2335 |
+ return err |
|
| 2336 |
+ } else {
|
|
| 2337 |
+ out.ListMeta = newVal.(api.ListMeta) |
|
| 2338 |
+ } |
|
| 2339 |
+ if in.Items != nil {
|
|
| 2340 |
+ out.Items = make([]userapi.Group, len(in.Items)) |
|
| 2341 |
+ for i := range in.Items {
|
|
| 2342 |
+ if err := deepCopy_api_Group(in.Items[i], &out.Items[i], c); err != nil {
|
|
| 2343 |
+ return err |
|
| 2344 |
+ } |
|
| 2345 |
+ } |
|
| 2346 |
+ } else {
|
|
| 2347 |
+ out.Items = nil |
|
| 2348 |
+ } |
|
| 2349 |
+ return nil |
|
| 2350 |
+} |
|
| 2351 |
+ |
|
| 2306 | 2352 |
func deepCopy_api_Identity(in userapi.Identity, out *userapi.Identity, c *conversion.Cloner) error {
|
| 2307 | 2353 |
if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
| 2308 | 2354 |
return err |
| ... | ... |
@@ -2536,6 +2582,8 @@ func init() {
|
| 2536 | 2536 |
deepCopy_api_Parameter, |
| 2537 | 2537 |
deepCopy_api_Template, |
| 2538 | 2538 |
deepCopy_api_TemplateList, |
| 2539 |
+ deepCopy_api_Group, |
|
| 2540 |
+ deepCopy_api_GroupList, |
|
| 2539 | 2541 |
deepCopy_api_Identity, |
| 2540 | 2542 |
deepCopy_api_IdentityList, |
| 2541 | 2543 |
deepCopy_api_User, |
| ... | ... |
@@ -2679,6 +2679,50 @@ func convert_v1_TemplateList_To_api_TemplateList(in *templateapiv1.TemplateList, |
| 2679 | 2679 |
return nil |
| 2680 | 2680 |
} |
| 2681 | 2681 |
|
| 2682 |
+func convert_api_Group_To_v1_Group(in *userapi.Group, out *userapiv1.Group, s conversion.Scope) error {
|
|
| 2683 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2684 |
+ defaulting.(func(*userapi.Group))(in) |
|
| 2685 |
+ } |
|
| 2686 |
+ if err := convert_api_TypeMeta_To_v1_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2687 |
+ return err |
|
| 2688 |
+ } |
|
| 2689 |
+ if err := convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil {
|
|
| 2690 |
+ return err |
|
| 2691 |
+ } |
|
| 2692 |
+ if in.Users != nil {
|
|
| 2693 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2694 |
+ for i := range in.Users {
|
|
| 2695 |
+ out.Users[i] = in.Users[i] |
|
| 2696 |
+ } |
|
| 2697 |
+ } else {
|
|
| 2698 |
+ out.Users = nil |
|
| 2699 |
+ } |
|
| 2700 |
+ return nil |
|
| 2701 |
+} |
|
| 2702 |
+ |
|
| 2703 |
+func convert_api_GroupList_To_v1_GroupList(in *userapi.GroupList, out *userapiv1.GroupList, s conversion.Scope) error {
|
|
| 2704 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2705 |
+ defaulting.(func(*userapi.GroupList))(in) |
|
| 2706 |
+ } |
|
| 2707 |
+ if err := convert_api_TypeMeta_To_v1_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2708 |
+ return err |
|
| 2709 |
+ } |
|
| 2710 |
+ if err := convert_api_ListMeta_To_v1_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil {
|
|
| 2711 |
+ return err |
|
| 2712 |
+ } |
|
| 2713 |
+ if in.Items != nil {
|
|
| 2714 |
+ out.Items = make([]userapiv1.Group, len(in.Items)) |
|
| 2715 |
+ for i := range in.Items {
|
|
| 2716 |
+ if err := convert_api_Group_To_v1_Group(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 2717 |
+ return err |
|
| 2718 |
+ } |
|
| 2719 |
+ } |
|
| 2720 |
+ } else {
|
|
| 2721 |
+ out.Items = nil |
|
| 2722 |
+ } |
|
| 2723 |
+ return nil |
|
| 2724 |
+} |
|
| 2725 |
+ |
|
| 2682 | 2726 |
func convert_api_Identity_To_v1_Identity(in *userapi.Identity, out *userapiv1.Identity, s conversion.Scope) error {
|
| 2683 | 2727 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 2684 | 2728 |
defaulting.(func(*userapi.Identity))(in) |
| ... | ... |
@@ -2800,6 +2844,50 @@ func convert_api_UserList_To_v1_UserList(in *userapi.UserList, out *userapiv1.Us |
| 2800 | 2800 |
return nil |
| 2801 | 2801 |
} |
| 2802 | 2802 |
|
| 2803 |
+func convert_v1_Group_To_api_Group(in *userapiv1.Group, out *userapi.Group, s conversion.Scope) error {
|
|
| 2804 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2805 |
+ defaulting.(func(*userapiv1.Group))(in) |
|
| 2806 |
+ } |
|
| 2807 |
+ if err := convert_v1_TypeMeta_To_api_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2808 |
+ return err |
|
| 2809 |
+ } |
|
| 2810 |
+ if err := convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil {
|
|
| 2811 |
+ return err |
|
| 2812 |
+ } |
|
| 2813 |
+ if in.Users != nil {
|
|
| 2814 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2815 |
+ for i := range in.Users {
|
|
| 2816 |
+ out.Users[i] = in.Users[i] |
|
| 2817 |
+ } |
|
| 2818 |
+ } else {
|
|
| 2819 |
+ out.Users = nil |
|
| 2820 |
+ } |
|
| 2821 |
+ return nil |
|
| 2822 |
+} |
|
| 2823 |
+ |
|
| 2824 |
+func convert_v1_GroupList_To_api_GroupList(in *userapiv1.GroupList, out *userapi.GroupList, s conversion.Scope) error {
|
|
| 2825 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2826 |
+ defaulting.(func(*userapiv1.GroupList))(in) |
|
| 2827 |
+ } |
|
| 2828 |
+ if err := convert_v1_TypeMeta_To_api_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2829 |
+ return err |
|
| 2830 |
+ } |
|
| 2831 |
+ if err := convert_v1_ListMeta_To_api_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil {
|
|
| 2832 |
+ return err |
|
| 2833 |
+ } |
|
| 2834 |
+ if in.Items != nil {
|
|
| 2835 |
+ out.Items = make([]userapi.Group, len(in.Items)) |
|
| 2836 |
+ for i := range in.Items {
|
|
| 2837 |
+ if err := convert_v1_Group_To_api_Group(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 2838 |
+ return err |
|
| 2839 |
+ } |
|
| 2840 |
+ } |
|
| 2841 |
+ } else {
|
|
| 2842 |
+ out.Items = nil |
|
| 2843 |
+ } |
|
| 2844 |
+ return nil |
|
| 2845 |
+} |
|
| 2846 |
+ |
|
| 2803 | 2847 |
func convert_v1_Identity_To_api_Identity(in *userapiv1.Identity, out *userapi.Identity, s conversion.Scope) error {
|
| 2804 | 2848 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 2805 | 2849 |
defaulting.(func(*userapiv1.Identity))(in) |
| ... | ... |
@@ -2950,6 +3038,8 @@ func init() {
|
| 2950 | 2950 |
convert_api_EnvVar_To_v1_EnvVar, |
| 2951 | 2951 |
convert_api_GitBuildSource_To_v1_GitBuildSource, |
| 2952 | 2952 |
convert_api_GitSourceRevision_To_v1_GitSourceRevision, |
| 2953 |
+ convert_api_GroupList_To_v1_GroupList, |
|
| 2954 |
+ convert_api_Group_To_v1_Group, |
|
| 2953 | 2955 |
convert_api_HostSubnetList_To_v1_HostSubnetList, |
| 2954 | 2956 |
convert_api_HostSubnet_To_v1_HostSubnet, |
| 2955 | 2957 |
convert_api_IdentityList_To_v1_IdentityList, |
| ... | ... |
@@ -3024,6 +3114,8 @@ func init() {
|
| 3024 | 3024 |
convert_v1_EnvVar_To_api_EnvVar, |
| 3025 | 3025 |
convert_v1_GitBuildSource_To_api_GitBuildSource, |
| 3026 | 3026 |
convert_v1_GitSourceRevision_To_api_GitSourceRevision, |
| 3027 |
+ convert_v1_GroupList_To_api_GroupList, |
|
| 3028 |
+ convert_v1_Group_To_api_Group, |
|
| 3027 | 3029 |
convert_v1_HostSubnetList_To_api_HostSubnetList, |
| 3028 | 3030 |
convert_v1_HostSubnet_To_api_HostSubnet, |
| 3029 | 3031 |
convert_v1_IdentityList_To_api_IdentityList, |
| ... | ... |
@@ -2180,6 +2180,52 @@ func deepCopy_v1_TemplateList(in templateapiv1.TemplateList, out *templateapiv1. |
| 2180 | 2180 |
return nil |
| 2181 | 2181 |
} |
| 2182 | 2182 |
|
| 2183 |
+func deepCopy_v1_Group(in userapiv1.Group, out *userapiv1.Group, c *conversion.Cloner) error {
|
|
| 2184 |
+ if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
|
| 2185 |
+ return err |
|
| 2186 |
+ } else {
|
|
| 2187 |
+ out.TypeMeta = newVal.(v1.TypeMeta) |
|
| 2188 |
+ } |
|
| 2189 |
+ if newVal, err := c.DeepCopy(in.ObjectMeta); err != nil {
|
|
| 2190 |
+ return err |
|
| 2191 |
+ } else {
|
|
| 2192 |
+ out.ObjectMeta = newVal.(v1.ObjectMeta) |
|
| 2193 |
+ } |
|
| 2194 |
+ if in.Users != nil {
|
|
| 2195 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2196 |
+ for i := range in.Users {
|
|
| 2197 |
+ out.Users[i] = in.Users[i] |
|
| 2198 |
+ } |
|
| 2199 |
+ } else {
|
|
| 2200 |
+ out.Users = nil |
|
| 2201 |
+ } |
|
| 2202 |
+ return nil |
|
| 2203 |
+} |
|
| 2204 |
+ |
|
| 2205 |
+func deepCopy_v1_GroupList(in userapiv1.GroupList, out *userapiv1.GroupList, c *conversion.Cloner) error {
|
|
| 2206 |
+ if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
|
| 2207 |
+ return err |
|
| 2208 |
+ } else {
|
|
| 2209 |
+ out.TypeMeta = newVal.(v1.TypeMeta) |
|
| 2210 |
+ } |
|
| 2211 |
+ if newVal, err := c.DeepCopy(in.ListMeta); err != nil {
|
|
| 2212 |
+ return err |
|
| 2213 |
+ } else {
|
|
| 2214 |
+ out.ListMeta = newVal.(v1.ListMeta) |
|
| 2215 |
+ } |
|
| 2216 |
+ if in.Items != nil {
|
|
| 2217 |
+ out.Items = make([]userapiv1.Group, len(in.Items)) |
|
| 2218 |
+ for i := range in.Items {
|
|
| 2219 |
+ if err := deepCopy_v1_Group(in.Items[i], &out.Items[i], c); err != nil {
|
|
| 2220 |
+ return err |
|
| 2221 |
+ } |
|
| 2222 |
+ } |
|
| 2223 |
+ } else {
|
|
| 2224 |
+ out.Items = nil |
|
| 2225 |
+ } |
|
| 2226 |
+ return nil |
|
| 2227 |
+} |
|
| 2228 |
+ |
|
| 2183 | 2229 |
func deepCopy_v1_Identity(in userapiv1.Identity, out *userapiv1.Identity, c *conversion.Cloner) error {
|
| 2184 | 2230 |
if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
| 2185 | 2231 |
return err |
| ... | ... |
@@ -2418,6 +2464,8 @@ func init() {
|
| 2418 | 2418 |
deepCopy_v1_Parameter, |
| 2419 | 2419 |
deepCopy_v1_Template, |
| 2420 | 2420 |
deepCopy_v1_TemplateList, |
| 2421 |
+ deepCopy_v1_Group, |
|
| 2422 |
+ deepCopy_v1_GroupList, |
|
| 2421 | 2423 |
deepCopy_v1_Identity, |
| 2422 | 2424 |
deepCopy_v1_IdentityList, |
| 2423 | 2425 |
deepCopy_v1_User, |
| ... | ... |
@@ -2615,6 +2615,50 @@ func convert_v1beta3_TemplateList_To_api_TemplateList(in *templateapiv1beta3.Tem |
| 2615 | 2615 |
return nil |
| 2616 | 2616 |
} |
| 2617 | 2617 |
|
| 2618 |
+func convert_api_Group_To_v1beta3_Group(in *userapi.Group, out *userapiv1beta3.Group, s conversion.Scope) error {
|
|
| 2619 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2620 |
+ defaulting.(func(*userapi.Group))(in) |
|
| 2621 |
+ } |
|
| 2622 |
+ if err := convert_api_TypeMeta_To_v1beta3_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2623 |
+ return err |
|
| 2624 |
+ } |
|
| 2625 |
+ if err := convert_api_ObjectMeta_To_v1beta3_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil {
|
|
| 2626 |
+ return err |
|
| 2627 |
+ } |
|
| 2628 |
+ if in.Users != nil {
|
|
| 2629 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2630 |
+ for i := range in.Users {
|
|
| 2631 |
+ out.Users[i] = in.Users[i] |
|
| 2632 |
+ } |
|
| 2633 |
+ } else {
|
|
| 2634 |
+ out.Users = nil |
|
| 2635 |
+ } |
|
| 2636 |
+ return nil |
|
| 2637 |
+} |
|
| 2638 |
+ |
|
| 2639 |
+func convert_api_GroupList_To_v1beta3_GroupList(in *userapi.GroupList, out *userapiv1beta3.GroupList, s conversion.Scope) error {
|
|
| 2640 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2641 |
+ defaulting.(func(*userapi.GroupList))(in) |
|
| 2642 |
+ } |
|
| 2643 |
+ if err := convert_api_TypeMeta_To_v1beta3_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2644 |
+ return err |
|
| 2645 |
+ } |
|
| 2646 |
+ if err := convert_api_ListMeta_To_v1beta3_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil {
|
|
| 2647 |
+ return err |
|
| 2648 |
+ } |
|
| 2649 |
+ if in.Items != nil {
|
|
| 2650 |
+ out.Items = make([]userapiv1beta3.Group, len(in.Items)) |
|
| 2651 |
+ for i := range in.Items {
|
|
| 2652 |
+ if err := convert_api_Group_To_v1beta3_Group(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 2653 |
+ return err |
|
| 2654 |
+ } |
|
| 2655 |
+ } |
|
| 2656 |
+ } else {
|
|
| 2657 |
+ out.Items = nil |
|
| 2658 |
+ } |
|
| 2659 |
+ return nil |
|
| 2660 |
+} |
|
| 2661 |
+ |
|
| 2618 | 2662 |
func convert_api_Identity_To_v1beta3_Identity(in *userapi.Identity, out *userapiv1beta3.Identity, s conversion.Scope) error {
|
| 2619 | 2663 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 2620 | 2664 |
defaulting.(func(*userapi.Identity))(in) |
| ... | ... |
@@ -2736,6 +2780,50 @@ func convert_api_UserList_To_v1beta3_UserList(in *userapi.UserList, out *userapi |
| 2736 | 2736 |
return nil |
| 2737 | 2737 |
} |
| 2738 | 2738 |
|
| 2739 |
+func convert_v1beta3_Group_To_api_Group(in *userapiv1beta3.Group, out *userapi.Group, s conversion.Scope) error {
|
|
| 2740 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2741 |
+ defaulting.(func(*userapiv1beta3.Group))(in) |
|
| 2742 |
+ } |
|
| 2743 |
+ if err := convert_v1beta3_TypeMeta_To_api_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2744 |
+ return err |
|
| 2745 |
+ } |
|
| 2746 |
+ if err := convert_v1beta3_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil {
|
|
| 2747 |
+ return err |
|
| 2748 |
+ } |
|
| 2749 |
+ if in.Users != nil {
|
|
| 2750 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2751 |
+ for i := range in.Users {
|
|
| 2752 |
+ out.Users[i] = in.Users[i] |
|
| 2753 |
+ } |
|
| 2754 |
+ } else {
|
|
| 2755 |
+ out.Users = nil |
|
| 2756 |
+ } |
|
| 2757 |
+ return nil |
|
| 2758 |
+} |
|
| 2759 |
+ |
|
| 2760 |
+func convert_v1beta3_GroupList_To_api_GroupList(in *userapiv1beta3.GroupList, out *userapi.GroupList, s conversion.Scope) error {
|
|
| 2761 |
+ if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
| 2762 |
+ defaulting.(func(*userapiv1beta3.GroupList))(in) |
|
| 2763 |
+ } |
|
| 2764 |
+ if err := convert_v1beta3_TypeMeta_To_api_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
|
|
| 2765 |
+ return err |
|
| 2766 |
+ } |
|
| 2767 |
+ if err := convert_v1beta3_ListMeta_To_api_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil {
|
|
| 2768 |
+ return err |
|
| 2769 |
+ } |
|
| 2770 |
+ if in.Items != nil {
|
|
| 2771 |
+ out.Items = make([]userapi.Group, len(in.Items)) |
|
| 2772 |
+ for i := range in.Items {
|
|
| 2773 |
+ if err := convert_v1beta3_Group_To_api_Group(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 2774 |
+ return err |
|
| 2775 |
+ } |
|
| 2776 |
+ } |
|
| 2777 |
+ } else {
|
|
| 2778 |
+ out.Items = nil |
|
| 2779 |
+ } |
|
| 2780 |
+ return nil |
|
| 2781 |
+} |
|
| 2782 |
+ |
|
| 2739 | 2783 |
func convert_v1beta3_Identity_To_api_Identity(in *userapiv1beta3.Identity, out *userapi.Identity, s conversion.Scope) error {
|
| 2740 | 2784 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 2741 | 2785 |
defaulting.(func(*userapiv1beta3.Identity))(in) |
| ... | ... |
@@ -2887,6 +2975,8 @@ func init() {
|
| 2887 | 2887 |
convert_api_EnvVar_To_v1beta3_EnvVar, |
| 2888 | 2888 |
convert_api_GitBuildSource_To_v1beta3_GitBuildSource, |
| 2889 | 2889 |
convert_api_GitSourceRevision_To_v1beta3_GitSourceRevision, |
| 2890 |
+ convert_api_GroupList_To_v1beta3_GroupList, |
|
| 2891 |
+ convert_api_Group_To_v1beta3_Group, |
|
| 2890 | 2892 |
convert_api_HostSubnetList_To_v1beta3_HostSubnetList, |
| 2891 | 2893 |
convert_api_HostSubnet_To_v1beta3_HostSubnet, |
| 2892 | 2894 |
convert_api_IdentityList_To_v1beta3_IdentityList, |
| ... | ... |
@@ -2959,6 +3049,8 @@ func init() {
|
| 2959 | 2959 |
convert_v1beta3_EnvVar_To_api_EnvVar, |
| 2960 | 2960 |
convert_v1beta3_GitBuildSource_To_api_GitBuildSource, |
| 2961 | 2961 |
convert_v1beta3_GitSourceRevision_To_api_GitSourceRevision, |
| 2962 |
+ convert_v1beta3_GroupList_To_api_GroupList, |
|
| 2963 |
+ convert_v1beta3_Group_To_api_Group, |
|
| 2962 | 2964 |
convert_v1beta3_HostSubnetList_To_api_HostSubnetList, |
| 2963 | 2965 |
convert_v1beta3_HostSubnet_To_api_HostSubnet, |
| 2964 | 2966 |
convert_v1beta3_IdentityList_To_api_IdentityList, |
| ... | ... |
@@ -2170,6 +2170,52 @@ func deepCopy_v1beta3_TemplateList(in templateapiv1beta3.TemplateList, out *temp |
| 2170 | 2170 |
return nil |
| 2171 | 2171 |
} |
| 2172 | 2172 |
|
| 2173 |
+func deepCopy_v1beta3_Group(in userapiv1beta3.Group, out *userapiv1beta3.Group, c *conversion.Cloner) error {
|
|
| 2174 |
+ if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
|
| 2175 |
+ return err |
|
| 2176 |
+ } else {
|
|
| 2177 |
+ out.TypeMeta = newVal.(v1beta3.TypeMeta) |
|
| 2178 |
+ } |
|
| 2179 |
+ if newVal, err := c.DeepCopy(in.ObjectMeta); err != nil {
|
|
| 2180 |
+ return err |
|
| 2181 |
+ } else {
|
|
| 2182 |
+ out.ObjectMeta = newVal.(v1beta3.ObjectMeta) |
|
| 2183 |
+ } |
|
| 2184 |
+ if in.Users != nil {
|
|
| 2185 |
+ out.Users = make([]string, len(in.Users)) |
|
| 2186 |
+ for i := range in.Users {
|
|
| 2187 |
+ out.Users[i] = in.Users[i] |
|
| 2188 |
+ } |
|
| 2189 |
+ } else {
|
|
| 2190 |
+ out.Users = nil |
|
| 2191 |
+ } |
|
| 2192 |
+ return nil |
|
| 2193 |
+} |
|
| 2194 |
+ |
|
| 2195 |
+func deepCopy_v1beta3_GroupList(in userapiv1beta3.GroupList, out *userapiv1beta3.GroupList, c *conversion.Cloner) error {
|
|
| 2196 |
+ if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
|
| 2197 |
+ return err |
|
| 2198 |
+ } else {
|
|
| 2199 |
+ out.TypeMeta = newVal.(v1beta3.TypeMeta) |
|
| 2200 |
+ } |
|
| 2201 |
+ if newVal, err := c.DeepCopy(in.ListMeta); err != nil {
|
|
| 2202 |
+ return err |
|
| 2203 |
+ } else {
|
|
| 2204 |
+ out.ListMeta = newVal.(v1beta3.ListMeta) |
|
| 2205 |
+ } |
|
| 2206 |
+ if in.Items != nil {
|
|
| 2207 |
+ out.Items = make([]userapiv1beta3.Group, len(in.Items)) |
|
| 2208 |
+ for i := range in.Items {
|
|
| 2209 |
+ if err := deepCopy_v1beta3_Group(in.Items[i], &out.Items[i], c); err != nil {
|
|
| 2210 |
+ return err |
|
| 2211 |
+ } |
|
| 2212 |
+ } |
|
| 2213 |
+ } else {
|
|
| 2214 |
+ out.Items = nil |
|
| 2215 |
+ } |
|
| 2216 |
+ return nil |
|
| 2217 |
+} |
|
| 2218 |
+ |
|
| 2173 | 2219 |
func deepCopy_v1beta3_Identity(in userapiv1beta3.Identity, out *userapiv1beta3.Identity, c *conversion.Cloner) error {
|
| 2174 | 2220 |
if newVal, err := c.DeepCopy(in.TypeMeta); err != nil {
|
| 2175 | 2221 |
return err |
| ... | ... |
@@ -2408,6 +2454,8 @@ func init() {
|
| 2408 | 2408 |
deepCopy_v1beta3_Parameter, |
| 2409 | 2409 |
deepCopy_v1beta3_Template, |
| 2410 | 2410 |
deepCopy_v1beta3_TemplateList, |
| 2411 |
+ deepCopy_v1beta3_Group, |
|
| 2412 |
+ deepCopy_v1beta3_GroupList, |
|
| 2411 | 2413 |
deepCopy_v1beta3_Identity, |
| 2412 | 2414 |
deepCopy_v1beta3_IdentityList, |
| 2413 | 2415 |
deepCopy_v1beta3_User, |
| ... | ... |
@@ -67,4 +67,5 @@ func init() {
|
| 67 | 67 |
Validator.Register(&userapi.User{}, uservalidation.ValidateUser, uservalidation.ValidateUserUpdate)
|
| 68 | 68 |
Validator.Register(&userapi.Identity{}, uservalidation.ValidateIdentity, uservalidation.ValidateIdentityUpdate)
|
| 69 | 69 |
Validator.Register(&userapi.UserIdentityMapping{}, uservalidation.ValidateUserIdentityMapping, uservalidation.ValidateUserIdentityMappingUpdate)
|
| 70 |
+ Validator.Register(&userapi.Group{}, uservalidation.ValidateGroup, uservalidation.ValidateGroupUpdate)
|
|
| 70 | 71 |
} |
| ... | ... |
@@ -69,7 +69,7 @@ var ( |
| 69 | 69 |
DeploymentGroupName: {"deployments", "deploymentconfigs", "generatedeploymentconfigs", "deploymentconfigrollbacks"},
|
| 70 | 70 |
SDNGroupName: {"clusternetworks", "hostsubnets"},
|
| 71 | 71 |
TemplateGroupName: {"templates", "templateconfigs", "processedtemplates"},
|
| 72 |
- UserGroupName: {"identities", "users", "useridentitymappings"},
|
|
| 72 |
+ UserGroupName: {"identities", "users", "useridentitymappings", "groups"},
|
|
| 73 | 73 |
OAuthGroupName: {"oauthauthorizetokens", "oauthaccesstokens", "oauthclients", "oauthclientauthorizations"},
|
| 74 | 74 |
PolicyOwnerGroupName: {"policies", "policybindings"},
|
| 75 | 75 |
PermissionGrantingGroupName: {"roles", "rolebindings", "resourceaccessreviews", "subjectaccessreviews"},
|
| ... | ... |
@@ -29,6 +29,7 @@ type Interface interface {
|
| 29 | 29 |
ClusterNetworkingInterface |
| 30 | 30 |
IdentitiesInterface |
| 31 | 31 |
UsersInterface |
| 32 |
+ GroupsInterface |
|
| 32 | 33 |
UserIdentityMappingsInterface |
| 33 | 34 |
ProjectsInterface |
| 34 | 35 |
ProjectRequestsInterface |
| ... | ... |
@@ -124,6 +125,11 @@ func (c *Client) UserIdentityMappings() UserIdentityMappingInterface {
|
| 124 | 124 |
return newUserIdentityMappings(c) |
| 125 | 125 |
} |
| 126 | 126 |
|
| 127 |
+// Groups provides a REST client for Groups |
|
| 128 |
+func (c *Client) Groups() GroupInterface {
|
|
| 129 |
+ return newGroups(c) |
|
| 130 |
+} |
|
| 131 |
+ |
|
| 127 | 132 |
// Projects provides a REST client for Projects |
| 128 | 133 |
func (c *Client) Projects() ProjectInterface {
|
| 129 | 134 |
return newProjects(c) |
| 130 | 135 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,71 @@ |
| 0 |
+package client |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 4 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 5 |
+ userapi "github.com/openshift/origin/pkg/user/api" |
|
| 6 |
+) |
|
| 7 |
+ |
|
| 8 |
+// GroupsInterface has methods to work with Group resources |
|
| 9 |
+type GroupsInterface interface {
|
|
| 10 |
+ Groups() GroupInterface |
|
| 11 |
+} |
|
| 12 |
+ |
|
| 13 |
+// GroupInterface exposes methods on group resources. |
|
| 14 |
+type GroupInterface interface {
|
|
| 15 |
+ List(label labels.Selector, field fields.Selector) (*userapi.GroupList, error) |
|
| 16 |
+ Get(name string) (*userapi.Group, error) |
|
| 17 |
+ Create(group *userapi.Group) (*userapi.Group, error) |
|
| 18 |
+ Update(group *userapi.Group) (*userapi.Group, error) |
|
| 19 |
+ Delete(name string) error |
|
| 20 |
+} |
|
| 21 |
+ |
|
| 22 |
+// groups implements GroupInterface interface |
|
| 23 |
+type groups struct {
|
|
| 24 |
+ r *Client |
|
| 25 |
+} |
|
| 26 |
+ |
|
| 27 |
+// newGroups returns a groups |
|
| 28 |
+func newGroups(c *Client) *groups {
|
|
| 29 |
+ return &groups{
|
|
| 30 |
+ r: c, |
|
| 31 |
+ } |
|
| 32 |
+} |
|
| 33 |
+ |
|
| 34 |
+// List returns a list of groups that match the label and field selectors. |
|
| 35 |
+func (c *groups) List(label labels.Selector, field fields.Selector) (result *userapi.GroupList, err error) {
|
|
| 36 |
+ result = &userapi.GroupList{}
|
|
| 37 |
+ err = c.r.Get(). |
|
| 38 |
+ Resource("groups").
|
|
| 39 |
+ LabelsSelectorParam(label). |
|
| 40 |
+ FieldsSelectorParam(field). |
|
| 41 |
+ Do(). |
|
| 42 |
+ Into(result) |
|
| 43 |
+ return |
|
| 44 |
+} |
|
| 45 |
+ |
|
| 46 |
+// Get returns information about a particular group or an error |
|
| 47 |
+func (c *groups) Get(name string) (result *userapi.Group, err error) {
|
|
| 48 |
+ result = &userapi.Group{}
|
|
| 49 |
+ err = c.r.Get().Resource("groups").Name(name).Do().Into(result)
|
|
| 50 |
+ return |
|
| 51 |
+} |
|
| 52 |
+ |
|
| 53 |
+// Create creates a new group. Returns the server's representation of the group and error if one occurs. |
|
| 54 |
+func (c *groups) Create(group *userapi.Group) (result *userapi.Group, err error) {
|
|
| 55 |
+ result = &userapi.Group{}
|
|
| 56 |
+ err = c.r.Post().Resource("groups").Body(group).Do().Into(result)
|
|
| 57 |
+ return |
|
| 58 |
+} |
|
| 59 |
+ |
|
| 60 |
+// Update updates the group on server. Returns the server's representation of the group and error if one occurs. |
|
| 61 |
+func (c *groups) Update(group *userapi.Group) (result *userapi.Group, err error) {
|
|
| 62 |
+ result = &userapi.Group{}
|
|
| 63 |
+ err = c.r.Put().Resource("groups").Name(group.Name).Body(group).Do().Into(result)
|
|
| 64 |
+ return |
|
| 65 |
+} |
|
| 66 |
+ |
|
| 67 |
+// Delete takes the name of the groups, and returns an error if one occurs during deletion of the groups |
|
| 68 |
+func (c *groups) Delete(name string) error {
|
|
| 69 |
+ return c.r.Delete().Resource("groups").Name(name).Do().Error()
|
|
| 70 |
+} |
| ... | ... |
@@ -139,6 +139,11 @@ func (c *Fake) UserIdentityMappings() client.UserIdentityMappingInterface {
|
| 139 | 139 |
return &FakeUserIdentityMappings{Fake: c}
|
| 140 | 140 |
} |
| 141 | 141 |
|
| 142 |
+// Groups provides a fake REST client for Groups |
|
| 143 |
+func (c *Fake) Groups() client.GroupInterface {
|
|
| 144 |
+ return &FakeGroups{Fake: c}
|
|
| 145 |
+} |
|
| 146 |
+ |
|
| 142 | 147 |
// Projects provides a fake REST client for Projects |
| 143 | 148 |
func (c *Fake) Projects() client.ProjectInterface {
|
| 144 | 149 |
return &FakeProjects{Fake: c}
|
| 145 | 150 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,41 @@ |
| 0 |
+package testclient |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 4 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 5 |
+ userapi "github.com/openshift/origin/pkg/user/api" |
|
| 6 |
+) |
|
| 7 |
+ |
|
| 8 |
+// FakeGroups implements GroupsInterface. Meant to be embedded into a struct to get a default |
|
| 9 |
+// implementation. This makes faking out just the methods you want to test easier. |
|
| 10 |
+type FakeGroups struct {
|
|
| 11 |
+ Fake *Fake |
|
| 12 |
+} |
|
| 13 |
+ |
|
| 14 |
+func (c *FakeGroups) List(label labels.Selector, field fields.Selector) (*userapi.GroupList, error) {
|
|
| 15 |
+ obj, err := c.Fake.Invokes(FakeAction{Action: "list-groups"}, &userapi.GroupList{})
|
|
| 16 |
+ return obj.(*userapi.GroupList), err |
|
| 17 |
+} |
|
| 18 |
+ |
|
| 19 |
+func (c *FakeGroups) Get(name string) (*userapi.Group, error) {
|
|
| 20 |
+ obj, err := c.Fake.Invokes(FakeAction{Action: "get-group", Value: name}, &userapi.Group{})
|
|
| 21 |
+ return obj.(*userapi.Group), err |
|
| 22 |
+} |
|
| 23 |
+ |
|
| 24 |
+func (c *FakeGroups) Create(group *userapi.Group) (*userapi.Group, error) {
|
|
| 25 |
+ obj, err := c.Fake.Invokes(FakeAction{Action: "create-group", Value: group}, &userapi.Group{})
|
|
| 26 |
+ return obj.(*userapi.Group), err |
|
| 27 |
+} |
|
| 28 |
+ |
|
| 29 |
+func (c *FakeGroups) Update(group *userapi.Group) (*userapi.Group, error) {
|
|
| 30 |
+ obj, err := c.Fake.Invokes(FakeAction{Action: "update-group", Value: group}, &userapi.Group{})
|
|
| 31 |
+ return obj.(*userapi.Group), err |
|
| 32 |
+} |
|
| 33 |
+ |
|
| 34 |
+func (c *FakeGroups) Delete(name string) error {
|
|
| 35 |
+ c.Fake.Lock.Lock() |
|
| 36 |
+ defer c.Fake.Lock.Unlock() |
|
| 37 |
+ |
|
| 38 |
+ c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-group"})
|
|
| 39 |
+ return nil |
|
| 40 |
+} |
| ... | ... |
@@ -54,6 +54,7 @@ func describerMap(c *client.Client, kclient kclient.Interface, host string) map[ |
| 54 | 54 |
"ClusterRoleBinding": &ClusterRoleBindingDescriber{c},
|
| 55 | 55 |
"ClusterRole": &ClusterRoleDescriber{c},
|
| 56 | 56 |
"User": &UserDescriber{c},
|
| 57 |
+ "Group": &GroupDescriber{c.Groups()},
|
|
| 57 | 58 |
"UserIdentityMapping": &UserIdentityMappingDescriber{c},
|
| 58 | 59 |
} |
| 59 | 60 |
return m |
| ... | ... |
@@ -878,6 +879,36 @@ func (d *UserDescriber) Describe(namespace, name string) (string, error) {
|
| 878 | 878 |
}) |
| 879 | 879 |
} |
| 880 | 880 |
|
| 881 |
+// GroupDescriber generates information about a group |
|
| 882 |
+type GroupDescriber struct {
|
|
| 883 |
+ c client.GroupInterface |
|
| 884 |
+} |
|
| 885 |
+ |
|
| 886 |
+// Describe returns the description of a group |
|
| 887 |
+func (d *GroupDescriber) Describe(namespace, name string) (string, error) {
|
|
| 888 |
+ group, err := d.c.Get(name) |
|
| 889 |
+ if err != nil {
|
|
| 890 |
+ return "", err |
|
| 891 |
+ } |
|
| 892 |
+ |
|
| 893 |
+ return tabbedString(func(out *tabwriter.Writer) error {
|
|
| 894 |
+ formatMeta(out, group.ObjectMeta) |
|
| 895 |
+ |
|
| 896 |
+ if len(group.Users) == 0 {
|
|
| 897 |
+ formatString(out, "Users", "<none>") |
|
| 898 |
+ } else {
|
|
| 899 |
+ for i, user := range group.Users {
|
|
| 900 |
+ if i == 0 {
|
|
| 901 |
+ formatString(out, "Users", user) |
|
| 902 |
+ } else {
|
|
| 903 |
+ fmt.Fprintf(out, " \t%s\n", user) |
|
| 904 |
+ } |
|
| 905 |
+ } |
|
| 906 |
+ } |
|
| 907 |
+ return nil |
|
| 908 |
+ }) |
|
| 909 |
+} |
|
| 910 |
+ |
|
| 881 | 911 |
// policy describers |
| 882 | 912 |
|
| 883 | 913 |
// PolicyDescriber generates information about a Project |
| ... | ... |
@@ -50,6 +50,7 @@ var ( |
| 50 | 50 |
userColumns = []string{"NAME", "UID", "FULL NAME", "IDENTITIES"}
|
| 51 | 51 |
identityColumns = []string{"NAME", "IDP NAME", "IDP USER NAME", "USER NAME", "USER UID"}
|
| 52 | 52 |
userIdentityMappingColumns = []string{"NAME", "IDENTITY", "USER NAME", "USER UID"}
|
| 53 |
+ groupColumns = []string{"NAME", "USERS"}
|
|
| 53 | 54 |
|
| 54 | 55 |
// IsPersonalSubjectAccessReviewColumns contains known custom role extensions |
| 55 | 56 |
IsPersonalSubjectAccessReviewColumns = []string{"NAME"}
|
| ... | ... |
@@ -113,6 +114,8 @@ func NewHumanReadablePrinter(noHeaders, withNamespace, wide bool, columnLabels [ |
| 113 | 113 |
p.Handler(identityColumns, printIdentity) |
| 114 | 114 |
p.Handler(identityColumns, printIdentityList) |
| 115 | 115 |
p.Handler(userIdentityMappingColumns, printUserIdentityMapping) |
| 116 |
+ p.Handler(groupColumns, printGroup) |
|
| 117 |
+ p.Handler(groupColumns, printGroupList) |
|
| 116 | 118 |
|
| 117 | 119 |
p.Handler(IsPersonalSubjectAccessReviewColumns, printIsPersonalSubjectAccessReview) |
| 118 | 120 |
|
| ... | ... |
@@ -549,6 +552,19 @@ func printUserIdentityMapping(mapping *userapi.UserIdentityMapping, w io.Writer, |
| 549 | 549 |
return err |
| 550 | 550 |
} |
| 551 | 551 |
|
| 552 |
+func printGroup(group *userapi.Group, w io.Writer, withNamespace, wide bool, columnLabels []string) error {
|
|
| 553 |
+ _, err := fmt.Fprintf(w, "%s\t%s\n", group.Name, strings.Join(group.Users, ", ")) |
|
| 554 |
+ return err |
|
| 555 |
+} |
|
| 556 |
+func printGroupList(list *userapi.GroupList, w io.Writer, withNamespace, wide bool, columnLabels []string) error {
|
|
| 557 |
+ for _, item := range list.Items {
|
|
| 558 |
+ if err := printGroup(&item, w, withNamespace, wide, columnLabels); err != nil {
|
|
| 559 |
+ return err |
|
| 560 |
+ } |
|
| 561 |
+ } |
|
| 562 |
+ return nil |
|
| 563 |
+} |
|
| 564 |
+ |
|
| 552 | 565 |
func printHostSubnet(h *sdnapi.HostSubnet, w io.Writer, withNamespace, wide bool, columnLabels []string) error {
|
| 553 | 566 |
_, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", h.Name, h.Host, h.HostIP, h.Subnet) |
| 554 | 567 |
return err |
| ... | ... |
@@ -59,6 +59,7 @@ import ( |
| 59 | 59 |
"github.com/openshift/origin/pkg/service" |
| 60 | 60 |
templateregistry "github.com/openshift/origin/pkg/template/registry" |
| 61 | 61 |
templateetcd "github.com/openshift/origin/pkg/template/registry/etcd" |
| 62 |
+ groupetcd "github.com/openshift/origin/pkg/user/registry/group/etcd" |
|
| 62 | 63 |
identityregistry "github.com/openshift/origin/pkg/user/registry/identity" |
| 63 | 64 |
identityetcd "github.com/openshift/origin/pkg/user/registry/identity/etcd" |
| 64 | 65 |
userregistry "github.com/openshift/origin/pkg/user/registry/user" |
| ... | ... |
@@ -427,6 +428,7 @@ func (c *MasterConfig) GetRestStorage() map[string]rest.Storage {
|
| 427 | 427 |
"clusterNetworks": clusterNetworkStorage, |
| 428 | 428 |
|
| 429 | 429 |
"users": userStorage, |
| 430 |
+ "groups": groupetcd.NewREST(c.EtcdHelper), |
|
| 430 | 431 |
"identities": identityStorage, |
| 431 | 432 |
"userIdentityMappings": userIdentityMappingStorage, |
| 432 | 433 |
|
| ... | ... |
@@ -53,6 +53,22 @@ type UserIdentityMapping struct {
|
| 53 | 53 |
User kapi.ObjectReference |
| 54 | 54 |
} |
| 55 | 55 |
|
| 56 |
+// Group represents a referenceable set of Users |
|
| 57 |
+type Group struct {
|
|
| 58 |
+ kapi.TypeMeta |
|
| 59 |
+ kapi.ObjectMeta |
|
| 60 |
+ |
|
| 61 |
+ Users []string |
|
| 62 |
+} |
|
| 63 |
+ |
|
| 64 |
+type GroupList struct {
|
|
| 65 |
+ kapi.TypeMeta |
|
| 66 |
+ kapi.ListMeta |
|
| 67 |
+ Items []Group |
|
| 68 |
+} |
|
| 69 |
+ |
|
| 70 |
+func (*GroupList) IsAnAPIObject() {}
|
|
| 71 |
+func (*Group) IsAnAPIObject() {}
|
|
| 56 | 72 |
func (*User) IsAnAPIObject() {}
|
| 57 | 73 |
func (*UserList) IsAnAPIObject() {}
|
| 58 | 74 |
func (*Identity) IsAnAPIObject() {}
|
| ... | ... |
@@ -53,6 +53,23 @@ type UserIdentityMapping struct {
|
| 53 | 53 |
User kapi.ObjectReference `json:"user,omitempty" description:"reference to a user"` |
| 54 | 54 |
} |
| 55 | 55 |
|
| 56 |
+// Group represents a referenceable set of Users |
|
| 57 |
+type Group struct {
|
|
| 58 |
+ kapi.TypeMeta `json:",inline"` |
|
| 59 |
+ kapi.ObjectMeta `json:"metadata,omitempty"` |
|
| 60 |
+ |
|
| 61 |
+ // Users is the list of users in this group. |
|
| 62 |
+ Users []string `json:"users" description:"list of users in this group"` |
|
| 63 |
+} |
|
| 64 |
+ |
|
| 65 |
+type GroupList struct {
|
|
| 66 |
+ kapi.TypeMeta `json:",inline"` |
|
| 67 |
+ kapi.ListMeta `json:"metadata,omitempty"` |
|
| 68 |
+ Items []Group `json:"items" description:"list of groups"` |
|
| 69 |
+} |
|
| 70 |
+ |
|
| 71 |
+func (*GroupList) IsAnAPIObject() {}
|
|
| 72 |
+func (*Group) IsAnAPIObject() {}
|
|
| 56 | 73 |
func (*User) IsAnAPIObject() {}
|
| 57 | 74 |
func (*UserList) IsAnAPIObject() {}
|
| 58 | 75 |
func (*Identity) IsAnAPIObject() {}
|
| ... | ... |
@@ -53,6 +53,23 @@ type UserIdentityMapping struct {
|
| 53 | 53 |
User kapi.ObjectReference `json:"user,omitempty"` |
| 54 | 54 |
} |
| 55 | 55 |
|
| 56 |
+// Group represents a referenceable set of Users |
|
| 57 |
+type Group struct {
|
|
| 58 |
+ kapi.TypeMeta `json:",inline"` |
|
| 59 |
+ kapi.ObjectMeta `json:"metadata,omitempty"` |
|
| 60 |
+ |
|
| 61 |
+ // Users is the list of users in this group. |
|
| 62 |
+ Users []string `json:"users" description:"list of users in this group"` |
|
| 63 |
+} |
|
| 64 |
+ |
|
| 65 |
+type GroupList struct {
|
|
| 66 |
+ kapi.TypeMeta `json:",inline"` |
|
| 67 |
+ kapi.ListMeta `json:"metadata,omitempty"` |
|
| 68 |
+ Items []Group `json:"items" description:"list of groups"` |
|
| 69 |
+} |
|
| 70 |
+ |
|
| 71 |
+func (*GroupList) IsAnAPIObject() {}
|
|
| 72 |
+func (*Group) IsAnAPIObject() {}
|
|
| 56 | 73 |
func (*User) IsAnAPIObject() {}
|
| 57 | 74 |
func (*UserList) IsAnAPIObject() {}
|
| 58 | 75 |
func (*Identity) IsAnAPIObject() {}
|
| ... | ... |
@@ -73,6 +73,30 @@ func ValidateIdentityProviderUserName(name string) (bool, string) {
|
| 73 | 73 |
return ValidateUserName(name, false) |
| 74 | 74 |
} |
| 75 | 75 |
|
| 76 |
+func ValidateGroup(group *api.Group) fielderrors.ValidationErrorList {
|
|
| 77 |
+ allErrs := fielderrors.ValidationErrorList{}
|
|
| 78 |
+ allErrs = append(allErrs, kvalidation.ValidateObjectMeta(&group.ObjectMeta, false, ValidateGroupName).Prefix("metadata")...)
|
|
| 79 |
+ |
|
| 80 |
+ for index, user := range group.Users {
|
|
| 81 |
+ if len(user) == 0 {
|
|
| 82 |
+ allErrs = append(allErrs, fielderrors.NewFieldInvalid(fmt.Sprintf("users[%d]", index), user, "may not be empty"))
|
|
| 83 |
+ continue |
|
| 84 |
+ } |
|
| 85 |
+ if ok, msg := ValidateUserName(user, false); !ok {
|
|
| 86 |
+ allErrs = append(allErrs, fielderrors.NewFieldInvalid(fmt.Sprintf("users[%d]", index), user, msg))
|
|
| 87 |
+ } |
|
| 88 |
+ } |
|
| 89 |
+ |
|
| 90 |
+ return allErrs |
|
| 91 |
+} |
|
| 92 |
+ |
|
| 93 |
+func ValidateGroupUpdate(group *api.Group, old *api.Group) fielderrors.ValidationErrorList {
|
|
| 94 |
+ allErrs := fielderrors.ValidationErrorList{}
|
|
| 95 |
+ allErrs = append(allErrs, kvalidation.ValidateObjectMetaUpdate(&group.ObjectMeta, &old.ObjectMeta).Prefix("metadata")...)
|
|
| 96 |
+ allErrs = append(allErrs, ValidateGroup(group)...) |
|
| 97 |
+ return allErrs |
|
| 98 |
+} |
|
| 99 |
+ |
|
| 76 | 100 |
func ValidateUser(user *api.User) fielderrors.ValidationErrorList {
|
| 77 | 101 |
allErrs := fielderrors.ValidationErrorList{}
|
| 78 | 102 |
allErrs = append(allErrs, kvalidation.ValidateObjectMeta(&user.ObjectMeta, false, ValidateUserName).Prefix("metadata")...)
|
| ... | ... |
@@ -7,6 +7,75 @@ import ( |
| 7 | 7 |
"github.com/openshift/origin/pkg/user/api" |
| 8 | 8 |
) |
| 9 | 9 |
|
| 10 |
+func TestValidateGroup(t *testing.T) {
|
|
| 11 |
+ validObj := func() *api.Group {
|
|
| 12 |
+ return &api.Group{
|
|
| 13 |
+ ObjectMeta: kapi.ObjectMeta{
|
|
| 14 |
+ Name: "myname", |
|
| 15 |
+ }, |
|
| 16 |
+ Users: []string{"myuser"},
|
|
| 17 |
+ } |
|
| 18 |
+ } |
|
| 19 |
+ |
|
| 20 |
+ if errs := ValidateGroup(validObj()); len(errs) > 0 {
|
|
| 21 |
+ t.Errorf("Expected no errors, got %v", errs)
|
|
| 22 |
+ } |
|
| 23 |
+ |
|
| 24 |
+ emptyUser := validObj() |
|
| 25 |
+ emptyUser.Users = []string{""}
|
|
| 26 |
+ if errs := ValidateGroup(emptyUser); len(errs) == 0 {
|
|
| 27 |
+ t.Errorf("Expected error, got none")
|
|
| 28 |
+ } |
|
| 29 |
+ |
|
| 30 |
+ invalidUser := validObj() |
|
| 31 |
+ invalidUser.Users = []string{"bad:user:name"}
|
|
| 32 |
+ if errs := ValidateGroup(invalidUser); len(errs) == 0 {
|
|
| 33 |
+ t.Errorf("Expected error, got none")
|
|
| 34 |
+ } |
|
| 35 |
+ |
|
| 36 |
+ invalidName := validObj() |
|
| 37 |
+ invalidName.Name = "bad:group:name" |
|
| 38 |
+ if errs := ValidateGroup(invalidName); len(errs) == 0 {
|
|
| 39 |
+ t.Errorf("Expected error, got none")
|
|
| 40 |
+ } |
|
| 41 |
+} |
|
| 42 |
+ |
|
| 43 |
+func TestValidateGroupUpdate(t *testing.T) {
|
|
| 44 |
+ validObj := func() *api.Group {
|
|
| 45 |
+ return &api.Group{
|
|
| 46 |
+ ObjectMeta: kapi.ObjectMeta{
|
|
| 47 |
+ Name: "myname", |
|
| 48 |
+ ResourceVersion: "1", |
|
| 49 |
+ }, |
|
| 50 |
+ Users: []string{"myuser"},
|
|
| 51 |
+ } |
|
| 52 |
+ } |
|
| 53 |
+ |
|
| 54 |
+ oldObj := validObj() |
|
| 55 |
+ |
|
| 56 |
+ if errs := ValidateGroupUpdate(validObj(), oldObj); len(errs) > 0 {
|
|
| 57 |
+ t.Errorf("Expected no errors, got %v", errs)
|
|
| 58 |
+ } |
|
| 59 |
+ |
|
| 60 |
+ emptyUser := validObj() |
|
| 61 |
+ emptyUser.Users = []string{""}
|
|
| 62 |
+ if errs := ValidateGroupUpdate(emptyUser, oldObj); len(errs) == 0 {
|
|
| 63 |
+ t.Errorf("Expected error, got none")
|
|
| 64 |
+ } |
|
| 65 |
+ |
|
| 66 |
+ invalidUser := validObj() |
|
| 67 |
+ invalidUser.Users = []string{"bad:user:name"}
|
|
| 68 |
+ if errs := ValidateGroupUpdate(invalidUser, oldObj); len(errs) == 0 {
|
|
| 69 |
+ t.Errorf("Expected error, got none")
|
|
| 70 |
+ } |
|
| 71 |
+ |
|
| 72 |
+ invalidName := validObj() |
|
| 73 |
+ invalidName.Name = "bad:group:name" |
|
| 74 |
+ if errs := ValidateGroupUpdate(invalidName, oldObj); len(errs) == 0 {
|
|
| 75 |
+ t.Errorf("Expected error, got none")
|
|
| 76 |
+ } |
|
| 77 |
+} |
|
| 78 |
+ |
|
| 10 | 79 |
func TestValidateUser(t *testing.T) {
|
| 11 | 80 |
validObj := func() *api.User {
|
| 12 | 81 |
return &api.User{
|
| 13 | 82 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,50 @@ |
| 0 |
+package etcd |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 4 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 5 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 6 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic" |
|
| 7 |
+ etcdgeneric "github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic/etcd" |
|
| 8 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" |
|
| 9 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/tools" |
|
| 10 |
+ |
|
| 11 |
+ "github.com/openshift/origin/pkg/user/api" |
|
| 12 |
+ "github.com/openshift/origin/pkg/user/registry/group" |
|
| 13 |
+ "github.com/openshift/origin/pkg/util" |
|
| 14 |
+) |
|
| 15 |
+ |
|
| 16 |
+const EtcdPrefix = "/groups" |
|
| 17 |
+ |
|
| 18 |
+// REST implements a RESTStorage for groups against etcd |
|
| 19 |
+type REST struct {
|
|
| 20 |
+ *etcdgeneric.Etcd |
|
| 21 |
+} |
|
| 22 |
+ |
|
| 23 |
+// NewREST returns a RESTStorage object that will work against groups |
|
| 24 |
+func NewREST(h tools.EtcdHelper) *REST {
|
|
| 25 |
+ store := &etcdgeneric.Etcd{
|
|
| 26 |
+ NewFunc: func() runtime.Object { return &api.Group{} },
|
|
| 27 |
+ NewListFunc: func() runtime.Object { return &api.GroupList{} },
|
|
| 28 |
+ KeyRootFunc: func(ctx kapi.Context) string {
|
|
| 29 |
+ return EtcdPrefix |
|
| 30 |
+ }, |
|
| 31 |
+ KeyFunc: func(ctx kapi.Context, name string) (string, error) {
|
|
| 32 |
+ return util.NoNamespaceKeyFunc(ctx, EtcdPrefix, name) |
|
| 33 |
+ }, |
|
| 34 |
+ ObjectNameFunc: func(obj runtime.Object) (string, error) {
|
|
| 35 |
+ return obj.(*api.Group).Name, nil |
|
| 36 |
+ }, |
|
| 37 |
+ PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher {
|
|
| 38 |
+ return group.MatchGroup(label, field) |
|
| 39 |
+ }, |
|
| 40 |
+ EndpointName: "groups", |
|
| 41 |
+ |
|
| 42 |
+ CreateStrategy: group.Strategy, |
|
| 43 |
+ UpdateStrategy: group.Strategy, |
|
| 44 |
+ |
|
| 45 |
+ Helper: h, |
|
| 46 |
+ } |
|
| 47 |
+ |
|
| 48 |
+ return &REST{store}
|
|
| 49 |
+} |
| 0 | 50 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,77 @@ |
| 0 |
+package group |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 4 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest" |
|
| 5 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 6 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 7 |
+ |
|
| 8 |
+ "github.com/openshift/origin/pkg/user/api" |
|
| 9 |
+) |
|
| 10 |
+ |
|
| 11 |
+// Registry is an interface implemented by things that know how to store Group objects. |
|
| 12 |
+type Registry interface {
|
|
| 13 |
+ // ListGroups obtains a list of groups having labels which match selector. |
|
| 14 |
+ ListGroups(ctx kapi.Context, selector labels.Selector) (*api.GroupList, error) |
|
| 15 |
+ // GetGroup returns a specific group |
|
| 16 |
+ GetGroup(ctx kapi.Context, name string) (*api.Group, error) |
|
| 17 |
+ // CreateGroup creates a group |
|
| 18 |
+ CreateGroup(ctx kapi.Context, group *api.Group) (*api.Group, error) |
|
| 19 |
+ // UpdateGroup updates an existing group |
|
| 20 |
+ UpdateGroup(ctx kapi.Context, group *api.Group) (*api.Group, error) |
|
| 21 |
+ // DeleteGroup deletes a name. |
|
| 22 |
+ DeleteGroup(ctx kapi.Context, name string) error |
|
| 23 |
+} |
|
| 24 |
+ |
|
| 25 |
+// Storage is an interface for a standard REST Storage backend |
|
| 26 |
+type Storage interface {
|
|
| 27 |
+ rest.StandardStorage |
|
| 28 |
+} |
|
| 29 |
+ |
|
| 30 |
+// storage puts strong typing around storage calls |
|
| 31 |
+type storage struct {
|
|
| 32 |
+ Storage |
|
| 33 |
+} |
|
| 34 |
+ |
|
| 35 |
+// NewRegistry returns a new Registry interface for the given Storage. Any mismatched |
|
| 36 |
+// types will panic. |
|
| 37 |
+func NewRegistry(s Storage) Registry {
|
|
| 38 |
+ return &storage{s}
|
|
| 39 |
+} |
|
| 40 |
+ |
|
| 41 |
+func (s *storage) ListGroups(ctx kapi.Context, label labels.Selector) (*api.GroupList, error) {
|
|
| 42 |
+ obj, err := s.List(ctx, label, fields.Everything()) |
|
| 43 |
+ if err != nil {
|
|
| 44 |
+ return nil, err |
|
| 45 |
+ } |
|
| 46 |
+ return obj.(*api.GroupList), nil |
|
| 47 |
+} |
|
| 48 |
+ |
|
| 49 |
+func (s *storage) GetGroup(ctx kapi.Context, name string) (*api.Group, error) {
|
|
| 50 |
+ obj, err := s.Get(ctx, name) |
|
| 51 |
+ if err != nil {
|
|
| 52 |
+ return nil, err |
|
| 53 |
+ } |
|
| 54 |
+ return obj.(*api.Group), nil |
|
| 55 |
+} |
|
| 56 |
+ |
|
| 57 |
+func (s *storage) CreateGroup(ctx kapi.Context, group *api.Group) (*api.Group, error) {
|
|
| 58 |
+ obj, err := s.Create(ctx, group) |
|
| 59 |
+ if err != nil {
|
|
| 60 |
+ return nil, err |
|
| 61 |
+ } |
|
| 62 |
+ return obj.(*api.Group), nil |
|
| 63 |
+} |
|
| 64 |
+ |
|
| 65 |
+func (s *storage) UpdateGroup(ctx kapi.Context, group *api.Group) (*api.Group, error) {
|
|
| 66 |
+ obj, _, err := s.Update(ctx, group) |
|
| 67 |
+ if err != nil {
|
|
| 68 |
+ return nil, err |
|
| 69 |
+ } |
|
| 70 |
+ return obj.(*api.Group), nil |
|
| 71 |
+} |
|
| 72 |
+ |
|
| 73 |
+func (s *storage) DeleteGroup(ctx kapi.Context, name string) error {
|
|
| 74 |
+ _, err := s.Delete(ctx, name, nil) |
|
| 75 |
+ return err |
|
| 76 |
+} |
| 0 | 77 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,76 @@ |
| 0 |
+package group |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "fmt" |
|
| 4 |
+ |
|
| 5 |
+ kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 6 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 7 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 8 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic" |
|
| 9 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" |
|
| 10 |
+ "github.com/GoogleCloudPlatform/kubernetes/pkg/util/fielderrors" |
|
| 11 |
+ |
|
| 12 |
+ "github.com/openshift/origin/pkg/user/api" |
|
| 13 |
+ "github.com/openshift/origin/pkg/user/api/validation" |
|
| 14 |
+) |
|
| 15 |
+ |
|
| 16 |
+// groupStrategy implements behavior for Groups |
|
| 17 |
+type groupStrategy struct {
|
|
| 18 |
+ runtime.ObjectTyper |
|
| 19 |
+} |
|
| 20 |
+ |
|
| 21 |
+// Strategy is the default logic that applies when creating and updating Group |
|
| 22 |
+// objects via the REST API. |
|
| 23 |
+var Strategy = groupStrategy{kapi.Scheme}
|
|
| 24 |
+ |
|
| 25 |
+func (groupStrategy) PrepareForUpdate(obj, old runtime.Object) {}
|
|
| 26 |
+ |
|
| 27 |
+// NamespaceScoped is false for groups |
|
| 28 |
+func (groupStrategy) NamespaceScoped() bool {
|
|
| 29 |
+ return false |
|
| 30 |
+} |
|
| 31 |
+ |
|
| 32 |
+func (groupStrategy) GenerateName(base string) string {
|
|
| 33 |
+ return base |
|
| 34 |
+} |
|
| 35 |
+ |
|
| 36 |
+func (groupStrategy) PrepareForCreate(obj runtime.Object) {
|
|
| 37 |
+} |
|
| 38 |
+ |
|
| 39 |
+// Validate validates a new group |
|
| 40 |
+func (groupStrategy) Validate(ctx kapi.Context, obj runtime.Object) fielderrors.ValidationErrorList {
|
|
| 41 |
+ return validation.ValidateGroup(obj.(*api.Group)) |
|
| 42 |
+} |
|
| 43 |
+ |
|
| 44 |
+// AllowCreateOnUpdate is false for groups |
|
| 45 |
+func (groupStrategy) AllowCreateOnUpdate() bool {
|
|
| 46 |
+ return false |
|
| 47 |
+} |
|
| 48 |
+ |
|
| 49 |
+func (groupStrategy) AllowUnconditionalUpdate() bool {
|
|
| 50 |
+ return false |
|
| 51 |
+} |
|
| 52 |
+ |
|
| 53 |
+// ValidateUpdate is the default update validation for an end group. |
|
| 54 |
+func (groupStrategy) ValidateUpdate(ctx kapi.Context, obj, old runtime.Object) fielderrors.ValidationErrorList {
|
|
| 55 |
+ return validation.ValidateGroupUpdate(obj.(*api.Group), old.(*api.Group)) |
|
| 56 |
+} |
|
| 57 |
+ |
|
| 58 |
+// MatchGroup returns a generic matcher for a given label and field selector. |
|
| 59 |
+func MatchGroup(label labels.Selector, field fields.Selector) generic.Matcher {
|
|
| 60 |
+ return generic.MatcherFunc(func(obj runtime.Object) (bool, error) {
|
|
| 61 |
+ groupObj, ok := obj.(*api.Group) |
|
| 62 |
+ if !ok {
|
|
| 63 |
+ return false, fmt.Errorf("not a group")
|
|
| 64 |
+ } |
|
| 65 |
+ fields := GroupToSelectableFields(groupObj) |
|
| 66 |
+ return label.Matches(labels.Set(groupObj.Labels)) && field.Matches(fields), nil |
|
| 67 |
+ }) |
|
| 68 |
+} |
|
| 69 |
+ |
|
| 70 |
+// GroupToSelectableFields returns a label set that represents the object |
|
| 71 |
+func GroupToSelectableFields(group *api.Group) labels.Set {
|
|
| 72 |
+ return labels.Set{
|
|
| 73 |
+ "name": group.Name, |
|
| 74 |
+ } |
|
| 75 |
+} |
| ... | ... |
@@ -602,6 +602,7 @@ _oc_get() |
| 602 | 602 |
must_have_one_noun+=("deploymentconfig")
|
| 603 | 603 |
must_have_one_noun+=("endpoints")
|
| 604 | 604 |
must_have_one_noun+=("event")
|
| 605 |
+ must_have_one_noun+=("group")
|
|
| 605 | 606 |
must_have_one_noun+=("hostsubnet")
|
| 606 | 607 |
must_have_one_noun+=("identity")
|
| 607 | 608 |
must_have_one_noun+=("image")
|
| ... | ... |
@@ -662,6 +663,7 @@ _oc_describe() |
| 662 | 662 |
must_have_one_noun+=("clusterrole")
|
| 663 | 663 |
must_have_one_noun+=("clusterrolebinding")
|
| 664 | 664 |
must_have_one_noun+=("deploymentconfig")
|
| 665 |
+ must_have_one_noun+=("group")
|
|
| 665 | 666 |
must_have_one_noun+=("identity")
|
| 666 | 667 |
must_have_one_noun+=("image")
|
| 667 | 668 |
must_have_one_noun+=("imagestream")
|
| ... | ... |
@@ -2020,6 +2020,7 @@ _openshift_cli_get() |
| 2020 | 2020 |
must_have_one_noun+=("deploymentconfig")
|
| 2021 | 2021 |
must_have_one_noun+=("endpoints")
|
| 2022 | 2022 |
must_have_one_noun+=("event")
|
| 2023 |
+ must_have_one_noun+=("group")
|
|
| 2023 | 2024 |
must_have_one_noun+=("hostsubnet")
|
| 2024 | 2025 |
must_have_one_noun+=("identity")
|
| 2025 | 2026 |
must_have_one_noun+=("image")
|
| ... | ... |
@@ -2080,6 +2081,7 @@ _openshift_cli_describe() |
| 2080 | 2080 |
must_have_one_noun+=("clusterrole")
|
| 2081 | 2081 |
must_have_one_noun+=("clusterrolebinding")
|
| 2082 | 2082 |
must_have_one_noun+=("deploymentconfig")
|
| 2083 |
+ must_have_one_noun+=("group")
|
|
| 2083 | 2084 |
must_have_one_noun+=("identity")
|
| 2084 | 2085 |
must_have_one_noun+=("image")
|
| 2085 | 2086 |
must_have_one_noun+=("imagestream")
|