Browse code

Use singular tag names in swagger.yaml

This is required to make the type generation put things in the
correct directory, but unfortunately makes the names in the
documentation menu look a bit crap.

I think the best solution would be to add a `x-display-name`
extension to tags to determine how the tags show up in the menu,
rather than it depend on the name of the tag. I shall do this in
a follow-up PR - for now, let's fix the breakage.

Fixes #29045

Signed-off-by: Ben Firshman <ben@firshman.co.uk>

Ben Firshman authored on 2016/12/02 23:14:36
Showing 1 changed files
... ...
@@ -90,21 +90,21 @@ info:
90 90
 
91 91
 # The tags on paths define the menu sections in the ReDoc documentation, so
92 92
 # the usage of tags must make sense for that:
93
-# - They should be plural, not singular.
93
+# - They should be singular, not plural.
94 94
 # - There should not be too many tags, or the menu becomes unwieldly. For
95 95
 #   example, it is preferable to add a path to the "System" tag instead of
96 96
 #   creating a tag with a single path in it.
97 97
 # - The order of tags in this list defines the order in the menu.
98 98
 tags:
99 99
   # Primary objects
100
-  - name: "Containers"
100
+  - name: "Container"
101 101
     description: |
102 102
       Create and manage containers.
103
-  - name: "Images"
104
-  - name: "Networks"
103
+  - name: "Image"
104
+  - name: "Network"
105 105
     description: |
