Skip to content

Commit 125a749

Browse files
authored
[Compute] az vm create/update: Add new parameters --wire-server-mode --wire-server-access-control-profile-reference-id to support setting wireserver endpoint settings (#31279)
1 parent 34c73d0 commit 125a749

File tree

5 files changed

+4634
-3250
lines changed

5 files changed

+4634
-3250
lines changed

src/azure-cli/azure/cli/command_modules/vm/_params.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ def load_arguments(self, _):
481481
c.argument('enable_user_reboot_scheduled_events', options_list=['--enable-user-reboot-scheduled-events', '--enable-reboot'], arg_type=get_three_state_flag(), min_api='2024-07-01', help='The configuration parameter used while publishing scheduled events additional publishing targets.')
482482
c.argument('enable_user_redeploy_scheduled_events', options_list=['--enable-user-redeploy-scheduled-events', '--enable-redeploy'], arg_type=get_three_state_flag(), min_api='2024-07-01', help='The configuration parameter used while creating user initiated redeploy scheduled event setting creation.')
483483
c.argument('align_regional_disks_to_vm_zone', options_list=['--align-regional-disks-to-vm-zone', '--align-regional-disks'], arg_type=get_three_state_flag(), min_api='2024-11-01', help='Specify whether the regional disks should be aligned/moved to the VM zone. This is applicable only for VMs with placement property set. Please note that this change is irreversible.')
484+
c.argument('key_incarnation_id', type=int, min_api='2024-11-01', help='Increase the value of this property allows user to reset the key used for securing communication channel between guest and host.')
484485

485486
with self.argument_context('vm create', arg_group='Storage') as c:
486487
c.argument('attach_os_disk', help='Attach an existing OS disk to the VM. Can use the name or ID of a managed disk or the URI to an unmanaged disk VHD.')
@@ -1251,7 +1252,11 @@ def load_arguments(self, _):
12511252
c.argument('v_cpus_per_core', type=int, min_api='2021-11-01', help='Specify the ratio of vCPU to physical core. Setting this property to 1 also means that hyper-threading is disabled.')
12521253
c.argument('disk_controller_type', disk_controller_type)
12531254
c.argument('enable_proxy_agent', arg_type=get_three_state_flag(), min_api='2023-09-01', help='Specify whether proxy agent feature should be enabled on the virtual machine or virtual machine scale set.')
1254-
c.argument('proxy_agent_mode', arg_type=get_enum_type(self.get_models('Mode')), min_api='2023-09-01', help='Specify the mode that proxy agent will execute on if the feature is enabled.')
1255+
c.argument('proxy_agent_mode', deprecate_info=c.deprecate(target='--proxy-agent-mode', redirect='--wire-server-mode'), arg_type=get_enum_type(self.get_models('Mode')), min_api='2023-09-01', help='Specify the mode that proxy agent will execute on if the feature is enabled.')
1256+
c.argument('wire_server_mode', arg_type=get_enum_type(self.get_models('Mode')), min_api='2024-11-01', help='Specify the mode that proxy agent will execute on if the feature is enabled.')
1257+
c.argument('wire_server_access_control_profile_reference_id', options_list=['--wire-server-access-control-profile-reference-id', '--wire-server-profile-id'], min_api='2024-11-01', help='Specify the access control profile version resource id of wire server.')
1258+
c.argument('imds_mode', arg_type=get_enum_type(self.get_models('Mode')), min_api='2024-11-01', help='Specify the mode that proxy agent will execute on if the feature is enabled.')
1259+
c.argument('imds_access_control_profile_reference_id', options_list=['--imds-access-control-profile-reference-id', '--imds-profile-id'], min_api='2024-11-01', help='Specify the access control profile version resource id resource id of imds.')
12551260

12561261
with self.argument_context('vm update') as c:
12571262
c.argument('license_type', license_type)

src/azure-cli/azure/cli/command_modules/vm/_template_builder.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,9 @@ def build_vm_resource( # pylint: disable=too-many-locals, too-many-statements,
309309
os_disk_security_encryption_type=None, os_disk_secure_vm_disk_encryption_set=None, disk_controller_type=None,
310310
enable_proxy_agent=None, proxy_agent_mode=None, additional_scheduled_events=None,
311311
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
312-
zone_placement_policy=None, include_zones=None, exclude_zones=None, align_regional_disks_to_vm_zone=None):
312+
zone_placement_policy=None, include_zones=None, exclude_zones=None, align_regional_disks_to_vm_zone=None,
313+
wire_server_mode=None, imds_mode=None, wire_server_access_control_profile_reference_id=None,
314+
imds_access_control_profile_reference_id=None, key_incarnation_id=None):
313315

314316
os_caching = disk_info['os'].get('caching')
315317

