Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
3cc8452
Kubernetes Data Protection Extension CLI (#173)
Miraj50 Aug 25, 2022
6c56613
{AKS - ARC} fix: Update DCR creation to Clusters resource group inste…
bragi92 Sep 28, 2022
083ed6d
Add self-signed cert to fix PR gate for azureml extension
Sep 27, 2022
0a6208d
adding the api version to the operation definition in the client factory
Sep 29, 2022
2121a2e
Merge pull request #181 from AzureArcForKubernetes/deesharma/exttypes
deeksha345 Sep 29, 2022
9c6835c
bump k8s-extension version to 1.3.6
Sep 29, 2022
1aaef92
Merge pull request #182 from AzureArcForKubernetes/release-1.3.6
deeksha345 Sep 29, 2022
700bee5
adding tests for all 4 extension types calls
Sep 30, 2022
efd86d4
adding to test config file
Sep 30, 2022
8dcef49
updating the api version for extension types to be the correct versio…
Sep 30, 2022
2ecb63a
add test case for flux extension (#184)
bavneetsingh16 Oct 3, 2022
f1c9348
Merge branch 'k8s-extension/public' into deesharma/exttypestests
deeksha345 Oct 5, 2022
5c57791
Merge pull request #183 from AzureArcForKubernetes/deesharma/exttypes…
deeksha345 Oct 5, 2022
84dcc92
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Oct 5, 2022
4ae3aa6
bump k8s-extension version to 1.3.6
Oct 5, 2022
0213a71
bump k8s-extension version to 1.3.6
Oct 6, 2022
a2a8be4
Merge pull request #186 from AzureArcForKubernetes/release-1.3.6
deeksha345 Oct 6, 2022
ef3e79f
adding upstream test for extension types
Oct 17, 2022
eeadb2b
Merge pull request #189 from AzureArcForKubernetes/deesharma/addingex…
deeksha345 Oct 17, 2022
0378ecf
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Oct 17, 2022
929928f
updating history.rst
Oct 17, 2022
374edcf
Merge pull request #190 from AzureArcForKubernetes/release-1.3.6
deeksha345 Oct 18, 2022
5b6b4dc
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Oct 18, 2022
e95cd6e
Merge branch 'k8s-extension/public' into release-1.3.6
Oct 18, 2022
477613d
Merge pull request #191 from AzureArcForKubernetes/release-1.3.6
deeksha345 Oct 18, 2022
cbd30bf
[Dapr] Prompt user for existing Dapr installation during extension cr…
shubham1172 Nov 10, 2022
5d8592e
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
Nov 15, 2022
155fb01
bump k8s-extension version to 1.3.7
Nov 15, 2022
0d74a15
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
Nov 16, 2022
c88e8ef
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
Nov 18, 2022
464cca7
Merge pull request #196 from AzureArcForKubernetes/release-1.3.7
bavneetsingh16 Nov 18, 2022
0487616
[Dapr] Disable applying CRDs during a downgrade (#193)
shubham1172 Nov 28, 2022
d54d6ab
ContainerInsights extension - Add dataCollectionSettings configurati…
ganga1980 Dec 2, 2022
b2f1319
Upgrade Python version from 3.6 to 3.7 (#203)
NarayanThiru Dec 15, 2022
ee8a070
[Dapr] Do not apply CRD hook when version is unchanged or auto-upgrad…
shubham1172 Dec 16, 2022
e054268
add dummy key for amalogs as well
Dec 29, 2022
4a6fcdb
Merge branch 'k8s-extension/public' into user/amagraw/fix-bug/rename
pfrcks Dec 30, 2022
9b65294
Merge pull request #207 from pfrcks/user/amagraw/fix-bug/rename
deeksha345 Dec 30, 2022
887661d
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Jan 12, 2023
beffb3f
bump k8s-extension version to 1.3.8
Jan 12, 2023
f6e39ca
Merge branch 'k8s-extension/public' into release-1.3.8
deeksha345 Jan 12, 2023
6015026
Adding GA api version 2022-11-01 exposing isSystemExtension and suppo…
Nov 18, 2022
97c808f
Seperate args for plan name, product and publisher
Dec 13, 2022
d35686c
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Jan 13, 2023
c6d351f
Merge branch 'release-1.3.8' of https://github.com/AzureArcForKuberne…
Jan 13, 2023
0cd6017
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Jan 18, 2023
1b51c5e
updating cassete file
Jan 12, 2023
c1f8614
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Jan 19, 2023
2ff27e9
Merge pull request #199 from AzureArcForKubernetes/ariflakhani/2022-1…
Arif-lakhani Jan 20, 2023
e10938b
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Jan 23, 2023
2fb41e7
Merge branch 'k8s-extension/public' into release-1.3.8
deeksha345 Jan 23, 2023
8a48eea
updating HISTORY.rst
Jan 23, 2023
601d4c7
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Jan 23, 2023
8319907
Merge pull request #209 from AzureArcForKubernetes/release-1.3.8
deeksha345 Jan 23, 2023
942738f
Deprecate longer parameter names when accepting config settings (#213)
Arif-lakhani Jan 31, 2023
f122f93
merge from upstream branch
Jan 31, 2023
9aa7d3d
Release 1.3.9
Jan 31, 2023
398f140
Merge pull request #214 from AzureArcForKubernetes/release/1.3.9
Arif-lakhani Jan 31, 2023
2473565
make containerinsights dcr name consistent (#211)
ganga1980 Feb 2, 2023
0845f61
[Dapr] Update version comparison logic to use semver based comparison…
shubham1172 Feb 17, 2023
ffb8a95
bump k8s-extension version to 1.4.0 (#220)
bavneetsingh16 Feb 17, 2023
c957325
Revert "bump k8s-extension version to 1.4.0 (#220)" (#222)
bavneetsingh16 Feb 17, 2023
9c0c41a
Merge branch 'main' of github.com:Azure/azure-cli-extensions into new…
Feb 18, 2023
de4f530
[k8s-extension] Update extension CLI to v1.4.0
Feb 18, 2023
e67bfda
Merge pull request #223 from AzureArcForKubernetes/new_release
bavneetsingh16 Feb 18, 2023
b0ee4c2
sync with upstream cli repo
Mar 22, 2023
4ced5e8
update release history
Mar 22, 2023
f30b5c9
fix openservice mesh cli testcase issue
Mar 22, 2023
03d9b63
Merge pull request #225 from AzureArcForKubernetes/sync_cli_upstream
bavneetsingh16 Mar 22, 2023
e09dcc6
Zetia/fix ssl secret flag (#224)
zetiaatgithub Mar 22, 2023
db556d2
feat: public preview support for microsoft.azuremonitor.containers.me…
bragi92 May 19, 2023
87a25a8
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
May 19, 2023
3a154e9
Merge pull request #229 from AzureArcForKubernetes/release-1.4.1
bavneetsingh16 May 20, 2023
4f2b74c
remove redundant extension test (#230)
bavneetsingh16 May 20, 2023
6e583a9
ci MSI default for arc cluster (#231)
wanlonghenry May 31, 2023
b295046
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
Jun 23, 2023
029ce31
bump k8s-extension version to 1.4.2
Jun 23, 2023
30a373b
Merge pull request #235 from AzureArcForKubernetes/release-1.4.2
bavneetsingh16 Jun 23, 2023
dfd1139
ContainerInsights extension - Extend dataCollectionSettings config se…
ganga1980 Jun 30, 2023
a33424b
Generated files for 2023-05-01-preview
Jun 30, 2023
a7fa6eb
Support for 2023-05-01-preview
Jul 5, 2023
290f24c
Rename get to show
Jul 5, 2023
4f6da18
Added ExtensionType api test cases
Jul 17, 2023
5ff7d66
ContainerInsights extension - Extend dataCollectionSettings with cont…
wanlonghenry Jul 18, 2023
57679f8
Fix for Liniting issues
Jul 19, 2023
9beb747
Fixing test cases
Jul 19, 2023
1f7b9ce
comment failing test cases
Jul 24, 2023
42d8b15
[k8s-extension] add kind tag in DCR creation (#240)
wanlonghenry Jul 25, 2023
e9aebbc
Use semver package (#241)
shubham1172 Jul 28, 2023
e36dfad
bump k8s-extension version to 1.4.3
Jul 28, 2023
2561f35
Merge pull request #243 from AzureArcForKubernetes/release-1.4.3
bavneetsingh16 Jul 28, 2023
3a2d4a8
Reverting commented test cases
Jul 25, 2023
4fa705d
Add support to skip provisioning of prerequisites for Azure Monitor K…
ms-hujia Aug 1, 2023
980d53b
{ARC} fix: update logic to sanitize cluster name for dc* objects (#242)
bragi92 Aug 1, 2023
29f1210
Fix osm-arc version check for CI tags (#244)
nshankar13 Aug 2, 2023
f230c8e
New cassette file
Aug 3, 2023
5091eaa
Remove unused propeties from table format
Aug 3, 2023
c2ac205
Merge branch 'k8s-extension/public' into arif/2021_05_01_preview
Arif-lakhani Aug 3, 2023
a122362
Merge pull request #236 from AzureArcForKubernetes/arif/2021_05_01_pr…
Arif-lakhani Aug 10, 2023
740fa4d
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
Aug 11, 2023
5ac1d97
bump k8s-extension version 1.4.3
Aug 11, 2023
e1250ee
Merge pull request #246 from AzureArcForKubernetes/release-new-1.4.3
bavneetsingh16 Aug 11, 2023
8df0be1
Add old commands back with deprecated status
Aug 11, 2023
aebbef4
Fix linting issues
Aug 14, 2023
a74f76d
Merge pull request #247 from AzureArcForKubernetes/ariflakhani/deprecate
Arif-lakhani Aug 14, 2023
9f8159c
Reverting changes for extensions type api
Aug 22, 2023
7166e84
change the location for test runs and arc clusters
Aug 23, 2023
6be2701
Merge pull request #249 from AzureArcForKubernetes/revertextensionstype
Arif-lakhani Aug 23, 2023
584815d
[k8s-extension] create new cli release - v1.4.3 (#250)
bavneetsingh16 Aug 23, 2023
aa77ff2
Revert "[k8s-extension] create new cli release - v1.4.3 (#250)" (#251)
bavneetsingh16 Aug 23, 2023
7944db5
Merge branch 'main' of github.com:Azure/azure-cli-extensions into new…
Aug 23, 2023
96beb6f
[k8s-extension] Update extension CLI to v1.4.3
Aug 23, 2023
b79d107
Merge pull request #253 from AzureArcForKubernetes/new_cli-1.4.3
bavneetsingh16 Aug 24, 2023
7786f2a
Drop relay sdk (#254)
necusjz Sep 1, 2023
af2d1b9
bump k8s-extension version to 1.4.4
Sep 1, 2023
ef01ddd
update readme
Sep 1, 2023
35d9eba
Merge pull request #255 from AzureArcForKubernetes/release-1.4.4
bavneetsingh16 Sep 1, 2023
2c4c1de
remove useless snippets (#256)
necusjz Sep 2, 2023
1fef154
Add generated files for 2023-05-01
Sep 18, 2023
9902d52
Update extensionsType api to 2023-05-01-preview
Sep 18, 2023
a64f0e4
Merge pull request #258 from AzureArcForKubernetes/2023-05-01
Arif-lakhani Sep 18, 2023
bf020ff
Update OSM-Arc version check for beta and CI tags (#257)
nshankar13 Sep 19, 2023
c4adf5f
Merge branch 'main' of github.com:Azure/azure-cli-extensions into rel…
Sep 19, 2023
57db317
bump k8s-extension version to 1.5.0
Sep 19, 2023
5268aa9
Merge pull request #259 from AzureArcForKubernetes/release-1.4.6
bavneetsingh16 Sep 20, 2023
6adb8f6
add deprecated params for extension types
Sep 20, 2023
259feec
Merge pull request #260 from AzureArcForKubernetes/DeprecatedParams
Arif-lakhani Sep 20, 2023
cb846e7
Add breaking change details to the history
Sep 25, 2023
1575dbf
Merge pull request #261 from AzureArcForKubernetes/DeprecatedParams
Arif-lakhani Sep 25, 2023
41f9f93
use the recomended param for flag
Sep 27, 2023
29ad71d
Merge pull request #262 from AzureArcForKubernetes/DeprecatedParams
Arif-lakhani Sep 27, 2023
40fd25d
Add WorkloadIAM extension support and tests (#265)
AntonioND Dec 8, 2023
fdbcb63
bump k8s-extension version to 1.5.3
Dec 8, 2023
59b6885
update readme and cli version
Dec 8, 2023
2ac9710
Merge pull request #266 from AzureArcForKubernetes/release-1.5.3
bavneetsingh16 Dec 8, 2023
47609b9
Fix failing extensionType test (#270)
bavneetsingh16 Jan 17, 2024
c4aa705
[k8s-extension] Make containerlogv2 as default as true and remove reg…
wanlonghenry Jan 18, 2024
cede7cd
AAD related changes in dataprotection aks ext CLI (#263)
anshulahuja98 Jan 22, 2024
c120bc0
microsoft.workloadiam: Refactor subcommand invocation
AntonioND Dec 15, 2023
e444147
microsoft.workloadiam: Check length of extension instance name
AntonioND Jan 23, 2024
2dcf955
Merge pull request #267 from AntonioND/anninodi/cmd
Arif-lakhani Jan 23, 2024
51ac427
bump k8s-extension version to v1.5.4
Jan 23, 2024
3687c09
Merge pull request #271 from AzureArcForKubernetes/release-1.5.4
bavneetsingh16 Jan 23, 2024
0520b5a
Minor fixes to dataprotection extension
anshulahuja98 Mar 5, 2024
a700f33
fix typo
anshulahuja98 Mar 5, 2024
e9b42f3
sync with upstream
Mar 7, 2024
2e94244
test new linter
Mar 7, 2024
f21fd13
test new linter2
Mar 7, 2024
e028bd4
test new linter3
Mar 7, 2024
083e431
disable static analysis
Mar 8, 2024
2123dd1
linter4
Mar 8, 2024
7d45a7e
remove static analysis
Mar 8, 2024
3a40ecc
Merge pull request #275 from AzureArcForKubernetes/syncupstream2
Arif-lakhani Mar 8, 2024
d60f057
Merge branch 'k8s-extension/public' into dp_bugfixes
Arif-lakhani Mar 8, 2024
06c21d2
Rename WorkloadIAM to EntraWorkloadIAM
AntonioND Feb 6, 2024
02e9f06
Merge pull request #273 from AntonioND/anninodi/name
Arif-lakhani Mar 8, 2024
e246cc0
Merge branch 'k8s-extension/public' into dp_bugfixes
Arif-lakhani Mar 8, 2024
30533c5
Merge pull request #274 from anshulahuja98/dp_bugfixes
Arif-lakhani Mar 8, 2024
6a59c63
Merge branch 'main' of https://github.com/Azure/azure-cli-extensions …
Mar 8, 2024
9dc92bf
bump k8s-extension version to 1.6.1
Mar 8, 2024
b66727b
Merge pull request #276 from AzureArcForKubernetes/k8s-extension/rele…
Arif-lakhani Mar 9, 2024
ac52d16
update CI tests (#283)
bavneetsingh16 Aug 27, 2024
6a83e5b
[EntraWorkloadIAM] Use config protected settings (#280)
AntonioND Aug 27, 2024
e6e9f4b
feat: Add support for all clouds except air gapped for microsoft.azur…
bragi92 Sep 4, 2024
1871416
drop dependency on msrestazure
Oct 15, 2024
dd153b7
drop dependency on msrestazure (#285)
bavneetsingh16 Oct 15, 2024
5c2cf17
Merge branch 'k8s-extension/public' of https://github.com/AzureArcFor…
Oct 15, 2024
5d7cf74
merge upstream changes
Oct 15, 2024
4b4f220
update k8s-extension version and release notes
Oct 15, 2024
86b187b
Merge pull request #286 from AzureArcForKubernetes/upstream_changes
bavneetsingh16 Oct 15, 2024
79863aa
pull upstream changes
Mar 10, 2025
682c689
fix failing test cases in the pipeline
Mar 10, 2025
15d6c30
Merge pull request #291 from AzureArcForKubernetes/pull_upstream_changes
bavneetsingh16 Mar 10, 2025
bb6d4b2
[DataProtection] Strip user input, add provision for updating resourc…
Miraj50 Mar 10, 2025
c46e477
fix: update default region for azure monitor metrics extension in moo…
bragi92 Mar 10, 2025
3e18402
Update setup.py
bragi92 May 12, 2025
89a3e8e
Update HISTORY.rst
bragi92 May 12, 2025
64ae134
Update delete.py
bragi92 May 12, 2025
aba418e
Update create.py
bragi92 May 12, 2025
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
7 changes: 7 additions & 0 deletions src/k8s-extension/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

Release History
===============
1.6.5
++++++++++++++++++
* microsoft.azuremonitor.containers.metrics: fix: simplify logic and enable correct recording rule groups for managed prom

1.6.4
++++++++++++++++++
* microsoft.azuremonitor.containers.metrics: Update default region for azure monitor metrics extension in mooncake

1.6.3
++++++++++++++++++
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from azure.cli.core.azclierror import RequiredArgumentMissingError, InvalidArgumentValueError

from .DefaultExtension import DefaultExtension
from .._client_factory import cf_storage, cf_managed_clusters
from .._client_factory import cf_managed_clusters
from ..vendored_sdks.models import (Extension, PatchExtension, Scope, ScopeCluster)

logger = get_logger(__name__)
Expand All @@ -20,13 +20,16 @@ def __init__(self):
"""Constants for configuration settings
- Tenant Id (required)
- Backup storage location (required)
- Resource Requests (optional)
- Resource Limits (optional)
"""
self.TENANT_ID = "credentials.tenantId"
self.BACKUP_STORAGE_ACCOUNT_CONTAINER = "configuration.backupStorageLocation.bucket"
self.BACKUP_STORAGE_ACCOUNT_NAME = "configuration.backupStorageLocation.config.storageAccount"
self.BACKUP_STORAGE_ACCOUNT_RESOURCE_GROUP = "configuration.backupStorageLocation.config.resourceGroup"
self.BACKUP_STORAGE_ACCOUNT_SUBSCRIPTION = "configuration.backupStorageLocation.config.subscriptionId"
self.RESOURCE_REQUEST_CPU = "resources.requests.cpu"
self.RESOURCE_REQUEST_MEMORY = "resources.requests.memory"
self.RESOURCE_LIMIT_CPU = "resources.limits.cpu"
self.RESOURCE_LIMIT_MEMORY = "resources.limits.memory"
self.BACKUP_STORAGE_ACCOUNT_USE_AAD = "configuration.backupStorageLocation.config.useAAD"
Expand All @@ -36,6 +39,8 @@ def __init__(self):
self.storage_account = "storageAccount"
self.storage_account_resource_group = "storageAccountResourceGroup"
self.storage_account_subscription = "storageAccountSubscriptionId"
self.cpu_request = "cpuRequest"
self.memory_request = "memoryRequest"
self.cpu_limit = "cpuLimit"
self.memory_limit = "memoryLimit"
self.use_aad = "useAAD"
Expand All @@ -46,6 +51,8 @@ def __init__(self):
self.storage_account.lower(): self.BACKUP_STORAGE_ACCOUNT_NAME,
self.storage_account_resource_group.lower(): self.BACKUP_STORAGE_ACCOUNT_RESOURCE_GROUP,
self.storage_account_subscription.lower(): self.BACKUP_STORAGE_ACCOUNT_SUBSCRIPTION,
self.cpu_request.lower(): self.RESOURCE_REQUEST_CPU,
self.memory_request.lower(): self.RESOURCE_REQUEST_MEMORY,
self.cpu_limit.lower(): self.RESOURCE_LIMIT_CPU,
self.memory_limit.lower(): self.RESOURCE_LIMIT_MEMORY,
self.use_aad.lower(): self.BACKUP_STORAGE_ACCOUNT_USE_AAD,
Expand Down Expand Up @@ -83,7 +90,7 @@ def Create(
plan_publisher,
plan_product,
):
# Current scope of DataProtection Kubernetes Backup extension is 'cluster' #TODO: add TSGs when they are in place
# Current scope of DataProtection extension is 'cluster' #TODO: add TSGs when they are in place
if scope == 'namespace':
raise InvalidArgumentValueError(f"Invalid scope '{scope}'. This extension can only be installed at 'cluster' scope.")

Expand All @@ -106,7 +113,7 @@ def Create(
configuration_settings[self.TENANT_ID] = tenant_id

if configuration_settings.get(self.BACKUP_STORAGE_ACCOUNT_USE_AAD) is None:
logger.warning("useAAD flag is not specified. Setting it to 'true'. Please provide extension MSI Storage Blob Data Contributor role to the storage account.")
logger.warning("useAAD flag is not specified. Setting it to 'true'. Please provide extension MSI Storage Blob Data Contributor role on the storage account.")
configuration_settings[self.BACKUP_STORAGE_ACCOUNT_USE_AAD] = "true"

if configuration_settings.get(self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI) is None:
Expand Down Expand Up @@ -149,18 +156,20 @@ def Update(
self.__validate_and_map_config(configuration_settings, validate_bsl=bsl_specified)
if bsl_specified:
self.__validate_backup_storage_account(cmd.cli_ctx, resource_group_name, cluster_name, configuration_settings)
# this step is for brownfield migrating to AAD

# This step is for brownfield migrating to AAD
if configuration_settings.get(self.BACKUP_STORAGE_ACCOUNT_USE_AAD) is not None and configuration_settings.get(self.BACKUP_STORAGE_ACCOUNT_USE_AAD).lower() == "true":
logger.warning("useAAD flag is set to true. Please provide extension MSI Storage Blob Data Contributor role to the storage account.")
logger.warning("useAAD flag is set to true. Please provide extension MSI Storage Blob Data Contributor role on the storage account.")

if configuration_settings.get(self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI) is None:
# SA details provided in user inputs, but did not provide SA URI.
logger.warning("storageAccountURI is not populated. Setting it to the storage account URI of provided storage account")
# SA details provided in user input, but did not provide SA URI.
if bsl_specified:
logger.warning("storageAccountURI is not populated. Setting it to the storage account URI of provided storage account.")
configuration_settings[self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI] = self.__get_storage_account_uri(cmd.cli_ctx, configuration_settings)
logger.warning(f"storageAccountURI: {configuration_settings[self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI]}")
# SA details not provided in user input, SA Uri not provided in user input, and also not populated in the original extension, we populate it.
elif not bsl_specified and original_extension.configuration_settings.get(self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI) is None:
logger.warning("storageAccountURI is not populated. Setting it to the storage account URI of the storage account provided during extension installation.")
configuration_settings[self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI] = self.__get_storage_account_uri(cmd.cli_ctx, original_extension.configuration_settings)
logger.warning(f"storageAccountURI: {configuration_settings[self.BACKUP_STORAGE_ACCOUNT_STORAGE_ACCOUNT_URI]}")

Expand All @@ -177,7 +186,7 @@ def __get_tenant_id(self, cli_ctx):
return cli_ctx.data['tenant_id']

def __validate_and_map_config(self, configuration_settings, validate_bsl=True):
"""Validate and set configuration settings for Data Protection K8sBackup extension"""
"""Validate and set configuration settings for DataProtection extension"""
input_configuration_settings = dict(configuration_settings.items())
input_configuration_keys = [key.lower() for key in configuration_settings]

Expand All @@ -189,14 +198,14 @@ def __validate_and_map_config(self, configuration_settings, validate_bsl=True):
for key in input_configuration_settings:
_key = key.lower()
if _key in self.configuration_mapping:
configuration_settings[self.configuration_mapping[_key]] = configuration_settings.pop(key)
configuration_settings[self.configuration_mapping[_key]] = configuration_settings.pop(key).strip()
else:
configuration_settings.pop(key)
logger.warning(f"Ignoring unrecognized configuration setting: {key}")

def __validate_backup_storage_account(self, cli_ctx, resource_group_name, cluster_name, configuration_settings):
"""Validations performed on the backup storage account
- Existance of the storage account
- Existence of the storage account
- Cluster and storage account are in the same location
"""
storage_account = self.__get_storage_account(cli_ctx, configuration_settings)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,25 @@
CONFIG_SETTINGS_HELM_TENANT_ID = 'global.workload-iam.tenantID'
CONFIG_SETTINGS_HELM_JOIN_TOKEN = 'workload-iam-local-authority.localAuthorityArgs.joinToken'

def settings_dict_to_lowercase(settings):
"""
Create new dictionary where the keys of the known user settings are all lowercase (but leave the
others as they were in case they are specific settings that have to be passed to the Helm chart).
"""
all_user_settings = [CONFIG_SETTINGS_USER_TRUST_DOMAIN, CONFIG_SETTINGS_USER_TENANT_ID,
CONFIG_SETTINGS_USER_LOCAL_AUTHORITY, CONFIG_SETTINGS_USER_JOIN_TOKEN]

if settings is None:
return dict()

validated_settings = dict()
for key, value in settings.items():
if key.lower() in all_user_settings:
validated_settings[key.lower()] = value
else:
validated_settings[key] = value

return validated_settings

def settings_dict_to_lowercase(settings):
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
def get_default_region(cmd):
cloud_name = cmd.cli_ctx.cloud.name
if cloud_name.lower() == 'azurechinacloud':
raise CLIError("Azure China Cloud is not supported for the Azure Monitor Metrics addon")
return "chinanorth3"
if cloud_name.lower() == 'azureusgovernment':
return "usgovvirginia"
return "eastus"
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import json
from ..constants import ALERTS_API, RULES_API
from knack.util import CLIError
from ..constants import ALERTS_API, RULES_API
from azure.cli.command_modules.acs.azuremonitormetrics.recordingrules.common import truncate_rule_group_name


# pylint: disable=line-too-long
Expand All @@ -15,7 +16,18 @@ def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id):
url = f"{armendpoint}{azure_monitor_workspace_resource_id}/providers/microsoft.alertsManagement/alertRuleRecommendations?api-version={ALERTS_API}"
r = send_raw_request(cmd.cli_ctx, "GET", url, headers=headers)
data = json.loads(r.text)
return data['value']

filtered_templates = [
template for template in data.get('value', [])
if template.get("properties", {}).get("alertRuleType", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups" and isinstance(template.get("properties", {}).get("rulesArmTemplate", {}).get("resources"), list) and all(
isinstance(rule, dict) and "record" in rule and "expression" in rule
for resource in template["properties"]["rulesArmTemplate"]["resources"]
if resource.get("type", "").lower() == "microsoft.alertsmanagement/prometheusrulegroups"
for rule in resource.get("properties", {}).get("rules", [])
)
]

return filtered_templates


# pylint: disable=line-too-long
Expand All @@ -39,8 +51,7 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a
for _ in range(3):
try:
headers = ['User-Agent=arc-azuremonitormetrics.put_rules.' + default_rule_group_name]
send_raw_request(cmd.cli_ctx, "PUT", url,
body=body, headers=headers)
send_raw_request(cmd.cli_ctx, "PUT", url, body=body, headers=headers)
break
except CLIError as e:
error = e
Expand All @@ -49,30 +60,30 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a


# pylint: disable=line-too-long
def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region):
def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region, raw_parameters):
default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id)
default_rule_group_name = "NodeRecordingRulesRuleGroup-{0}".format(cluster_name)
default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format(
cluster_subscription,
cluster_resource_group_name,
default_rule_group_name
)
url = "{0}{1}?api-version={2}".format(
cmd.cli_ctx.cloud.endpoints.resource_manager,
default_rule_group_id,
RULES_API
)
put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 0)

default_rule_group_name = "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name)
default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format(
cluster_subscription,
cluster_resource_group_name,
default_rule_group_name
)
url = "{0}{1}?api-version={2}".format(
cmd.cli_ctx.cloud.endpoints.resource_manager,
default_rule_group_id,
RULES_API
)
put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 1)
enable_windows_recording_rules = raw_parameters.get("enable_windows_recording_rules", False)

for index, rule_template in enumerate(default_rules_template):
rule_name = rule_template["name"]
is_windows_rule = "win" in rule_name.lower()

enable_rules = not (is_windows_rule and not enable_windows_recording_rules)

rule_group_name = truncate_rule_group_name(f"{rule_template['name']}-{cluster_name}")
rule_group_id = f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{rule_group_name}"
url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{rule_group_id}?api-version={RULES_API}"

put_rules(
cmd,
rule_group_id,
rule_group_name,
mac_region,
azure_monitor_workspace_resource_id,
cluster_name,
default_rules_template,
url,
enable_rules,
index
)
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,9 @@ def delete_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster
cluster_resource_group_name,
"KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name)
)
delete_rule(
cmd,
cluster_subscription,
cluster_resource_group_name,
truncate_rule_group_name("UXRecordingRulesRuleGroup - {0}".format(cluster_name))
)
2 changes: 1 addition & 1 deletion src/k8s-extension/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
# TODO: Add any additional SDK dependencies here
DEPENDENCIES = []

VERSION = "1.6.3"
VERSION = "1.6.5"

with open("README.rst", "r", encoding="utf-8") as f:
README = f.read()
Expand Down
9 changes: 9 additions & 0 deletions testing/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
settings.json
tmp/
bin/*
!bin/connectedk8s-1.0.0-py3-none-any.whl
!bin/k8s_extension-0.4.0-py3-none-any.whl
!bin/k8s_extension_private-0.1.0-py3-none-any.whl
!bin/k8s_configuration-1.0.0-py3-none-any.whl
!bin/connectedk8s-values.yaml
*.xml
80 changes: 80 additions & 0 deletions testing/Bootstrap.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
param (
[switch] $SkipInstall,
[switch] $CI
)

# Disable confirm prompt for script
az config set core.disable_confirm_prompt=true

# Configuring the environment
$ENVCONFIG = Get-Content -Path $PSScriptRoot/settings.json | ConvertFrom-Json

az account set --subscription $ENVCONFIG.subscriptionId

if (-not (Test-Path -Path $PSScriptRoot/tmp)) {
New-Item -ItemType Directory -Path $PSScriptRoot/tmp
}

if (!$SkipInstall) {
Write-Host "Removing the old connnectedk8s extension..."
az extension remove -n connectedk8s
Write-Host "Installing connectedk8s..."
az extension add -n connectedk8s
if (!$?) {
Write-Host "Unable to install connectedk8s, exiting..."
exit 1
}
}

Write-Host "Onboard cluster to Azure...starting!"

az group show --name $envConfig.resourceGroup
if (!$?) {
Write-Host "Resource group does not exist, creating it now in region 'eastus2euap'"
az group create --name $envConfig.resourceGroup --location eastus2euap

if (!$?) {
Write-Host "Failed to create Resource Group - exiting!"
Exit 1
}
}

# Skip creating the AKS Cluster if this is CI
if (!$CI) {
az aks show -g $ENVCONFIG.resourceGroup -n $ENVCONFIG.aksClusterName
if (!$?) {
Write-Host "Cluster does not exist, creating it now"
az aks create -g $ENVCONFIG.resourceGroup -n $ENVCONFIG.aksClusterName --generate-ssh-keys
} else {
Write-Host "Cluster already exists, no need to create it."
}

Write-Host "Retrieving credentials for your AKS cluster..."

az aks get-credentials -g $ENVCONFIG.resourceGroup -n $ENVCONFIG.aksClusterName -f tmp/KUBECONFIG
if (!$?)
{
Write-Host "Cluster did not create successfully, exiting!" -ForegroundColor Red
Exit 1
}
Write-Host "Successfully retrieved the AKS kubectl credentials"
} else {
Copy-Item $HOME/.kube/config -Destination $PSScriptRoot/tmp/KUBECONFIG
}

az connectedk8s show -g $ENVCONFIG.resourceGroup -n $ENVCONFIG.arcClusterName
if ($?)
{
Write-Host "Cluster is already connected, no need to re-connect"
Exit 0
}

Write-Host "Connecting the cluster to Arc with connectedk8s..."
$Env:KUBECONFIG="$PSScriptRoot/tmp/KUBECONFIG"
az connectedk8s connect -g $ENVCONFIG.resourceGroup -n $ENVCONFIG.arcClusterName -l uksouth
if (!$?)
{
kubectl get pods -A
Exit 1
}
Write-Host "Successfully onboarded the cluster to Azure"
Loading
Loading