Skip to content

Commit c49c798

Browse files
feat(k8s): add support for deleting a node (#2426)
Co-authored-by: Rémy Léone <[email protected]>
1 parent 4b31b4a commit c49c798

File tree

5 files changed

+95
-4
lines changed

5 files changed

+95
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲
2+
🟥🟥🟥 STDERR️️ 🟥🟥🟥️
3+
This method allows to delete a specific node. Note that when there is not enough space to reschedule all the pods (in a one node cluster for instance), you may experience some disruption of your applications.
4+
5+
USAGE:
6+
scw k8s node delete [arg=value ...]
7+
8+
EXAMPLES:
9+
Delete a given node
10+
scw k8s node delete 11111111-1111-1111-111111111111
11+
12+
ARGS:
13+
node-id
14+
[region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw)
15+
16+
FLAGS:
17+
-h, --help help for delete
18+
19+
GLOBAL FLAGS:
20+
-c, --config string The path to the config file
21+
-D, --debug Enable debug mode
22+
-o, --output string Output format: json or human, see 'scw help output' for more info (default "human")
23+
-p, --profile string The config profile to use

cmd/scw/testdata/test-all-usage-k8s-node-list-usage.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ ARGS:
2020
[pool-id] The pool ID on which to filter the returned nodes
2121
[order-by] The sort order of the returned nodes (created_at_asc | created_at_desc)
2222
[name] The name on which to filter the returned nodes
23-
[status] The status on which to filter the returned nodes (unknown | creating | not_ready | ready | deleting | deleted | locked | rebooting | creation_error | upgrading)
23+
[status] The status on which to filter the returned nodes (unknown | creating | not_ready | ready | deleting | deleted | locked | rebooting | creation_error | upgrading | starting)
2424
[region=fr-par] Region to target. If none is passed will use default region from the config (fr-par | nl-ams | pl-waw)
2525

2626
FLAGS:

cmd/scw/testdata/test-all-usage-k8s-node-usage.golden

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ USAGE:
88
scw k8s node <command>
99

1010
AVAILABLE COMMANDS:
11+
delete Delete a node in a cluster
1112
get Get a node in a cluster
1213
list List all the nodes in a cluster
1314
reboot Reboot a node in a cluster

docs/commands/k8s.md

+32-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Kapsule API
1717
- [Install a kubeconfig](#install-a-kubeconfig)
1818
- [Uninstall a kubeconfig](#uninstall-a-kubeconfig)
1919
- [Kapsule node management commands](#kapsule-node-management-commands)
20+
- [Delete a node in a cluster](#delete-a-node-in-a-cluster)
2021
- [Get a node in a cluster](#get-a-node-in-a-cluster)
2122
- [List all the nodes in a cluster](#list-all-the-nodes-in-a-cluster)
2223
- [Reboot a node in a cluster](#reboot-a-node-in-a-cluster)
@@ -528,6 +529,36 @@ Please note that Kubernetes nodes cannot be accessed with ssh.
528529

529530

530531

532+
### Delete a node in a cluster
533+
534+
This method allows to delete a specific node. Note that when there is not enough space to reschedule all the pods (in a one node cluster for instance), you may experience some disruption of your applications.
535+
536+
**Usage:**
537+
538+
```
539+
scw k8s node delete [arg=value ...]
540+
```
541+
542+
543+
**Args:**
544+
545+
| Name | | Description |
546+
|------|---|-------------|
547+
| node-id | Required | |
548+
| region | Default: `fr-par`<br />One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config |
549+
550+
551+
**Examples:**
552+
553+
554+
Delete a given node
555+
```
556+
scw k8s node delete 11111111-1111-1111-111111111111
557+
```
558+
559+
560+
561+
531562
### Get a node in a cluster
532563

533564
This method allows to get details about a specific Kubernetes node.
@@ -577,7 +608,7 @@ scw k8s node list [arg=value ...]
577608
| pool-id | | The pool ID on which to filter the returned nodes |
578609
| order-by | One of: `created_at_asc`, `created_at_desc` | The sort order of the returned nodes |
579610
| name | | The name on which to filter the returned nodes |
580-
| status | One of: `unknown`, `creating`, `not_ready`, `ready`, `deleting`, `deleted`, `locked`, `rebooting`, `creation_error`, `upgrading` | The status on which to filter the returned nodes |
611+
| status | One of: `unknown`, `creating`, `not_ready`, `ready`, `deleting`, `deleted`, `locked`, `rebooting`, `creation_error`, `upgrading`, `starting` | The status on which to filter the returned nodes |
581612
| region | Default: `fr-par`<br />One of: `fr-par`, `nl-ams`, `pl-waw` | Region to target. If none is passed will use default region from the config |
582613

583614

internal/namespaces/k8s/v1/k8s_cli.go

+38-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func GetGeneratedCommands() *core.Commands {
4242
k8sNodeGet(),
4343
k8sNodeReplace(),
4444
k8sNodeReboot(),
45+
k8sNodeDelete(),
4546
k8sVersionList(),
4647
k8sVersionGet(),
4748
)
@@ -1620,7 +1621,7 @@ func k8sNodeList() *core.Command {
16201621
Required: false,
16211622
Deprecated: false,
16221623
Positional: false,
1623-
EnumValues: []string{"unknown", "creating", "not_ready", "ready", "deleting", "deleted", "locked", "rebooting", "creation_error", "upgrading"},
1624+
EnumValues: []string{"unknown", "creating", "not_ready", "ready", "deleting", "deleted", "locked", "rebooting", "creation_error", "upgrading", "starting"},
16241625
},
16251626
core.RegionArgSpec(scw.RegionFrPar, scw.RegionNlAms, scw.RegionPlWaw),
16261627
},
@@ -1728,7 +1729,7 @@ func k8sNodeReplace() *core.Command {
17281729
Namespace: "k8s",
17291730
Resource: "node",
17301731
Verb: "replace",
1731-
// Deprecated: false,
1732+
// Deprecated: true,
17321733
ArgsType: reflect.TypeOf(k8s.ReplaceNodeRequest{}),
17331734
ArgSpecs: core.ArgSpecs{
17341735
{
@@ -1793,6 +1794,41 @@ func k8sNodeReboot() *core.Command {
17931794
}
17941795
}
17951796

1797+
func k8sNodeDelete() *core.Command {
1798+
return &core.Command{
1799+
Short: `Delete a node in a cluster`,
1800+
Long: `This method allows to delete a specific node. Note that when there is not enough space to reschedule all the pods (in a one node cluster for instance), you may experience some disruption of your applications.`,
1801+
Namespace: "k8s",
1802+
Resource: "node",
1803+
Verb: "delete",
1804+
// Deprecated: false,
1805+
ArgsType: reflect.TypeOf(k8s.DeleteNodeRequest{}),
1806+
ArgSpecs: core.ArgSpecs{
1807+
{
1808+
Name: "node-id",
1809+
Required: true,
1810+
Deprecated: false,
1811+
Positional: false,
1812+
},
1813+
core.RegionArgSpec(scw.RegionFrPar, scw.RegionNlAms, scw.RegionPlWaw),
1814+
},
1815+
Run: func(ctx context.Context, args interface{}) (i interface{}, e error) {
1816+
request := args.(*k8s.DeleteNodeRequest)
1817+
1818+
client := core.ExtractClient(ctx)
1819+
api := k8s.NewAPI(client)
1820+
return api.DeleteNode(request)
1821+
1822+
},
1823+
Examples: []*core.Example{
1824+
{
1825+
Short: "Delete a given node",
1826+
Raw: `scw k8s node delete 11111111-1111-1111-111111111111`,
1827+
},
1828+
},
1829+
}
1830+
}
1831+
17961832
func k8sVersionList() *core.Command {
17971833
return &core.Command{
17981834
Short: `List all available versions`,

0 commit comments

Comments
 (0)