Skip to content

Commit f0c3b55

Browse files
authored
refactor: Change the CLI layout for swarm (#191)
1 parent b399efc commit f0c3b55

File tree

10 files changed

+1040
-1494
lines changed

10 files changed

+1040
-1494
lines changed

.makim.yaml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -347,20 +347,20 @@ groups:
347347
348348
# Test stack commands
349349
echo $'\033[32mTesting stack deployment...\033[0m'
350-
sugar ${{ vars.SUGAR_FLAGS }} swarm deploy --stack test-stack
350+
sugar ${{ vars.SUGAR_FLAGS }} swarm:stack deploy --stack test-stack
351351
352352
# List services (with and without stack filter)
353353
echo $'\033[32mTesting service listing...\033[0m'
354354
sugar ${{ vars.SUGAR_FLAGS }} swarm ls
355-
sugar ${{ vars.SUGAR_FLAGS }} swarm ls --stack test-stack
355+
sugar ${{ vars.SUGAR_FLAGS }} swarm:stack ls --stack test-stack
356356
357357
# Test stack ps command
358358
echo $'\033[32mTesting stack ps command...\033[0m'
359-
sugar ${{ vars.SUGAR_FLAGS }} swarm ps --stack test-stack
359+
sugar ${{ vars.SUGAR_FLAGS }} swarm:stack ps --stack test-stack
360360
361361
# Test service inspection
362362
echo $'\033[32mTesting service inspection...\033[0m'
363-
sugar ${{ vars.SUGAR_FLAGS }} swarm inspect --service service1-1 --stack test-stack
363+
sugar ${{ vars.SUGAR_FLAGS }} swarm:stack inspect --service service1-1 --stack test-stack
364364
365365
# Test service1-1 , service1-2 and service1-3 service three times ping
366366
for port in 18000 18001 18002; do
@@ -372,13 +372,13 @@ groups:
372372
373373
# Test service logs (limited command to avoid test hanging)
374374
echo $'\033[32mTesting service logs...\033[0m'
375-
sugar ${{ vars.SUGAR_FLAGS }} swarm logs --services service1-1 --stack test-stack --tail 10
376-
sugar ${{ vars.SUGAR_FLAGS }} swarm logs --services service1-2 --stack test-stack --tail 10
375+
sugar ${{ vars.SUGAR_FLAGS }} swarm:service logs --services service1-1 --stack test-stack --tail 10
376+
sugar ${{ vars.SUGAR_FLAGS }} swarm:service logs --services service1-2 --stack test-stack --tail 10
377377
378378
379379
# Test service scaling
380380
echo $'\033[32mTesting service scaling...\033[0m'
381-
sugar ${{ vars.SUGAR_FLAGS }} swarm scale --stack test-stack --replicas service1-1=2,service1-2=3
381+
sugar ${{ vars.SUGAR_FLAGS }} swarm:service scale --stack test-stack --replicas service1-1=2,service1-2=3
382382
383383
# TODO : sugar swarm update is yet to be implemented and experimental stage
384384
# Test service update
@@ -387,11 +387,11 @@ groups:
387387
388388
# Test service rollback
389389
echo $'\033[32mTesting service rollback specific services in a stack...\033[0m'
390-
sugar ${{ vars.SUGAR_FLAGS }} swarm rollback --services service1-1,service1-3 --stack test-stack
390+
sugar ${{ vars.SUGAR_FLAGS }} swarm:service rollback --services service1-1,service1-3 test-stack
391391
392392
# Test rollback with stack parameter
393393
echo $'\033[32mTesting stack rollback all services in a stack...\033[0m'
394-
sugar ${{ vars.SUGAR_FLAGS }} swarm rollback --stack test-stack --all
394+
sugar ${{ vars.SUGAR_FLAGS }} swarm:service rollback test-stack --all
395395
396396
# Test swarm service subcommand
397397
echo $'\033[32mTesting swarm service commands...\033[0m'
@@ -406,11 +406,11 @@ groups:
406406
407407
# Test node commands
408408
echo $'\033[32mTesting node commands...\033[0m'
409-
sugar swarm node --ls
409+
sugar swarm:node ls
410410
NODE_ID=$(docker node ls --format "{{.ID}}" )
411411
echo $'\033[32mNode ID: $NODE_ID\033[0m'
412-
sugar swarm node --inspect $NODE_ID
413-
sugar swarm node --ps $NODE_ID
412+
sugar swarm:node inspect $NODE_ID
413+
sugar swarm:node ps $NODE_ID
414414
415415
416416
# Leave swarm

docs/swarm.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -70,45 +70,45 @@ $ sugar swarm join --options "--token SWMTKN-1-... 192.168.1.1:2377"
7070
Deploy a stack from a sugar compose file:
7171

7272
```bash
73-
$ sugar swarm deploy --stack my_stack --file ./.sugar-prod.yml
73+
$ sugar swarm:stack deploy my_stack --file ./.sugar-prod.yml
7474
```
7575

7676
or
7777

7878
if `.sugar.yml` file is present in the your current project root directory
7979

8080
```bash
81-
$ sugar swarm deploy --stack my_stack
81+
$ sugar swarm:stack deploy my_stack
8282
```
8383

8484
You can also use a `profile2` compose file:
8585

8686
```bash
87-
$ sugar swarm deploy --stack my_stack --profile profile2
87+
$ sugar swarm:stack deploy my_stack --profile profile2
8888
```
8989

9090
### List Services in a Stack
9191

9292
List services in a specific stack:
9393

9494
```bash
95-
$ sugar swarm ls --stack my_stack
95+
$ sugar swarm:stack ls my_stack
9696
```
9797

9898
### List Tasks in a Stack
9999

100100
List the tasks in a stack:
101101

102102
```bash
103-
$ sugar swarm ps --stack my_stack
103+
$ sugar swarm:stack ps my_stack
104104
```
105105

106106
### Remove a Stack
107107

108108
Remove a deployed stack:
109109

110110
```bash
111-
$ sugar swarm rm --stack my_stack
111+
$ sugar swarm:stack rm my_stack
112112
```
113113

114114
## Service Management
@@ -124,37 +124,37 @@ $ sugar swarm ls
124124
List all services in a specific stack in the swarm
125125

126126
```bash
127-
$ sugar swarm ls --stack my_stack
127+
$ sugar swarm:stack ls my_stack
128128
```
129129

130130
### Inspect Services
131131

132132
Get detailed information about a service:
133133

134134
```bash
135-
$ sugar swarm inspect --service service1-1 --stack my_stack
135+
$ sugar swarm:service inspect --service service1-1 --stack my_stack
136136
```
137137

138138
### View Service Logs
139139

140140
View logs for a specific service:
141141

142142
```bash
143-
$ sugar swarm logs --services service1-1 --stack my_stack
143+
$ sugar swarm:service logs --services service1-1 --stack my_stack
144144
```
145145

146146
With additional options:
147147

148148
```bash
149-
$ sugar swarm logs --services myservice --stack my_stack --follow --tail 100
149+
$ sugar swarm:service logs --services myservice --stack my_stack --follow --tail 100
150150
```
151151

152152
### Scale Services
153153

154154
Scale services within a stack:
155155

156156
```bash
157-
$ sugar swarm scale --stack my_stack --replicas service1=3,service2=5
157+
$ sugar swarm:service scale --stack my_stack --replicas service1=3,service2=5
158158
```
159159

160160
### Update Services (Currently in experemental stage)
@@ -324,47 +324,47 @@ Sugar provides a complete set of commands to manage swarm nodes through the
324324
### List Nodes
325325

326326
```bash
327-
$ sugar swarm node ls
327+
$ sugar swarm:node ls
328328
```
329329

330330
### Inspect Nodes
331331

332332
```bash
333-
$ sugar swarm node --inspect node-id1,node-id2
333+
$ sugar swarm:node inspect node-id1,node-id2
334334
```
335335

336336
### Promote Nodes
337337

338338
Promote a worker node to manager:
339339

340340
```bash
341-
$ sugar swarm node --promote node-id
341+
$ sugar swarm:node promote node-id
342342
```
343343

344344
### Demote Nodes
345345

346346
Demote a manager node to worker:
347347

348348
```bash
349-
$ sugar swarm node --demote node-id
349+
$ sugar swarm:node demote node-id
350350
```
351351

352352
### List Tasks on a Node
353353

354354
```bash
355-
$ sugar swarm node --ps node-id
355+
$ sugar swarm:node ps node-id
356356
```
357357

358358
### Remove Nodes
359359

360360
```bash
361-
$ sugar swarm node --rm node-id
361+
$ sugar swarm:node rm node-id
362362
```
363363

364364
### Update Nodes
365365

366366
```bash
367-
$ sugar swarm node --update node-id --options "--availability drain"
367+
$ sugar swarm:node update node-id --options "--availability drain"
368368
```
369369

370370
## Command Options
@@ -394,19 +394,19 @@ Leverage Sugar profiles to manage different Swarm configurations:
394394
Production Profile:
395395

396396
```bash
397-
$ sugar --profile production swarm deploy --stack my_stack
397+
$ sugar --profile production swarm:stack deploy my_stack
398398
```
399399

400400
Development Profile:
401401

402402
```bash
403-
$ sugar --profile dev swarm deploy --stack my_stack
403+
$ sugar --profile dev swarm:stack deploy my_stack
404404
```
405405

406406
Testing Profile:
407407

408408
```bash
409-
$ sugar --profile test swarm deploy --stack my_stack
409+
$ sugar --profile test swarm:stack deploy my_stack
410410
```
411411

412412
This allows you to maintain different configurations for different environments

src/sugar/core.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
from sugar.extensions.compose import SugarCompose
99
from sugar.extensions.compose_ext import SugarComposeExt
1010
from sugar.extensions.podman_ext import SugarPodmanComposeExt
11-
from sugar.extensions.swarm import SugarSwarm
11+
from sugar.extensions.swarm import (
12+
SugarSwarm,
13+
SugarSwarmNode,
14+
SugarSwarmService,
15+
SugarSwarmStack,
16+
)
1217
from sugar.extensions.tui import SugarTUI
1318

1419
try:
@@ -23,6 +28,9 @@
2328
'compose-ext': SugarComposeExt,
2429
'podman-ext': SugarPodmanComposeExt,
2530
'swarm': SugarSwarm,
31+
'swarm:stack': SugarSwarmStack,
32+
'swarm:service': SugarSwarmService,
33+
'swarm:node': SugarSwarmNode,
2634
'tui': SugarTUI,
2735
**{'stats': SugarStats for i in range(1) if SugarStats is not None},
2836
}