@@ -668,12 +670,31 @@ def _build_storage_profile():
668670
vm_properties['securityProfile']['encryptionAtHost'] = encryption_at_host
669671

670672
proxy_agent_settings = {}
673+
wire_server = {}
674+
imds = {}
671675
if enable_proxy_agent is not None:
672676
proxy_agent_settings['enabled'] = enable_proxy_agent
673677

674678
if proxy_agent_mode is not None:
675679
proxy_agent_settings['mode'] = proxy_agent_mode
676680

681+
if key_incarnation_id is not None:
682+
proxy_agent_settings['keyIncarnationId'] = key_incarnation_id
683+
684+
if wire_server_mode is not None or wire_server_access_control_profile_reference_id is not None:
685+
wire_server['mode'] = wire_server_mode
686+
wire_server['inVMAccessControlProfileReferenceId'] = wire_server_access_control_profile_reference_id
687+
688+
if imds_mode is not None or imds_access_control_profile_reference_id is not None:
689+
imds['mode'] = imds_mode
690+
imds['inVMAccessControlProfileReferenceId'] = imds_access_control_profile_reference_id
691+
692+
if wire_server:
693+
proxy_agent_settings['wireServer'] = wire_server
694+
695+
if imds:
696+
proxy_agent_settings['imds'] = imds
697+
677698
if proxy_agent_settings:
678699
vm_properties['securityProfile']['proxyAgentSettings'] = proxy_agent_settings
679700

@@ -1019,7 +1040,9 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
10191040
enable_resilient_vm_creation=None, enable_resilient_vm_deletion=None,
10201041
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
10211042
enable_user_redeploy_scheduled_events=None, skuprofile_vmsizes=None, skuprofile_allostrat=None,
1022-
security_posture_reference_is_overridable=None, zone_balance=None):
1043+
security_posture_reference_is_overridable=None, zone_balance=None, wire_server_mode=None,
1044+
imds_mode=None, wire_server_access_control_profile_reference_id=None,
1045+
imds_access_control_profile_reference_id=None):
10231046

10241047
# Build IP configuration
10251048
ip_configuration = {}
@@ -1533,12 +1556,28 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
15331556
}
15341557

15351558
proxy_agent_settings = {}
1559+
wire_server = {}
1560+
imds = {}
15361561
if enable_proxy_agent is not None:
15371562
proxy_agent_settings['enabled'] = enable_proxy_agent
15381563

15391564
if proxy_agent_mode is not None:
15401565
proxy_agent_settings['mode'] = proxy_agent_mode
15411566

1567+
if wire_server_mode is not None or wire_server_access_control_profile_reference_id is not None:
1568+
wire_server['mode'] = wire_server_mode
1569+
wire_server['inVMAccessControlProfileReferenceId'] = wire_server_access_control_profile_reference_id
1570+
1571+
if imds_mode is not None or imds_access_control_profile_reference_id is not None:
1572+
imds['mode'] = imds_mode
1573+
imds['inVMAccessControlProfileReferenceId'] = imds_access_control_profile_reference_id
1574+
1575+
if wire_server:
1576+
proxy_agent_settings['wireServer'] = wire_server
1577+
1578+
if imds:
1579+
proxy_agent_settings['imds'] = imds
1580+
15421581
if proxy_agent_settings:
15431582
security_profile['proxyAgentSettings'] = proxy_agent_settings
15441583

src/azure-cli/azure/cli/command_modules/vm/custom.py

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,9 @@ def create_vm(cmd, vm_name, resource_group_name, image=None, size='Standard_DS1_
826826
source_disk_restore_point=None, source_disk_restore_point_size_gb=None, ssh_key_type=None,
827827
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
828828
enable_user_redeploy_scheduled_events=None, zone_placement_policy=None, include_zones=None,
829-
exclude_zones=None, align_regional_disks_to_vm_zone=None):
829+
exclude_zones=None, align_regional_disks_to_vm_zone=None, wire_server_mode=None, imds_mode=None,
830+
wire_server_access_control_profile_reference_id=None, imds_access_control_profile_reference_id=None,
831+
key_incarnation_id=None):
830832

831833
from azure.cli.core.commands.client_factory import get_subscription_id
832834
from azure.cli.core.util import random_string, hash_string
@@ -1052,7 +1054,11 @@ def create_vm(cmd, vm_name, resource_group_name, image=None, size='Standard_DS1_
10521054
enable_user_reboot_scheduled_events=enable_user_reboot_scheduled_events,
10531055
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events,
10541056
zone_placement_policy=zone_placement_policy, include_zones=include_zones, exclude_zones=exclude_zones,
1055-
align_regional_disks_to_vm_zone=align_regional_disks_to_vm_zone)
1057+
align_regional_disks_to_vm_zone=align_regional_disks_to_vm_zone, wire_server_mode=wire_server_mode,
1058+
imds_mode=imds_mode,
1059+
wire_server_access_control_profile_reference_id=wire_server_access_control_profile_reference_id,
1060+
imds_access_control_profile_reference_id=imds_access_control_profile_reference_id,
1061+
key_incarnation_id=key_incarnation_id)
10561062

