Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/aks-preview/HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
Release History
===============

0.5.67
++++++
* Add support for csi drivers extensibility.


0.5.66
++++++
* Prompt when no arguments are given to update and nodepool update to see if the customer wants to try goal seek to current settings.
Expand Down
27 changes: 27 additions & 0 deletions src/aks-preview/azext_aks_preview/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,15 @@
- name: --enable-workload-identity
type: bool
short-summary: (PREVIEW) Enable workload identity addon.
- name: --disable-disk-driver
type: bool
short-summary: Disable AzureDisk CSI Driver.
- name: --disable-file-driver
type: bool
short-summary: Disable AzureFile CSI Driver.
- name: --disable-snapshot-controller
type: bool
short-summary: Disable CSI Snapshot Controller.
- name: --aci-subnet-name
type: string
short-summary: The name of a subnet in an existing VNet into which to deploy the virtual nodes.
Expand Down Expand Up @@ -648,6 +657,24 @@
- name: --rotation-poll-interval
type: string
short-summary: Set interval of rotation poll. Use with azure-keyvault-secrets-provider addon.
- name: --enable-disk-driver
type: bool
short-summary: Enable AzureDisk CSI Driver.
- name: --disable-disk-driver
type: bool
short-summary: Disable AzureDisk CSI Driver.
- name: --enable-file-driver
type: bool
short-summary: Enable AzureFile CSI Driver.
- name: --disable-file-driver
type: bool
short-summary: Disable AzureFile CSI Driver.
- name: --enable-snapshot-controller
type: bool
short-summary: Enable Snapshot Controller.
- name: --disable-snapshot-controller
type: bool
short-summary: Disable CSI Snapshot Controller.
- name: --tags
type: string
short-summary: The tags of the managed cluster. The managed cluster instance and all resources managed by the cloud provider will be tagged.
Expand Down
9 changes: 9 additions & 0 deletions src/aks-preview/azext_aks_preview/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,9 @@ def load_arguments(self, _):
c.argument('snapshot_id', validator=validate_snapshot_id)
c.argument('kubelet_config')
c.argument('linux_os_config')
c.argument('disable_disk_driver', arg_type=get_three_state_flag())
c.argument('disable_file_driver', arg_type=get_three_state_flag())
c.argument('disable_snapshot_controller', arg_type=get_three_state_flag())
c.argument('yes', options_list=[
'--yes', '-y'], help='Do not prompt for confirmation.', action='store_true')
c.argument('aks_custom_headers')
Expand Down Expand Up @@ -324,6 +327,12 @@ def load_arguments(self, _):
c.argument('enable_windows_gmsa', action='store_true')
c.argument('gmsa_dns_server')
c.argument('gmsa_root_domain_name')
c.argument('enable_disk_driver', arg_type=get_three_state_flag())
c.argument('disable_disk_driver', arg_type=get_three_state_flag())
c.argument('enable_file_driver', arg_type=get_three_state_flag())
c.argument('disable_file_driver', arg_type=get_three_state_flag())
c.argument('enable_snapshot_controller', arg_type=get_three_state_flag())
c.argument('disable_snapshot_controller', arg_type=get_three_state_flag())
Comment on lines 330 to 335
Copy link
Copy Markdown
Contributor

@zhoxing-ms zhoxing-ms May 5, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not recommend adding two completely opposite parameters repeatedly, because --enable-disk-driver True can replace --disable-disk-driver False, it will lead to too many similar parameters of CLI which will increase the learning cost of users. Moreover, it may also lead to conflicting usage of parameters

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zhoxing-ms so what's the suggestion? only use --enable-disk-driver? and --enable-disk-driver False looks weird.

Copy link
Copy Markdown
Contributor

@andyzhangx andyzhangx May 5, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are a few parameters following the same way in AKS: e.g.

        c.argument('enable_public_fqdn', action='store_true')
        c.argument('disable_public_fqdn', action='store_true')
        c.argument('enable_ahub')
        c.argument('disable_ahub')
        c.argument('enable_azure_rbac', action='store_true')
        c.argument('disable_azure_rbac', action='store_true')
        c.argument('enable_secret_rotation', action='store_true')
        c.argument('disable_secret_rotation', action='store_true')
        c.argument('enable_cluster_autoscaler', options_list=[
                   "--enable-cluster-autoscaler", "-e"], action='store_true')
        c.argument('disable_cluster_autoscaler', options_list=[
                   "--disable-cluster-autoscaler", "-d"], action='store_true')
        c.argument('enable_pod_identity', action='store_true')
        c.argument('disable_pod_identity', action='store_true')
        c.argument('enable_workload_identity', arg_type=get_three_state_flag(), is_preview=True)
        c.argument('disable_workload_identity', arg_type=get_three_state_flag(), is_preview=True)