src/sugar/extensions/base.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,21 @@ def _call_backend_app(
119119
self,
120120
action: str,
121121
services: list[str] = [],
122+
nodes: list[str] = [],
122123
options_args: list[str] = [],
123124
cmd_args: list[str] = [],
124125
_out: Union[io.TextIOWrapper, io.StringIO, Any] = sys.stdout,
125126
_err: Union[io.TextIOWrapper, io.StringIO, Any] = sys.stderr,
126127
) -> None:
128+
# validation
129+
if services and nodes:
130+
SugarLogs.raise_error(
131+
'Give services or nodes arguments, not both.',
132+
SugarError.SUGAR_INVALID_PARAMETER,
133+
)
134+
135+
nodes_or_services = services or nodes
136+
127137
# Execute pre-run hooks
128138
extension = camel_to_snake(
129139
self.__class__.__name__.replace('Sugar', '')
@@ -144,7 +154,7 @@ def _call_backend_app(
144154
*self.backend_args,
145155
*[action],
146156
*options_args,
147-
*services,
157+
*nodes_or_services,
148158
*cmd_args,
149159
]
150160

src/sugar/extensions/podman_ext.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ def _call_backend_app(
142142
self,
143143
action: str,
144144
services: list[str] = [],
145+
nodes: list[str] = [],
145146
options_args: list[str] = [],
146147
cmd_args: list[str] = [],
147148
_out: Union[io.TextIOWrapper, io.StringIO, Any] = sys.stdout,
@@ -154,6 +155,13 @@ def _call_backend_app(
154155
instead of using the --env-file flag that's
155156
not supported by podman compose.
156157
"""
158+
# validation
159+
if nodes:
160+
SugarLogs.raise_error(
161+
'The argument `nodes` is not supported yet '
162+
'by the podman plugin.',
163+
SugarError.SUGAR_INVALID_PARAMETER,
164+
)
157165
# Execute pre-run hooks
158166
extension = camel_to_snake(
159167
self.__class__.__name__.replace('Sugar', '')

0 commit comments

Comments
 (0)