10571063
vm_resource['dependsOn'] = vm_dependencies
10581064

@@ -1581,7 +1587,9 @@ def update_vm(cmd, resource_group_name, vm_name, os_disk=None, disk_caching=None
15811587
enable_hibernation=None, v_cpus_available=None, v_cpus_per_core=None, disk_controller_type=None,
15821588
security_type=None, enable_proxy_agent=None, proxy_agent_mode=None, additional_scheduled_events=None,
15831589
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
1584-
align_regional_disks_to_vm_zone=None, **kwargs):
1590+
align_regional_disks_to_vm_zone=None, wire_server_mode=None, imds_mode=None,
1591+
wire_server_access_control_profile_reference_id=None, imds_access_control_profile_reference_id=None,
1592+
key_incarnation_id=None, **kwargs):
15851593
from azure.mgmt.core.tools import parse_resource_id, resource_id, is_valid_resource_id
15861594
from ._vm_utils import update_write_accelerator_settings, update_disk_caching
15871595
SecurityProfile, UefiSettings = cmd.get_models('SecurityProfile', 'UefiSettings')
@@ -1704,18 +1712,37 @@ def update_vm(cmd, resource_group_name, vm_name, os_disk=None, disk_caching=None
17041712
vm.security_profile.uefi_settings = UefiSettings(secure_boot_enabled=enable_secure_boot,
17051713
v_tpm_enabled=enable_vtpm)
17061714

1707-
if enable_proxy_agent is not None or proxy_agent_mode is not None:
1715+
proxy_agent_parameters = [
1716+
enable_proxy_agent, wire_server_mode, imds_mode, key_incarnation_id,
1717+
wire_server_access_control_profile_reference_id, imds_access_control_profile_reference_id
1718+
]
1719+
if any(parameter is not None for parameter in proxy_agent_parameters):
17081720
ProxyAgentSettings = cmd.get_models('ProxyAgentSettings')
1721+
HostEndpointSettings = cmd.get_models('HostEndpointSettings')
1722+
wire_server = HostEndpointSettings(
1723+
mode=wire_server_mode,
1724+
in_vm_access_control_profile_reference_id=wire_server_access_control_profile_reference_id
1725+
)
1726+
imds = HostEndpointSettings(
1727+
mode=imds_mode,
1728+
in_vm_access_control_profile_reference_id=imds_access_control_profile_reference_id
1729+
)
17091730
if vm.security_profile is None:
17101731
vm.security_profile = SecurityProfile()
1711-
vm.security_profile.proxy_agent_settings = ProxyAgentSettings(enabled=enable_proxy_agent,
1712-
mode=proxy_agent_mode)
1732+
vm.security_profile.proxy_agent_settings = ProxyAgentSettings(
1733+
enabled=enable_proxy_agent, key_incarnation_id=key_incarnation_id, wire_server=wire_server, imds=imds)
17131734
elif vm.security_profile.proxy_agent_settings is None:
1714-
vm.security_profile.proxy_agent_settings = ProxyAgentSettings(enabled=enable_proxy_agent,
1715-
mode=proxy_agent_mode)
1735+
vm.security_profile.proxy_agent_settings = ProxyAgentSettings(
1736+
enabled=enable_proxy_agent, key_incarnation_id=key_incarnation_id, wire_server=wire_server, imds=imds)
17161737
else:
17171738
vm.security_profile.proxy_agent_settings.enabled = enable_proxy_agent
1718-
vm.security_profile.proxy_agent_settings.mode = proxy_agent_mode
1739+
vm.security_profile.proxy_agent_settings.key_incarnation_id = key_incarnation_id
1740+
vm.security_profile.proxy_agent_settings.wire_server.mode = wire_server_mode
1741+
vm.security_profile.proxy_agent_settings.wire_server.in_vm_access_control_profile_reference_id = \
1742+
wire_server_access_control_profile_reference_id
1743+
vm.security_profile.proxy_agent_settings.imds.mode = imds_mode
1744+
vm.security_profile.proxy_agent_settings.imds.in_vm_access_control_profile_reference_id = \
1745+
imds_access_control_profile_reference_id
17191746

17201747
if workspace is not None:
17211748
workspace_id = _prepare_workspace(cmd, resource_group_name, workspace)
@@ -3193,7 +3220,9 @@ def create_vmss(cmd, vmss_name, resource_group_name, image=None,
31933220
enable_resilient_creation=None, enable_resilient_deletion=None,
31943221
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
31953222
enable_user_redeploy_scheduled_events=None, skuprofile_vmsizes=None, skuprofile_allostrat=None,
3196-
security_posture_reference_is_overridable=None, zone_balance=None):
3223+
security_posture_reference_is_overridable=None, zone_balance=None, wire_server_mode=None,
3224+
imds_mode=None, wire_server_access_control_profile_reference_id=None,
3225+
imds_access_control_profile_reference_id=None):
31973226
from azure.cli.core.commands.client_factory import get_subscription_id
31983227
from azure.cli.core.util import random_string, hash_string
31993228
from azure.cli.core.commands.arm import ArmTemplateBuilder
@@ -3509,7 +3538,9 @@ def _get_public_ip_address_allocation(value, sku):
35093538
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events,
35103539
skuprofile_vmsizes=skuprofile_vmsizes, skuprofile_allostrat=skuprofile_allostrat,
35113540
security_posture_reference_is_overridable=security_posture_reference_is_overridable,
3512-
zone_balance=zone_balance)
3541+
zone_balance=zone_balance, wire_server_mode=wire_server_mode, imds_mode=imds_mode,
3542+
wire_server_access_control_profile_reference_id=wire_server_access_control_profile_reference_id,
3543+
imds_access_control_profile_reference_id=imds_access_control_profile_reference_id)
35133544