c.argument('attach_acr', acr_arg_type, validator=validate_acr)
c.argument('detach_acr', acr_arg_type, validator=validate_acr)
# addons
Expand Down
9 changes: 9 additions & 0 deletions src/aks-preview/azext_aks_preview/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -780,6 +780,9 @@ def aks_create(cmd,
enable_ultra_ssd=False,
edge_zone=None,
enable_secret_rotation=False,
disable_disk_driver=None,
disable_file_driver=None,
disable_snapshot_controller=None,
rotation_poll_interval=None,
disable_local_accounts=False,
no_wait=False,
Expand Down Expand Up @@ -865,6 +868,12 @@ def aks_update(cmd, # pylint: disable=too-many-statements,too-many-branches,
enable_secret_rotation=False,
disable_secret_rotation=False,
rotation_poll_interval=None,
enable_disk_driver=None,
disable_disk_driver=None,
enable_file_driver=None,
disable_file_driver=None,
enable_snapshot_controller=None,
disable_snapshot_controller=None,
disable_local_accounts=False,
enable_local_accounts=False,
enable_public_fqdn=False,
Expand Down
155 changes: 155 additions & 0 deletions src/aks-preview/azext_aks_preview/decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@
ManagedClusterAddonProfile = TypeVar("ManagedClusterAddonProfile")
ManagedClusterOIDCIssuerProfile = TypeVar('ManagedClusterOIDCIssuerProfile')
ManagedClusterSecurityProfileWorkloadIdentity = TypeVar('ManagedClusterSecurityProfileWorkloadIdentity')
ManagedClusterStorageProfile = TypeVar('ManagedClusterStorageProfile')
ManagedClusterStorageProfileDiskCSIDriver = TypeVar('ManagedClusterStorageProfileDiskCSIDriver')
ManagedClusterStorageProfileFileCSIDriver = TypeVar('ManagedClusterStorageProfileFileCSIDriver')
ManagedClusterStorageProfileSnapshotController = TypeVar('ManagedClusterStorageProfileSnapshotController')
Snapshot = TypeVar("Snapshot")
ManagedClusterSnapshot = TypeVar("ManagedClusterSnapshot")
AzureKeyVaultKms = TypeVar('AzureKeyVaultKms')
Expand Down Expand Up @@ -142,6 +146,26 @@ def __init__(self, cmd: AzCommandsLoader, resource_type: ResourceType):
resource_type=self.resource_type,
operation_group="managed_clusters",
)
self.ManagedClusterStorageProfile = self.__cmd.get_models(
"ManagedClusterStorageProfile",
resource_type=self.resource_type,
operation_group="managed_clusters",
)
self.ManagedClusterStorageProfileDiskCSIDriver = self.__cmd.get_models(
"ManagedClusterStorageProfileDiskCSIDriver",
resource_type=self.resource_type,
operation_group="managed_clusters",
)
self.ManagedClusterStorageProfileFileCSIDriver = self.__cmd.get_models(
"ManagedClusterStorageProfileFileCSIDriver",
resource_type=self.resource_type,
operation_group="managed_clusters",
)
self.ManagedClusterStorageProfileSnapshotController = self.__cmd.get_models(
"ManagedClusterStorageProfileSnapshotController",
resource_type=self.resource_type,
operation_group="managed_clusters",
)
# holder for nat gateway related models
self.__nat_gateway_models = None
# holder for pod identity related models
Expand Down Expand Up @@ -1647,6 +1671,107 @@ def get_node_vm_size(self) -> str:
"""
return self._get_node_vm_size()

def get_disk_driver(self) -> Optional[ManagedClusterStorageProfileDiskCSIDriver]:
"""Obtrain the value of storage_profile.disk_csi_driver

:return: Optional[ManagedClusterStorageProfileDiskCSIDriver]
"""
enable_disk_driver = self.raw_param.get("enable_disk_driver")
disable_disk_driver = self.raw_param.get("disable_disk_driver")
profile = self.models.ManagedClusterStorageProfileDiskCSIDriver()

if enable_disk_driver and disable_disk_driver:
raise MutuallyExclusiveArgumentError(
"Cannot specify --enable-disk-driver and "
"--disable-disk-driver at the same time."
)

if self.decorator_mode == DecoratorMode.CREATE:
if disable_disk_driver:
profile.enabled = False
else:
profile.enabled = True

if self.decorator_mode == DecoratorMode.UPDATE:
if enable_disk_driver:
profile.enabled = True
elif disable_disk_driver:
profile.enabled = False

return profile

def get_file_driver(self) -> Optional[ManagedClusterStorageProfileFileCSIDriver]:
"""Obtrain the value of storage_profile.file_csi_driver

:return: Optional[ManagedClusterStorageProfileFileCSIDriver]
"""
enable_file_driver = self.raw_param.get("enable_file_driver")
disable_file_driver = self.raw_param.get("disable_file_driver")
profile = self.models.ManagedClusterStorageProfileFileCSIDriver()

if enable_file_driver and disable_file_driver:
raise MutuallyExclusiveArgumentError(
"Cannot specify --enable-file-driver and "
"--disable-file-driver at the same time."
)

if self.decorator_mode == DecoratorMode.CREATE:
if disable_file_driver:
profile.enabled = False
else:
profile.enabled = True

if self.decorator_mode == DecoratorMode.UPDATE:
if enable_file_driver:
profile.enabled = True
elif disable_file_driver:
profile.enabled = False

return profile

def get_snapshot_controller(self) -> Optional[ManagedClusterStorageProfileSnapshotController]:
"""Obtrain the value of storage_profile.snapshot_controller

:return: Optional[ManagedClusterStorageProfileSnapshotController]
"""
enable_snapshot_controller = self.raw_param.get("enable_snapshot_controller")
disable_snapshot_controller = self.raw_param.get("disable_snapshot_controller")
profile = self.models.ManagedClusterStorageProfileSnapshotController()

if enable_snapshot_controller and disable_snapshot_controller:
raise MutuallyExclusiveArgumentError(
"Cannot specify --enable-snapshot_controller and "
"--disable-snapshot_controller at the same time."
)

if self.decorator_mode == DecoratorMode.CREATE:
if disable_snapshot_controller:
profile.enabled = False
else:
profile.enabled = True

if self.decorator_mode == DecoratorMode.UPDATE:
if enable_snapshot_controller:
profile.enabled = True
elif disable_snapshot_controller:
profile.enabled = False

return profile

def get_storage_profile(self) -> Optional[ManagedClusterStorageProfile]:
"""Obtrain the value of storage_profile.

:return: Optional[ManagedClusterStorageProfile]
"""
profile = self.models.ManagedClusterStorageProfile()
if self.mc.storage_profile is not None:
profile = self.mc.storage_profile
profile.disk_csi_driver = self.get_disk_driver()
profile.file_csi_driver = self.get_file_driver()
profile.snapshot_controller = self.get_snapshot_controller()

return profile

def get_oidc_issuer_profile(self) -> ManagedClusterOIDCIssuerProfile:
"""Obtain the value of oidc_issuer_profile based on the user input.

Expand Down Expand Up @@ -2169,6 +2294,14 @@ def set_up_windows_profile(self, mc: ManagedCluster) -> ManagedCluster:
mc.windows_profile = windows_profile
return mc

def set_up_storage_profile(self, mc: ManagedCluster) -> ManagedCluster:
"""Set up storage profile for the ManagedCluster object.
:return: the ManagedCluster object
"""
mc.storage_profile = self.context.get_storage_profile()

return mc

def set_up_oidc_issuer_profile(self, mc: ManagedCluster) -> ManagedCluster:
"""Set up OIDC issuer profile for the ManagedCluster object.

Expand Down Expand Up @@ -2242,6 +2375,9 @@ def construct_mc_preview_profile(self) -> ManagedCluster:

mc = self.set_up_azure_keyvault_kms(mc)
mc = self.set_up_creationdata_of_cluster_snapshot(mc)

mc = self.set_up_storage_profile(mc)

return mc

def create_mc_preview(self, mc: ManagedCluster) -> ManagedCluster:
Expand Down Expand Up @@ -2398,6 +2534,12 @@ def check_raw_parameters(self):
'"--nodepool-labels" or '
'"--enable-oidc-issuer" or '
'"--http-proxy-config" or '
'"--enable-disk-driver" or '
'"--disable-disk-driver" or '
'"--enable-file-driver" or '
'"--disable-file-driver" or '
'"--enable-snapshot-controller" or '
'"--disable-snapshot-controller" or '
'"--enable-azure-keyvault-kms" or '
'"--enable-workload-identity" or '
'"--disable-workload-identity".'
Expand Down Expand Up @@ -2576,6 +2718,17 @@ def update_azure_keyvault_kms(self, mc: ManagedCluster) -> ManagedCluster:

return mc

def update_storage_profile(self, mc: ManagedCluster) -> ManagedCluster:
"""Update storage profile for the ManagedCluster object.

:return: the ManagedCluster object
"""
self._ensure_mc(mc)

mc.storage_profile = self.context.get_storage_profile()

return mc

def update_identity_profile(self, mc: ManagedCluster) -> ManagedCluster:
"""Update identity profile for the ManagedCluster object.

Expand Down Expand Up @@ -2644,6 +2797,8 @@ def update_mc_preview_profile(self) -> ManagedCluster:
# update identity profile
mc = self.update_identity_profile(mc)

mc = self.update_storage_profile(mc)

return mc

def update_mc_preview(self, mc: ManagedCluster) -> ManagedCluster:
Expand Down
Loading