106 106
       Networks are user-defined networks that containers can be attached to. See the [networking documentation](https://docs.docker.com/engine/userguide/networking/) for more information.
107
-  - name: "Volumes"
107
+  - name: "Volume"
108 108
     description: |
109 109
       Create and manage persistent storage that can be attached to containers.
110 110
   - name: "Exec"
... ...
@@ -112,22 +112,22 @@ tags:
112 112
       Run new commands inside running containers. See the [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) for more information.
113 113
 
114 114
       To exec a command in a container, you first need to create an exec instance, then start it. These two API endpoints are wrapped up in a single command-line command, `docker exec`.
115
-  - name: "Secrets"
115
+  - name: "Secret"
116 116
   # Swarm things
117 117
   - name: "Swarm"
118 118
     description: |
119 119
       Engines can be clustered together in a swarm. See [the swarm mode documentation](https://docs.docker.com/engine/swarm/) for more information.
120
-  - name: "Nodes"
120
+  - name: "Node"
121 121
     description: |
122 122
       Nodes are instances of the Engine participating in a swarm. Swarm mode must be enabled for these endpoints to work.
123
-  - name: "Services"
123
+  - name: "Service"
124 124
     description: |
125 125
       Services are the definitions of tasks to run on a swarm. Swarm mode must be enabled for these endpoints to work.
126
-  - name: "Tasks"
126
+  - name: "Task"
127 127
     description: |
128 128
       A task is a container running on a swarm. It is the atomic scheduling unit of swarm. Swarm mode must be enabled for these endpoints to work.
129 129
   # System things
130
-  - name: "Plugins"
130
+  - name: "Plugin"
131 131
   - name: "System"
132 132
 
133 133
 definitions:
... ...
@@ -2619,7 +2619,7 @@ paths:
2619 2619
           description: "server error"
2620 2620
           schema:
2621 2621
             $ref: "#/definitions/ErrorResponse"
2622
-      tags: ["Containers"]
2622
+      tags: ["Container"]
2623 2623
   /containers/create:
2624 2624
     post:
2625 2625
       summary: "Create a container"
... ...
@@ -2818,7 +2818,7 @@ paths:
2818 2818
           description: "server error"
2819 2819
           schema:
2820 2820
             $ref: "#/definitions/ErrorResponse"
2821
-      tags: ["Containers"]
2821
+      tags: ["Container"]
2822 2822
   /containers/{id}/json:
2823 2823
     get:
2824 2824
       summary: "Inspect a container"
... ...
@@ -3094,7 +3094,7 @@ paths:
3094 3094
           type: "boolean"
3095 3095
           default: false
3096 3096
           description: "Return the size of container as fields `SizeRw` and `SizeRootFs`"
3097
-      tags: ["Containers"]
3097
+      tags: ["Container"]
3098 3098
   /containers/{id}/top:
3099 3099
     get:
3100 3100
       summary: "List processes running inside a container"
... ...
@@ -3170,7 +3170,7 @@ paths:
3170 3170
           description: "The arguments to pass to `ps`. For example, `aux`"
3171 3171
           type: "string"
3172 3172
           default: "-ef"
3173
-      tags: ["Containers"]
3173
+      tags: ["Container"]
3174 3174
   /containers/{id}/logs:
3175 3175
     get:
3176 3176
       summary: "Get container logs"
... ...
@@ -3239,7 +3239,7 @@ paths:
3239 3239
           description: "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines."
3240 3240
           type: "string"
3241 3241
           default: "all"
3242
-      tags: ["Containers"]
3242
+      tags: ["Container"]
3243 3243
   /containers/{id}/changes:
3244 3244
     get:
3245 3245
       summary: "Get changes on a container’s filesystem"
... ...
@@ -3295,7 +3295,7 @@ paths:
3295 3295
           required: true
3296 3296
           description: "ID or name of the container"
3297 3297
           type: "string"
3298
-      tags: ["Containers"]
3298
+      tags: ["Container"]
3299 3299
   /containers/{id}/export:
3300 3300
     get:
3301 3301
       summary: "Export a container"
... ...
@@ -3323,7 +3323,7 @@ paths:
3323 3323
           required: true
3324 3324
           description: "ID or name of the container"
3325 3325
           type: "string"
3326
-      tags: ["Containers"]
3326
+      tags: ["Container"]
3327 3327
   /containers/{id}/stats:
3328 3328
     get:
3329 3329
       summary: "Get container stats based on resource usage"
... ...
@@ -3451,7 +3451,7 @@ paths:
3451 3451
           description: "Stream the output. If false, the stats will be output once and then it will disconnect."
3452 3452
           type: "boolean"
3453 3453
           default: true
3454
-      tags: ["Containers"]
3454
+      tags: ["Container"]
3455 3455
   /containers/{id}/resize:
3456 3456
     post:
3457 3457
       summary: "Resize a container TTY"
... ...
@@ -3489,7 +3489,7 @@ paths:
3489 3489
           in: "query"
3490 3490
           description: "Width of the tty session in characters"
3491 3491
           type: "integer"
3492
-      tags: ["Containers"]
3492
+      tags: ["Container"]
3493 3493
   /containers/{id}/start:
3494 3494
     post:
3495 3495
       summary: "Start a container"
... ...
@@ -3522,7 +3522,7 @@ paths:
3522 3522
           in: "query"
3523 3523
           description: "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`."
3524 3524
           type: "string"
3525
-      tags: ["Containers"]
3525
+      tags: ["Container"]
3526 3526
   /containers/{id}/stop:
3527 3527
     post:
3528 3528
       summary: "Stop a container"
... ...
@@ -3555,7 +3555,7 @@ paths:
3555 3555
           in: "query"
3556 3556
           description: "Number of seconds to wait before killing the container"
3557 3557
           type: "integer"
3558
-      tags: ["Containers"]
3558
+      tags: ["Container"]
3559 3559
   /containers/{id}/restart:
3560 3560
     post:
3561 3561
       summary: "Restart a container"
... ...
@@ -3584,7 +3584,7 @@ paths:
3584 3584
           in: "query"
3585 3585
           description: "Number of seconds to wait before killing the container"
3586 3586
           type: "integer"
3587
-      tags: ["Containers"]
3587
+      tags: ["Container"]
3588 3588
   /containers/{id}/kill:
3589 3589
     post:
3590 3590
       summary: "Kill a container"
... ...
@@ -3615,7 +3615,7 @@ paths:
3615 3615
           description: "Signal to send to the container as an integer or string (e.g. `SIGINT`)"
3616 3616
           type: "string"
3617 3617
           default: "SIGKILL"
3618
-      tags: ["Containers"]
3618
+      tags: ["Container"]
3619 3619
   /containers/{id}/update:
3620 3620
     post:
3621 3621
       summary: "Update a container"
... ...
@@ -3676,7 +3676,7 @@ paths:
3676 3676
               RestartPolicy:
3677 3677
                 MaximumRetryCount: 4
3678 3678
                 Name: "on-failure"
3679
-      tags: ["Containers"]
3679
+      tags: ["Container"]
3680 3680
   /containers/{id}/rename:
3681 3681
     post:
3682 3682
       summary: "Rename a container"
... ...
@@ -3710,7 +3710,7 @@ paths:
3710 3710
           required: true
3711 3711
           description: "New name for the container"
3712 3712
           type: "string"
3713
-      tags: ["Containers"]
3713
+      tags: ["Container"]
3714 3714
   /containers/{id}/pause:
3715 3715
     post:
3716 3716
       summary: "Pause a container"
... ...
@@ -3739,7 +3739,7 @@ paths:
3739 3739
           required: true
3740 3740
           description: "ID or name of the container"
3741 3741
           type: "string"
3742
-      tags: ["Containers"]
3742
+      tags: ["Container"]
3743 3743
   /containers/{id}/unpause:
3744 3744
     post:
3745 3745
       summary: "Unpause a container"
... ...
@@ -3765,7 +3765,7 @@ paths:
3765 3765
           required: true
3766 3766
           description: "ID or name of the container"
3767 3767
           type: "string"
3768
-      tags: ["Containers"]
3768
+      tags: ["Container"]
3769 3769
   /containers/{id}/attach:
3770 3770
     post:
3771 3771
       summary: "Attach to a container"
... ...
@@ -3909,7 +3909,7 @@ paths:
3909 3909
           description: "Attach to `stderr`"
3910 3910
           type: "boolean"
3911 3911
           default: false
3912
-      tags: ["Containers"]
3912
+      tags: ["Container"]
3913 3913
   /containers/{id}/attach/ws:
3914 3914
     get:
3915 3915
       summary: "Attach to a container via a websocket"
... ...
@@ -3969,7 +3969,7 @@ paths:
3969 3969
           description: "Attach to `stderr`"
3970 3970
           type: "boolean"
3971 3971
           default: false
3972
-      tags: ["Containers"]
3972
+      tags: ["Container"]
3973 3973
   /containers/{id}/wait:
3974 3974
     post:
3975 3975
       summary: "Wait for a container"
... ...
@@ -4004,7 +4004,7 @@ paths:
4004 4004
           required: true
4005 4005
           description: "ID or name of the container"
4006 4006
           type: "string"
4007
-      tags: ["Containers"]
4007
+      tags: ["Container"]
4008 4008
   /containers/{id}:
4009 4009
     delete:
4010 4010
       summary: "Remove a container"
... ...
@@ -4043,7 +4043,7 @@ paths:
4043 4043
           description: "If the container is running, kill it before removing it."
4044 4044
           type: "boolean"
4045 4045
           default: false
4046
-      tags: ["Containers"]
4046
+      tags: ["Container"]
4047 4047
   /containers/{id}/archive:
4048 4048
     head:
4049 4049
       summary: "Get information about files in a container"
... ...
@@ -4089,7 +4089,7 @@ paths:
4089 4089
           required: true
4090 4090
           description: "Resource in the container’s filesystem to archive."
4091 4091
           type: "string"
4092
-      tags: ["Containers"]
4092
+      tags: ["Container"]
4093 4093
     get:
4094 4094
       summary: "Get an archive of a filesystem resource in a container"
4095 4095
       description: "Get an tar archive of a resource in the filesystem of container id."
... ...
@@ -4132,7 +4132,7 @@ paths:
4132 4132
           required: true
4133 4133
           description: "Resource in the container’s filesystem to archive."
4134 4134
           type: "string"
4135
-      tags: ["Containers"]
4135
+      tags: ["Container"]
4136 4136
     put:
4137 4137
       summary: "Extract an archive of files or folders to a directory in a container"
4138 4138
       description: "Upload a tar archive to be extracted to a path in the filesystem of container id."
... ...
@@ -4183,7 +4183,7 @@ paths:
4183 4183
           description: "The input stream must be a tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz."
4184 4184
           schema:
4185 4185
             type: "string"
4186
-      tags: ["Containers"]
4186
+      tags: ["Container"]
4187 4187
   /containers/prune:
4188 4188
     post:
4189 4189
       summary: "Delete stopped containers"
... ...
@@ -4211,7 +4211,7 @@ paths:
4211 4211
           description: "Server error"
4212 4212
           schema:
4213 4213
             $ref: "#/definitions/ErrorResponse"
4214
-      tags: ["Containers"]
4214
+      tags: ["Container"]
4215 4215
   /images/json:
4216 4216
     get:
4217 4217
       summary: "List Images"
... ...
@@ -4282,7 +4282,7 @@ paths:
4282 4282
           description: "Show digest information as a `RepoDigests` field on each image."
4283 4283
           type: "boolean"
4284 4284
           default: false
4285
-      tags: ["Images"]
4285
+      tags: ["Image"]
4286 4286
   /build:
4287 4287
     post:
4288 4288
       summary: "Build an image"
... ...
@@ -4429,7 +4429,7 @@ paths:
4429 4429
           description: "server error"
4430 4430
           schema:
4431 4431
             $ref: "#/definitions/ErrorResponse"
4432
-      tags: ["Images"]
4432
+      tags: ["Image"]
4433 4433
   /images/create:
4434 4434
     post:
4435 4435
       summary: "Create an image"
... ...
@@ -4474,7 +4474,7 @@ paths:
4474 4474
           in: "header"
4475 4475
           description: "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)"
4476 4476
           type: "string"
4477
-      tags: ["Images"]
4477
+      tags: ["Image"]
4478 4478
   /images/{name}/json:
4479 4479
     get:
4480 4480
       summary: "Inspect an image"
... ...
@@ -4580,7 +4580,7 @@ paths:
4580 4580
           description: "Image name or id"
4581 4581
           type: "string"
4582 4582
           required: true
4583
-      tags: ["Images"]
4583
+      tags: ["Image"]
4584 4584
   /images/{name}/history:
4585 4585
     get:
4586 4586
       summary: "Get the history of an image"
... ...
@@ -4650,7 +4650,7 @@ paths:
4650 4650
           description: "Image name or ID"
4651 4651
           type: "string"
4652 4652
           required: true
4653
-      tags: ["Images"]
4653
+      tags: ["Image"]
4654 4654
   /images/{name}/push:
4655 4655
     post:
4656 4656
       summary: "Push an image"
... ...
@@ -4689,7 +4689,7 @@ paths:
4689 4689
           description: "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)"
4690 4690
           type: "string"
4691 4691
           required: true
4692
-      tags: ["Images"]
4692
+      tags: ["Image"]
4693 4693
   /images/{name}/tag:
4694 4694
     post:
4695 4695
       summary: "Tag an image"
... ...
@@ -4728,7 +4728,7 @@ paths:
4728 4728
           in: "query"
4729 4729
           description: "The name of the new tag."
4730 4730
           type: "string"
4731
-      tags: ["Images"]
4731
+      tags: ["Image"]
4732 4732
   /images/{name}:
4733 4733
     delete:
4734 4734
       summary: "Remove an image"
... ...
@@ -4779,7 +4779,7 @@ paths:
4779 4779
           description: "Do not delete untagged parent images"
4780 4780
           type: "boolean"
4781 4781
           default: false
4782
-      tags: ["Images"]
4782
+      tags: ["Image"]
4783 4783
   /images/search:
4784 4784
     get:
4785 4785
       summary: "Search images"
... ...
@@ -4845,7 +4845,7 @@ paths:
4845 4845
             - `is-automated=(true|false)`
4846 4846
             - `is-official=(true|false)`
4847 4847
           type: "string"
4848
-      tags: ["Images"]
4848
+      tags: ["Image"]
4849 4849
   /images/prune:
4850 4850
     post:
4851 4851
       summary: "Delete unused images"
... ...
@@ -4883,7 +4883,7 @@ paths:
4883 4883
           description: "Server error"
4884 4884
           schema:
4885 4885
             $ref: "#/definitions/ErrorResponse"
4886
-      tags: ["Images"]
4886
+      tags: ["Image"]
4887 4887
   /auth:
4888 4888
     post:
4889 4889
       summary: "Check auth configuration"
... ...
@@ -5262,7 +5262,7 @@ paths:
5262 5262
           in: "query"
5263 5263
           description: "`Dockerfile` instructions to apply while committing"
5264 5264
           type: "string"
5265
-      tags: ["Images"]
5265
+      tags: ["Image"]
5266 5266
   /events:
5267 5267
     get:
5268 5268
       summary: "Monitor events"
... ...
@@ -5488,7 +5488,7 @@ paths:
5488 5488
           description: "Image name or ID"
5489 5489
           type: "string"
5490 5490
           required: true
5491
-      tags: ["Images"]
5491
+      tags: ["Image"]
5492 5492
   /images/get:
5493 5493
     get:
5494 5494
       summary: "Export several images"
... ...
@@ -5518,7 +5518,7 @@ paths:
5518 5518
           type: "array"
5519 5519
           items:
5520 5520
             type: "string"
5521
-      tags: ["Images"]
5521
+      tags: ["Image"]
5522 5522
   /images/load:
5523 5523
     post:
5524 5524
       summary: "Import images"
... ...
@@ -5550,7 +5550,7 @@ paths:
5550 5550
           description: "Suppress progress details during load."
5551 5551
           type: "boolean"
5552 5552
           default: false
5553
-      tags: ["Images"]
5553
+      tags: ["Image"]
5554 5554
   /containers/{id}/exec:
5555 5555
     post:
5556 5556
       summary: "Create an exec instance"
... ...
@@ -5833,7 +5833,7 @@ paths:
5833 5833
               driver name.
5834 5834
           type: "string"
5835 5835
           format: "json"
5836
-      tags: ["Volumes"]
5836
+      tags: ["Volume"]
5837 5837
 
5838 5838
   /volumes/create:
5839 5839
     post:
... ...
@@ -5883,7 +5883,7 @@ paths:
5883 5883
                 com.example.some-label: "some-value"
5884 5884
                 com.example.some-other-label: "some-other-value"
5885 5885
               Driver: "custom"
5886
-      tags: ["Volumes"]
5886
+      tags: ["Volume"]
5887 5887
 
5888 5888
   /volumes/{name}:
5889 5889
     get:
... ...
@@ -5909,7 +5909,7 @@ paths:
5909 5909
           required: true
5910 5910
           description: "Volume name or ID"
5911 5911
           type: "string"
5912
-      tags: ["Volumes"]
5912
+      tags: ["Volume"]
5913 5913
 
5914 5914
     delete:
5915 5915
       summary: "Remove a volume"
... ...
@@ -5941,7 +5941,7 @@ paths:
5941 5941
           description: "Force the removal of the volume"
5942 5942
           type: "boolean"
5943 5943
           default: false
5944
-      tags: ["Volumes"]
5944
+      tags: ["Volume"]
5945 5945
   /volumes/prune:
5946 5946
     post:
5947 5947
       summary: "Delete unused volumes"
... ...
@@ -5969,7 +5969,7 @@ paths:
5969 5969
           description: "Server error"
5970 5970
           schema:
5971 5971
             $ref: "#/definitions/ErrorResponse"
5972
-      tags: ["Volumes"]
5972
+      tags: ["Volume"]
5973 5973
   /networks:
5974 5974
     get:
5975 5975
       summary: "List networks"
... ...
@@ -6050,7 +6050,7 @@ paths:
6050 6050
             - `name=<network-name>` Matches all or part of a network name.
6051 6051
             - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks.
6052 6052
           type: "string"
6053
-      tags: ["Networks"]
6053
+      tags: ["Network"]
6054 6054
 
6055 6055
   /networks/{id}:
6056 6056
     get:
... ...
@@ -6073,7 +6073,7 @@ paths:
6073 6073
           description: "Network ID or name"
6074 6074
           required: true
6075 6075
           type: "string"
6076
-      tags: ["Networks"]
6076
+      tags: ["Network"]
6077 6077
 
6078 6078
     delete:
6079 6079
       summary: "Remove a network"
... ...
@@ -6095,7 +6095,7 @@ paths:
6095 6095
           description: "Network ID or name"
6096 6096
           required: true
6097 6097
           type: "string"
6098
-      tags: ["Networks"]
6098
+      tags: ["Network"]
6099 6099
 
6100 6100
   /networks/create:
6101 6101
     post:
... ...
@@ -6191,7 +6191,7 @@ paths:
6191 6191
               Labels:
6192 6192
                 com.example.some-label: "some-value"
6193 6193
                 com.example.some-other-label: "some-other-value"
6194
-      tags: ["Networks"]
6194
+      tags: ["Network"]
6195 6195
 
6196 6196
   /networks/{id}/connect:
6197 6197
     post:
... ...
@@ -6237,7 +6237,7 @@ paths:
6237 6237
                 IPAMConfig:
6238 6238
                   IPv4Address: "172.24.56.89"
6239 6239
                   IPv6Address: "2001:db8::5689"
6240
-      tags: ["Networks"]
6240
+      tags: ["Network"]
6241 6241
 
6242 6242
   /networks/{id}/disconnect:
6243 6243
     post:
... ...
@@ -6278,7 +6278,7 @@ paths:
6278 6278
               Force:
6279 6279
                 type: "boolean"
6280 6280
                 description: "Force the container to disconnect from the network."
6281
-      tags: ["Networks"]
6281
+      tags: ["Network"]
6282 6282
   /networks/prune:
6283 6283
     post:
6284 6284
       summary: "Delete unused networks"
... ...
@@ -6302,7 +6302,7 @@ paths:
6302 6302
           description: "Server error"
6303 6303
           schema:
6304 6304
             $ref: "#/definitions/ErrorResponse"
6305
-      tags: ["Networks"]
6305
+      tags: ["Network"]
6306 6306
   /plugins:
6307 6307
     get:
6308 6308
       summary: "List plugins"
... ...
@@ -6395,7 +6395,7 @@ paths:
6395 6395
           description: "Server error"
6396 6396
           schema:
6397 6397
             $ref: "#/definitions/ErrorResponse"
6398
-      tags: ["Plugins"]
6398
+      tags: ["Plugin"]
6399 6399
 
6400 6400
   /plugins/pull:
6401 6401
     post:
... ...
@@ -6452,7 +6452,7 @@ paths:
6452 6452
           in: "header"
6453 6453
           description: "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)"
6454 6454
           type: "string"
6455
-      tags: ["Plugins"]
6455
+      tags: ["Plugin"]
6456 6456
   /plugins/{name}:
6457 6457
     get:
6458 6458
       summary: "Inspect a plugin"
... ...
@@ -6476,7 +6476,7 @@ paths:
6476 6476
           description: "The name of the plugin. The `:latest` tag is optional, and is the default if omitted."
6477 6477
           required: true
6478 6478
           type: "string"
6479
-      tags: ["Plugins"]
6479
+      tags: ["Plugin"]
6480 6480
     delete:
6481 6481
       summary: "Remove a plugin"
6482 6482
       operationId: "PluginDelete"
... ...
@@ -6504,7 +6504,7 @@ paths:
6504 6504
           description: "Disable the plugin before removing. This may result in issues if the plugin is in use by a container."
6505 6505
           type: "boolean"
6506 6506
           default: false
6507
-      tags: ["Plugins"]
6507
+      tags: ["Plugin"]
6508 6508
   /plugins/{name}/enable:
6509 6509
     post:
6510 6510
       summary: "Enable a plugin"
... ...
@@ -6527,7 +6527,7 @@ paths:
6527 6527
           description: "Set the HTTP client timeout (in seconds)"
6528 6528
           type: "integer"
6529 6529
           default: 0
6530
-      tags: ["Plugins"]
6530
+      tags: ["Plugin"]
6531 6531
   /plugins/{name}/disable:
6532 6532
     post:
6533 6533
       summary: "Disable a plugin"
... ...
@@ -6545,7 +6545,7 @@ paths:
6545 6545
           description: "The name of the plugin. The `:latest` tag is optional, and is the default if omitted."
6546 6546
           required: true
6547 6547
           type: "string"
6548
-      tags: ["Plugins"]
6548
+      tags: ["Plugin"]
6549 6549
   /plugins/create:
6550 6550
     post:
6551 6551
       summary: "Create a plugin"
... ...
@@ -6571,7 +6571,7 @@ paths:
6571 6571
           schema:
6572 6572
             type: "string"
6573 6573
             format: "binary"
6574
-      tags: ["Plugins"]
6574
+      tags: ["Plugin"]
6575 6575
   /plugins/{name}/push:
6576 6576
     post:
6577 6577
       summary: "Push a plugin"
... ...
@@ -6595,7 +6595,7 @@ paths:
6595 6595
           description: "server error"
6596 6596
           schema:
6597 6597
             $ref: "#/definitions/ErrorResponse"
6598
-      tags: ["Plugins"]
6598
+      tags: ["Plugin"]
6599 6599
   /plugins/{name}/set:
6600 6600
     post:
6601 6601
       summary: "Configure a plugin"
... ...
@@ -6626,7 +6626,7 @@ paths:
6626 6626
           description: "Server error"
6627 6627
           schema:
6628 6628
             $ref: "#/definitions/ErrorResponse"
6629
-      tags: ["Plugins"]
6629
+      tags: ["Plugin"]
6630 6630
   /nodes:
6631 6631
     get:
6632 6632
       summary: "List nodes"
... ...
@@ -6655,7 +6655,7 @@ paths:
6655 6655
             - `name=<node name>`
6656 6656
             - `role=`(`manager`|`worker`)`
6657 6657
           type: "string"
6658
-      tags: ["Nodes"]
6658
+      tags: ["Node"]
6659 6659
   /nodes/{id}:
6660 6660
     get:
6661 6661
       summary: "Inspect a node"
... ...
@@ -6679,7 +6679,7 @@ paths:
6679 6679
           description: "The ID or name of the node"
6680 6680
           type: "string"
6681 6681
           required: true
6682
-      tags: ["Nodes"]
6682
+      tags: ["Node"]
6683 6683
     delete:
6684 6684
       summary: "Delete a node"
6685 6685
       operationId: "NodeDelete"
... ...
@@ -6705,7 +6705,7 @@ paths:
6705 6705
           description: "Force remove a node from the swarm"
6706 6706
           default: false
6707 6707
           type: "boolean"
6708
-      tags: ["Nodes"]
6708
+      tags: ["Node"]
6709 6709
   /nodes/{id}/update:
6710 6710
     post:
6711 6711
       summary: "Update a node"
... ...
@@ -6737,7 +6737,7 @@ paths:
6737 6737
           type: "integer"
6738 6738
           format: "int64"
6739 6739
           required: true
6740
-      tags: ["Nodes"]
6740
+      tags: ["Node"]
6741 6741
   /swarm:
6742 6742
     get:
6743 6743
       summary: "Inspect swarm"
... ...
@@ -7035,7 +7035,7 @@ paths:
7035 7035
             - `id=<service id>`
7036 7036
             - `name=<service name>`
7037 7037
             - `label=<service label>`
7038
-      tags: ["Services"]
7038
+      tags: ["Service"]
7039 7039
   /services/create:
7040 7040
     post:
7041 7041
       summary: "Create a service"
... ...
@@ -7132,7 +7132,7 @@ paths:
7132 7132
           in: "header"
7133 7133
           description: "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)"
7134 7134
           type: "string"
7135
-      tags: ["Services"]
7135
+      tags: ["Service"]
7136 7136
   /services/{id}:
7137 7137
     get:
7138 7138
       summary: "Inspect a service"
... ...
@@ -7156,7 +7156,7 @@ paths:
7156 7156
           description: "ID or name of service."
7157 7157
           required: true
7158 7158
           type: "string"
7159
-      tags: ["Services"]
7159
+      tags: ["Service"]
7160 7160
     delete:
7161 7161
       summary: "Delete a service"
7162 7162
       operationId: "ServiceDelete"
... ...
@@ -7177,7 +7177,7 @@ paths:
7177 7177
           description: "ID or name of service."
7178 7178
           required: true
7179 7179
           type: "string"
7180
-      tags: ["Services"]
7180
+      tags: ["Service"]
7181 7181
   /services/{id}/update:
7182 7182
     post:
7183 7183
       summary: "Update a service"
... ...
@@ -7252,7 +7252,7 @@ paths:
7252 7252
           description: "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)"
7253 7253
           type: "string"
7254 7254
 
7255
-      tags: ["Services"]
7255
+      tags: ["Service"]
7256 7256
   /services/{id}/logs:
7257 7257
     get:
7258 7258
       summary: "Get service logs"
... ...
@@ -7329,7 +7329,7 @@ paths:
7329 7329
           description: "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines."
7330 7330
           type: "string"
7331 7331
           default: "all"
7332
-      tags: ["Services"]
7332
+      tags: ["Service"]
7333 7333
   /tasks:
7334 7334
     get:
7335 7335
       summary: "List tasks"
... ...
@@ -7472,7 +7472,7 @@ paths:
7472 7472
             - `node=<node id or name>`
7473 7473
             - `label=key` or `label="key=value"`
7474 7474
             - `desired-state=(running | shutdown | accepted)`
7475
-      tags: ["Tasks"]
7475
+      tags: ["Task"]
7476 7476
   /tasks/{id}:
7477 7477
     get:
7478 7478
       summary: "Inspect a task"
... ...
@@ -7498,7 +7498,7 @@ paths:
7498 7498
           description: "ID of the task"
7499 7499
           required: true
7500 7500
           type: "string"
7501
-      tags: ["Tasks"]
7501
+      tags: ["Task"]
7502 7502
   /secrets:
7503 7503
     get:
7504 7504
       summary: "List secrets"
... ...
@@ -7532,7 +7532,7 @@ paths:
7532 7532
             A JSON encoded value of the filters (a `map[string][]string`) to process on the secrets list. Available filters:
7533 7533
 
7534 7534
             - `names=<secret name>`
7535
-      tags: ["Secrets"]
7535
+      tags: ["Secret"]
7536 7536
   /secrets/create:
7537 7537
     post:
7538 7538
       summary: "Create a secret"
... ...
@@ -7576,7 +7576,7 @@ paths:
7576 7576
                   Labels:
7577 7577
                     foo: "bar"
7578 7578
                   Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
7579
-      tags: ["Secrets"]
7579
+      tags: ["Secret"]
7580 7580
   /secrets/{id}:
7581 7581
     get:
7582 7582
       summary: "Inspect a secret"
... ...
@@ -7614,7 +7614,7 @@ paths:
7614 7614
           required: true
7615 7615
           type: "string"
7616 7616
           description: "ID of the secret"
7617
-      tags: ["Secrets"]
7617
+      tags: ["Secret"]
7618 7618
     delete:
7619 7619
       summary: "Delete a secret"
7620 7620
       operationId: "SecretDelete"
... ...
@@ -7637,4 +7637,4 @@ paths:
7637 7637
           required: true
7638 7638
           type: "string"
7639 7639
           description: "ID of the secret"
7640
-      tags: ["Secrets"]
7640
+      tags: ["Secret"]