vss-cli 2025.8.0.dev0__tar.gz → 2025.8.0.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vss_cli-2025.8.0.dev0/vss_cli.egg-info → vss_cli-2025.8.0.dev1}/PKG-INFO +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/autocompletion.py +16 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/const.py +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/clib.yaml +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/clone.yaml +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/shell.yaml +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/template.yaml +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/template.py +93 -3
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/vm.py +4 -12
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1/vss_cli.egg-info}/PKG-INFO +1 -1
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/LICENSE +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/README.md +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/docs/conf.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/pyproject.toml +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/scripts/update_homebrew_formula.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/setup.cfg +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/tests/test_vss_cli.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/__init__.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/cli.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/config.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/config.yaml +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/image.yaml +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data_types.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/exceptions.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/hcio.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/helper.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/__init__.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/account.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/assist.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/completion.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/__init__.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/callbacks.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/contentlib.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/domain.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/floppy.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/folder.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/helper.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/image.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/inventory.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/iso.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/net.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/os.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/rel_args.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/rel_opts.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/vmdks.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/configure.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/key.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/mcp.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/message.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/misc.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/ovf.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/plugins.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/raw.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/__init__.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/change.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/export.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/folder.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/image.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/inventory.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/new.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/restore.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/retirement.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/snapshot.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/vmdk.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/service.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/shell.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/status.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/stor.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/token.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/upgrade.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/vpn.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/rel_opts.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/sstatus.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/__init__.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/emoji.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/mcp.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/threading.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/validators.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/vss.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/vssconst.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/yaml.py +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/SOURCES.txt +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/dependency_links.txt +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/entry_points.txt +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/requires.txt +0 -0
- {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/top_level.txt +0 -0
|
@@ -142,6 +142,22 @@ def virtual_machines(
|
|
|
142
142
|
)
|
|
143
143
|
|
|
144
144
|
|
|
145
|
+
@to_completion_item
|
|
146
|
+
def virtual_machine_templates(
|
|
147
|
+
ctx: Configuration, param: click.Option, incomplete: str
|
|
148
|
+
) -> List[Tuple[str, str]]:
|
|
149
|
+
"""Autocomplete VM templates."""
|
|
150
|
+
_init_ctx(ctx)
|
|
151
|
+
return _autocomplete(
|
|
152
|
+
ctx.client.get_templates,
|
|
153
|
+
incomplete,
|
|
154
|
+
['moref', 'name'],
|
|
155
|
+
complete_index=1,
|
|
156
|
+
sort_index=1,
|
|
157
|
+
f_kwargs={"show_all": True, "short": 1, "per_page": 2000},
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
145
161
|
@to_completion_item
|
|
146
162
|
def vm_controller_scsi_sharing(
|
|
147
163
|
ctx: Configuration, param: click.Option, incomplete: str
|
|
@@ -3,24 +3,114 @@ import logging
|
|
|
3
3
|
from typing import List
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
|
+
from click_plugins import with_plugins
|
|
6
7
|
|
|
7
8
|
from vss_cli import autocompletion, const
|
|
8
9
|
from vss_cli import rel_opts as so
|
|
9
10
|
from vss_cli.cli import pass_context
|
|
10
11
|
from vss_cli.config import Configuration
|
|
11
|
-
from vss_cli.helper import format_output
|
|
12
|
+
from vss_cli.helper import format_output, to_tuples
|
|
12
13
|
from vss_cli.plugins.compute import cli
|
|
13
14
|
|
|
15
|
+
try:
|
|
16
|
+
import importlib_metadata as ilm
|
|
17
|
+
except ImportError:
|
|
18
|
+
import importlib.metadata as ilm
|
|
19
|
+
|
|
14
20
|
_LOGGING = logging.getLogger(__name__)
|
|
15
21
|
|
|
16
22
|
|
|
17
|
-
@
|
|
23
|
+
@with_plugins(ilm.entry_points(group='vss_cli.contrib.compute.template'))
|
|
24
|
+
@cli.group('template', short_help='Manage virtual machine templates')
|
|
18
25
|
@pass_context
|
|
19
26
|
def compute_template(ctx):
|
|
20
27
|
"""List virtual machine templates."""
|
|
21
28
|
pass
|
|
22
29
|
|
|
23
30
|
|
|
31
|
+
@compute_template.group(
|
|
32
|
+
'set',
|
|
33
|
+
short_help='Set virtual machine template attribute',
|
|
34
|
+
invoke_without_command=True,
|
|
35
|
+
)
|
|
36
|
+
@click.argument(
|
|
37
|
+
'tmpl_id_or_name',
|
|
38
|
+
type=click.STRING,
|
|
39
|
+
required=True,
|
|
40
|
+
shell_complete=autocompletion.virtual_machine_templates,
|
|
41
|
+
)
|
|
42
|
+
@click.option(
|
|
43
|
+
'-s',
|
|
44
|
+
'--schedule',
|
|
45
|
+
type=click.DateTime(formats=const.SUPPORTED_DATETIME_FORMATS),
|
|
46
|
+
required=False,
|
|
47
|
+
default=None,
|
|
48
|
+
help='Schedule change in a given point in time based'
|
|
49
|
+
' on format YYYY-MM-DD HH:MM.',
|
|
50
|
+
)
|
|
51
|
+
@click.option(
|
|
52
|
+
'-u',
|
|
53
|
+
'--user-meta',
|
|
54
|
+
help='User metadata in key=value format. '
|
|
55
|
+
'These tags are stored in the request.',
|
|
56
|
+
required=False,
|
|
57
|
+
default=None,
|
|
58
|
+
)
|
|
59
|
+
@so.dry_run_opt
|
|
60
|
+
@pass_context
|
|
61
|
+
def compute_template_set(
|
|
62
|
+
ctx: Configuration,
|
|
63
|
+
tmpl_id_or_name: str,
|
|
64
|
+
schedule,
|
|
65
|
+
user_meta: str,
|
|
66
|
+
dry_run: bool,
|
|
67
|
+
):
|
|
68
|
+
"""Manage virtual machine resources.
|
|
69
|
+
|
|
70
|
+
Such as cpu, memory, disk, network backing, cd, etc.
|
|
71
|
+
"""
|
|
72
|
+
# set up payload opts
|
|
73
|
+
ctx.user_meta = dict(to_tuples(user_meta))
|
|
74
|
+
ctx.schedule = schedule
|
|
75
|
+
# whether to wait for requests
|
|
76
|
+
# check for vm
|
|
77
|
+
_vm = ctx.get_vm_by_id_or_name(tmpl_id_or_name, instance_type='template')
|
|
78
|
+
ctx.moref = _vm[0]['moref']
|
|
79
|
+
# set additional props
|
|
80
|
+
if user_meta:
|
|
81
|
+
ctx.payload_options['user_meta'] = ctx.user_meta
|
|
82
|
+
if schedule:
|
|
83
|
+
ctx.payload_options['schedule'] = ctx.schedule.strftime(
|
|
84
|
+
const.DEFAULT_DATETIME_FMT
|
|
85
|
+
)
|
|
86
|
+
# set dry run and output to json
|
|
87
|
+
ctx.set_dry_run(dry_run)
|
|
88
|
+
if click.get_current_context().invoked_subcommand is None:
|
|
89
|
+
raise click.UsageError('Sub command is required')
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@compute_template_set.command('vm', short_help='Mark template as vm.')
|
|
93
|
+
@pass_context
|
|
94
|
+
def compute_vm_set_template(ctx: Configuration):
|
|
95
|
+
"""Mark virtual machine template to virtual machine.
|
|
96
|
+
|
|
97
|
+
vss-cli compute template set <name-or-tmpl_id
|
|
98
|
+
> vm
|
|
99
|
+
"""
|
|
100
|
+
# create payload
|
|
101
|
+
payload = dict(vm_id=ctx.moref, value=False)
|
|
102
|
+
# add common options
|
|
103
|
+
payload.update(ctx.payload_options)
|
|
104
|
+
# request
|
|
105
|
+
obj = ctx.mark_template_as_vm(**payload)
|
|
106
|
+
# print
|
|
107
|
+
columns = ctx.columns or const.COLUMNS_REQUEST_SUBMITTED
|
|
108
|
+
ctx.echo(format_output(ctx, [obj], columns=columns, single=True))
|
|
109
|
+
# wait for request
|
|
110
|
+
if ctx.wait_for_requests:
|
|
111
|
+
ctx.wait_for_request_to(obj)
|
|
112
|
+
|
|
113
|
+
|
|
24
114
|
@compute_template.group(
|
|
25
115
|
'rm', help='Delete virtual machine templates', invoke_without_command=True
|
|
26
116
|
)
|
|
@@ -37,7 +127,7 @@ def compute_template(ctx):
|
|
|
37
127
|
type=click.STRING,
|
|
38
128
|
required=True,
|
|
39
129
|
nargs=-1,
|
|
40
|
-
shell_complete=autocompletion.
|
|
130
|
+
shell_complete=autocompletion.virtual_machine_templates,
|
|
41
131
|
)
|
|
42
132
|
@so.max_del_opt
|
|
43
133
|
@pass_context
|
|
@@ -3174,23 +3174,15 @@ def compute_vm_set_state(ctx: Configuration, state, confirm):
|
|
|
3174
3174
|
ctx.wait_for_request_to(obj)
|
|
3175
3175
|
|
|
3176
3176
|
|
|
3177
|
-
@compute_vm_set.command(
|
|
3178
|
-
'template', short_help='Mark vm as template or vice versa.'
|
|
3179
|
-
)
|
|
3180
|
-
@click.option(
|
|
3181
|
-
'--on/--off',
|
|
3182
|
-
is_flag=True,
|
|
3183
|
-
help='Marks vm as template or template as vm',
|
|
3184
|
-
default=False,
|
|
3185
|
-
)
|
|
3177
|
+
@compute_vm_set.command('template', short_help='Mark vm as template.')
|
|
3186
3178
|
@pass_context
|
|
3187
|
-
def compute_vm_set_template(ctx: Configuration
|
|
3179
|
+
def compute_vm_set_template(ctx: Configuration):
|
|
3188
3180
|
"""Mark virtual machine as template or template to virtual machine.
|
|
3189
3181
|
|
|
3190
|
-
vss-cli compute vm set <name-or-vm_id> template
|
|
3182
|
+
vss-cli compute vm set <name-or-vm_id> template
|
|
3191
3183
|
"""
|
|
3192
3184
|
# create payload
|
|
3193
|
-
payload = dict(vm_id=ctx.moref, value=
|
|
3185
|
+
payload = dict(vm_id=ctx.moref, value=True)
|
|
3194
3186
|
# add common options
|
|
3195
3187
|
payload.update(ctx.payload_options)
|
|
3196
3188
|
# request
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/callbacks.py
RENAMED
|
File without changes
|
{vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/contentlib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/inventory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/inventory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/retirement.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|