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.
Files changed (88) hide show
  1. {vss_cli-2025.8.0.dev0/vss_cli.egg-info → vss_cli-2025.8.0.dev1}/PKG-INFO +1 -1
  2. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/autocompletion.py +16 -0
  3. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/const.py +1 -1
  4. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/clib.yaml +1 -1
  5. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/clone.yaml +1 -1
  6. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/shell.yaml +1 -1
  7. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/template.yaml +1 -1
  8. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/template.py +93 -3
  9. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/vm.py +4 -12
  10. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1/vss_cli.egg-info}/PKG-INFO +1 -1
  11. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/LICENSE +0 -0
  12. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/README.md +0 -0
  13. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/docs/conf.py +0 -0
  14. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/pyproject.toml +0 -0
  15. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/scripts/update_homebrew_formula.py +0 -0
  16. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/setup.cfg +0 -0
  17. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/tests/test_vss_cli.py +0 -0
  18. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/__init__.py +0 -0
  19. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/cli.py +0 -0
  20. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/config.py +0 -0
  21. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/config.yaml +0 -0
  22. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data/image.yaml +0 -0
  23. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/data_types.py +0 -0
  24. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/exceptions.py +0 -0
  25. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/hcio.py +0 -0
  26. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/helper.py +0 -0
  27. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/__init__.py +0 -0
  28. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/account.py +0 -0
  29. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/assist.py +0 -0
  30. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/completion.py +0 -0
  31. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute.py +0 -0
  32. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/__init__.py +0 -0
  33. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/callbacks.py +0 -0
  34. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/contentlib.py +0 -0
  35. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/domain.py +0 -0
  36. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/floppy.py +0 -0
  37. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/folder.py +0 -0
  38. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/helper.py +0 -0
  39. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/image.py +0 -0
  40. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/inventory.py +0 -0
  41. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/iso.py +0 -0
  42. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/net.py +0 -0
  43. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/os.py +0 -0
  44. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/rel_args.py +0 -0
  45. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/rel_opts.py +0 -0
  46. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/compute_plugins/vmdks.py +0 -0
  47. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/configure.py +0 -0
  48. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/key.py +0 -0
  49. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/mcp.py +0 -0
  50. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/message.py +0 -0
  51. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/misc.py +0 -0
  52. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/ovf.py +0 -0
  53. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/plugins.py +0 -0
  54. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/raw.py +0 -0
  55. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request.py +0 -0
  56. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/__init__.py +0 -0
  57. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/change.py +0 -0
  58. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/export.py +0 -0
  59. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/folder.py +0 -0
  60. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/image.py +0 -0
  61. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/inventory.py +0 -0
  62. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/new.py +0 -0
  63. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/restore.py +0 -0
  64. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/retirement.py +0 -0
  65. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/snapshot.py +0 -0
  66. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/request_plugins/vmdk.py +0 -0
  67. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/service.py +0 -0
  68. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/shell.py +0 -0
  69. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/status.py +0 -0
  70. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/stor.py +0 -0
  71. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/token.py +0 -0
  72. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/upgrade.py +0 -0
  73. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/plugins/vpn.py +0 -0
  74. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/rel_opts.py +0 -0
  75. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/sstatus.py +0 -0
  76. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/__init__.py +0 -0
  77. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/emoji.py +0 -0
  78. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/mcp.py +0 -0
  79. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/utils/threading.py +0 -0
  80. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/validators.py +0 -0
  81. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/vss.py +0 -0
  82. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/vssconst.py +0 -0
  83. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli/yaml.py +0 -0
  84. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/SOURCES.txt +0 -0
  85. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/dependency_links.txt +0 -0
  86. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/entry_points.txt +0 -0
  87. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/requires.txt +0 -0
  88. {vss_cli-2025.8.0.dev0 → vss_cli-2025.8.0.dev1}/vss_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vss-cli
3
- Version: 2025.8.0.dev0
3
+ Version: 2025.8.0.dev1
4
4
  Summary: ITS Private Cloud CLI
5
5
  Author-email: University of Toronto <vss-apps@eis.utoronto.ca>
6
6
  Maintainer-email: vss-py@eis.utoronto.ca
@@ -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
@@ -8,7 +8,7 @@ except ImportError:
8
8
 
9
9
  PACKAGE_NAME = "vss_cli"
10
10
 
11
- __version__ = "2025.8.0-dev0"
11
+ __version__ = "2025.8.0-dev1"
12
12
 
13
13
 
14
14
  DEFAULT_TIMEOUT = 30
@@ -1,5 +1,5 @@
1
1
  ####################################################
2
- # VSS-CLI Spec from CLib 2025.8.0-dev0 #
2
+ # VSS-CLI Spec from CLib 2025.8.0-dev1 #
3
3
  ####################################################
4
4
  built: clib # Required: Do not remove.
5
5
  machine:
@@ -1,5 +1,5 @@
1
1
  ####################################################
2
- # VSS-CLI Spec from Clone 2025.8.0-dev0 #
2
+ # VSS-CLI Spec from Clone 2025.8.0-dev1 #
3
3
  ####################################################
4
4
  built: clone # Required: Do not remove.
5
5
  machine:
@@ -1,5 +1,5 @@
1
1
  ####################################################
2
- # VSS-CLI Spec shell VM 2025.8.0-dev0 #
2
+ # VSS-CLI Spec shell VM 2025.8.0-dev1 #
3
3
  ####################################################
4
4
  built: os_install # Required: Do not remove.
5
5
  machine:
@@ -1,5 +1,5 @@
1
1
  ####################################################
2
- # VSS-CLI Spec from Template 2025.8.0-dev0 #
2
+ # VSS-CLI Spec from Template 2025.8.0-dev1 #
3
3
  ####################################################
4
4
  built: template # Required: Do not remove.
5
5
  machine:
@@ -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
- @cli.group('template', short_help='List virtual machine templates')
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.virtual_machines,
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, on):
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 --on/--off
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=on)
3185
+ payload = dict(vm_id=ctx.moref, value=True)
3194
3186
  # add common options
3195
3187
  payload.update(ctx.payload_options)
3196
3188
  # request
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vss-cli
3
- Version: 2025.8.0.dev0
3
+ Version: 2025.8.0.dev1
4
4
  Summary: ITS Private Cloud CLI
5
5
  Author-email: University of Toronto <vss-apps@eis.utoronto.ca>
6
6
  Maintainer-email: vss-py@eis.utoronto.ca
File without changes