35143545
vmss_resource['dependsOn'] = vmss_dependencies
35153546

@@ -3958,7 +3989,9 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
39583989
ephemeral_os_disk=None, ephemeral_os_disk_option=None, zones=None, additional_scheduled_events=None,
39593990
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
39603991
upgrade_policy_mode=None, enable_auto_os_upgrade=None, skuprofile_vmsizes=None,
3961-
skuprofile_allostrat=None, security_posture_reference_is_overridable=None, zone_balance=None, **kwargs):
3992+
skuprofile_allostrat=None, security_posture_reference_is_overridable=None, zone_balance=None,
3993+
wire_server_mode=None, imds_mode=None, wire_server_access_control_profile_reference_id=None,
3994+
imds_access_control_profile_reference_id=None, **kwargs):
39623995
vmss = kwargs['parameters']
39633996
aux_subscriptions = None
39643997
# pylint: disable=too-many-boolean-expressions
@@ -4121,19 +4154,35 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
41214154
'vTpmEnabled': enable_vtpm
41224155
}}
41234156

4124-
if enable_proxy_agent is not None or proxy_agent_mode is not None:
4157+
if enable_proxy_agent is not None or wire_server_mode is not None or imds_mode is not None or \
4158+
wire_server_access_control_profile_reference_id is not None or \
4159+
imds_access_control_profile_reference_id is not None:
41254160
SecurityProfile = cmd.get_models('SecurityProfile')
41264161
ProxyAgentSettings = cmd.get_models('ProxyAgentSettings')
4162+
HostEndpointSettings = cmd.get_models('HostEndpointSettings')
4163+
wire_server = HostEndpointSettings(
4164+
mode=wire_server_mode,
4165+
in_vm_access_control_profile_reference_id=wire_server_access_control_profile_reference_id
4166+
)
4167+
imds = HostEndpointSettings(
4168+
mode=imds_mode,
4169+
in_vm_access_control_profile_reference_id=imds_access_control_profile_reference_id
4170+
)
41274171
if vmss.virtual_machine_profile.security_profile is None:
41284172
vmss.virtual_machine_profile.security_profile = SecurityProfile()
41294173
vmss.virtual_machine_profile.security_profile.proxy_agent_settings = ProxyAgentSettings(
4130-
enabled=enable_proxy_agent, mode=proxy_agent_mode)
4174+
enabled=enable_proxy_agent, wire_server=wire_server, imds=imds)
41314175
elif vmss.virtual_machine_profile.security_profile.proxy_agent_settings is None:
41324176
vmss.virtual_machine_profile.security_profile.proxy_agent_settings = ProxyAgentSettings(
4133-
enabled=enable_proxy_agent, mode=proxy_agent_mode)
4177+
enabled=enable_proxy_agent, wire_server=wire_server, imds=imds)
41344178
else:
41354179
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.enabled = enable_proxy_agent
4136-
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.mode = proxy_agent_mode
4180+
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.wire_server.mode = wire_server_mode
4181+
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.wire_server. \
4182+
in_vm_access_control_profile_reference_id = wire_server_access_control_profile_reference_id
4183+
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.imds.mode = imds_mode
4184+
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.imds. \
4185+
in_vm_access_control_profile_reference_id = imds_access_control_profile_reference_id
41374186

41384187
if regular_priority_count is not None or regular_priority_percentage is not None:
41394188
if vmss.orchestration_mode != 'Flexible':

0 commit comments

Comments
 (0)