@@ -75,3 +75,137 @@ def pre_instance_update(self, instance):
7575 args = self .ctx .args
7676 if args .system_assigned :
7777 args .type = 'None'
78+
79+
80+ class VmConnectEnable :
81+ """Enable VM Connect functionality for Stack HCI cluster."""
82+
83+ def __init__ (self , loader = None ):
84+ self .loader = loader
85+
86+ @classmethod
87+ def _build_arguments_schema (cls , * args , ** kwargs ):
88+ from azure .cli .core .aaz import AAZResourceGroupNameArg , AAZStrArg , AAZDictArg
89+ args_schema = {}
90+ args_schema .cluster_name = AAZStrArg (
91+ options = ["--cluster-name" , "-n" ],
92+ help = "The name of the cluster." ,
93+ required = True
94+ )
95+ args_schema .resource_group = AAZResourceGroupNameArg (
96+ options = ["--resource-group" , "-g" ],
97+ help = "Name of resource group." ,
98+ required = True
99+ )
100+ args_schema .vm_name = AAZStrArg (
101+ options = ["--vm-name" ],
102+ help = "The name of the virtual machine." ,
103+ required = True
104+ )
105+ return args_schema
106+
107+ def __call__ (self , cmd , ** kwargs ):
108+ from azure .cli .core .commands .client_factory import get_subscription_id
109+ from azure .cli .core .util import send_raw_request
110+ import json
111+
112+ cluster_name = kwargs .get ('cluster_name' )
113+ resource_group = kwargs .get ('resource_group' )
114+ vm_name = kwargs .get ('vm_name' )
115+
116+ subscription_id = get_subscription_id (cmd .cli_ctx )
117+
118+ # Construct the REST API path
119+ path = f"/subscriptions/{ subscription_id } /resourceGroups/{ resource_group } /providers/Microsoft.AzureStackHCI/clusters/{ cluster_name } /jobs/VmConnectProvision"
120+
121+ # API version
122+ api_version = "2023-12-01-preview"
123+ url = f"https://management.azure.com{ path } ?api-version={ api_version } "
124+
125+ # Default payload with VM name
126+ payload = {
127+ "properties" : {
128+ "jobType" : "VmConnectProvision" ,
129+ "deploymentMode" : "Deploy" ,
130+ "vmConnectProvisionJobDetails" : [
131+ {
132+ "vmName" : vm_name
133+ }
134+ ]
135+ }
136+ }
137+
138+ # Make the REST API call
139+ try :
140+ response = send_raw_request (cmd .cli_ctx , "PUT" , url , body = json .dumps (payload ))
141+ return response .json () if response .content else {"message" : f"VM Connect provision job initiated successfully for VM: { vm_name } " }
142+ except Exception as e :
143+ from azure .cli .core .util import CLIError
144+ raise CLIError (f"Failed to enable VM Connect for VM '{ vm_name } ': { str (e )} " )
145+
146+
147+ class VmConnectDisable :
148+ """Disable VM Connect functionality for Stack HCI cluster."""
149+
150+ def __init__ (self , loader = None ):
151+ self .loader = loader
152+
153+ @classmethod
154+ def _build_arguments_schema (cls , * args , ** kwargs ):
155+ from azure .cli .core .aaz import AAZResourceGroupNameArg , AAZStrArg
156+ args_schema = {}
157+ args_schema .cluster_name = AAZStrArg (
158+ options = ["--cluster-name" , "-n" ],
159+ help = "The name of the cluster." ,
160+ required = True
161+ )
162+ args_schema .resource_group = AAZResourceGroupNameArg (
163+ options = ["--resource-group" , "-g" ],
164+ help = "Name of resource group." ,
165+ required = True
166+ )
167+ args_schema .vm_name = AAZStrArg (
168+ options = ["--vm-name" ],
169+ help = "The name of the virtual machine." ,
170+ required = True
171+ )
172+ return args_schema
173+
174+ def __call__ (self , cmd , ** kwargs ):
175+ from azure .cli .core .commands .client_factory import get_subscription_id
176+ from azure .cli .core .util import send_raw_request
177+ import json
178+
179+ cluster_name = kwargs .get ('cluster_name' )
180+ resource_group = kwargs .get ('resource_group' )
181+ vm_name = kwargs .get ('vm_name' )
182+
183+ subscription_id = get_subscription_id (cmd .cli_ctx )
184+
185+ # Construct the REST API path for deprovision
186+ path = f"/subscriptions/{ subscription_id } /resourceGroups/{ resource_group } /providers/Microsoft.AzureStackHCI/clusters/{ cluster_name } /jobs/VmConnectDeprovision"
187+
188+ # API version
189+ api_version = "2023-12-01-preview"
190+ url = f"https://management.azure.com{ path } ?api-version={ api_version } "
191+
192+ # Payload for VM Connect deprovision
193+ payload = {
194+ "properties" : {
195+ "jobType" : "VmConnectDeprovision" ,
196+ "deploymentMode" : "Deploy" ,
197+ "vmConnectProvisionJobDetails" : [
198+ {
199+ "vmName" : vm_name
200+ }
201+ ]
202+ }
203+ }
204+
205+ # Make the REST API call
206+ try :
207+ response = send_raw_request (cmd .cli_ctx , "PUT" , url , body = json .dumps (payload ))
208+ return response .json () if response .content else {"message" : f"VM Connect deprovision job initiated successfully for VM: { vm_name } " }
209+ except Exception as e :
210+ from azure .cli .core .util import CLIError
211+ raise CLIError (f"Failed to disable VM Connect for VM '{ vm_name } ': { str (e )} " )
0 commit comments