5465000567
Amp-Thread-ID: https://ampcode.com/threads/T-019d87a4-1a3f-74c7-a2a7-5a95af00505c Co-authored-by: Amp <amp@ampcode.com> Signed-off-by: Paul Meyer <katexochen0@gmail.com>
102 lines
4.4 KiB
Diff
102 lines
4.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Paul Meyer <49727155+katexochen@users.noreply.github.com>
|
|
Date: Thu, 14 Dec 2023 21:16:20 +0100
|
|
Subject: [PATCH] optional immutable configuration dir
|
|
|
|
Adding the possibility to configure an immutable configuration dir via
|
|
env variable `AZURE_IMMUTABLE_DIR`. This path is used for the files
|
|
that configure the dynamic behavior of the CLI code.
|
|
An immutable session is used for these files to ensure we don't try to
|
|
write to them.
|
|
|
|
Signed-off-by: Paul Meyer <49727155+katexochen@users.noreply.github.com>
|
|
---
|
|
azure/cli/core/__init__.py | 5 +++--
|
|
azure/cli/core/_session.py | 19 ++++++++++++++++---
|
|
.../cli/core/extension/dynamic_install.py | 3 ++-
|
|
3 files changed, 21 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/azure/cli/core/__init__.py b/azure/cli/core/__init__.py
|
|
index 33cdd4b8e37230efbce12fbc033370851893bb41..af9f8704c97cf7c5df24d3e08d910ded7aad4864 100644
|
|
--- a/azure/cli/core/__init__.py
|
|
+++ b/azure/cli/core/__init__.py
|
|
@@ -97,15 +97,16 @@ class AzCli(CLI):
|
|
self.data['query_active'] = False
|
|
|
|
azure_folder = self.config.config_dir
|
|
+ azure_immutable_folder = os.environ.get('AZURE_IMMUTABLE_DIR', azure_folder)
|
|
ensure_dir(azure_folder)
|
|
ACCOUNT.load(os.path.join(azure_folder, 'azureProfile.json'))
|
|
CONFIG.load(os.path.join(azure_folder, 'az.json'))
|
|
SESSION.load(os.path.join(azure_folder, 'az.sess'), max_age=3600)
|
|
- INDEX.load(os.path.join(azure_folder, 'commandIndex.json'))
|
|
+ INDEX.load(os.path.join(azure_immutable_folder, 'commandIndex.json'))
|
|
EXTENSION_INDEX.load(os.path.join(azure_folder, 'extensionIndex.json'))
|
|
HELP_INDEX.load(os.path.join(azure_folder, 'helpIndex.json'))
|
|
EXTENSION_HELP_INDEX.load(os.path.join(azure_folder, 'extensionHelpIndex.json'))
|
|
- VERSIONS.load(os.path.join(azure_folder, 'versionCheck.json'))
|
|
+ VERSIONS.load(os.path.join(azure_immutable_folder, 'versionCheck.json'))
|
|
handle_version_update()
|
|
|
|
self.cloud = get_active_cloud(self)
|
|
diff --git a/azure/cli/core/_session.py b/azure/cli/core/_session.py
|
|
index 294cc923f740b46712912d0bd235cfaf3efe8b95..406fdc42e451271b4da5285fe61339218c2d4fec 100644
|
|
--- a/azure/cli/core/_session.py
|
|
+++ b/azure/cli/core/_session.py
|
|
@@ -85,6 +85,19 @@ class Session(MutableMapping):
|
|
return len(self.data)
|
|
|
|
|
|
+class ImmutableSession(Session):
|
|
+ """
|
|
+ A session that is backed by an immutable JSON file. This session is read-only.
|
|
+ """
|
|
+ def save(self):
|
|
+ if os.getenv('AZURE_IMMUTABLE_DIR'):
|
|
+ get_logger(__name__).log(logging.DEBUG,
|
|
+ "Skipping update of file %s due to immutable directory.",
|
|
+ self.filename)
|
|
+ return
|
|
+ super().save()
|
|
+
|
|
+
|
|
# ACCOUNT contains subscriptions information
|
|
ACCOUNT = Session()
|
|
|
|
@@ -95,7 +108,7 @@ CONFIG = Session()
|
|
SESSION = Session()
|
|
|
|
# INDEX contains {top-level command: [command_modules and extensions]} mapping index
|
|
-INDEX = Session()
|
|
+INDEX = ImmutableSession()
|
|
|
|
# EXTENSION_INDEX contains top-level command mappings for installed extensions
|
|
EXTENSION_INDEX = Session()
|
|
@@ -110,10 +123,10 @@ EXTENSION_HELP_INDEX = Session()
|
|
# DO NOT USE it to get the current version of azure-cli,
|
|
# it could be lagged behind and can be used to check whether
|
|
# an upgrade of azure-cli happens
|
|
-VERSIONS = Session()
|
|
+VERSIONS = ImmutableSession()
|
|
|
|
# EXT_CMD_TREE provides command to extension name mapping
|
|
-EXT_CMD_TREE = Session()
|
|
+EXT_CMD_TREE = ImmutableSession()
|
|
|
|
# CLOUD_ENDPOINTS provides endpoints/suffixes of clouds
|
|
CLOUD_ENDPOINTS = Session()
|
|
diff --git a/azure/cli/core/extension/dynamic_install.py b/azure/cli/core/extension/dynamic_install.py
|
|
index fc35e5d197c47b6d278ea3870f29b06219713d98..adb6fbfc94281bdc142eafdd14c28161975665ca 100644
|
|
--- a/azure/cli/core/extension/dynamic_install.py
|
|
+++ b/azure/cli/core/extension/dynamic_install.py
|
|
@@ -17,7 +17,8 @@ def _get_extension_command_tree(cli_ctx):
|
|
VALID_SECOND = 3600 * 24 * 10
|
|
if not cli_ctx:
|
|
return None
|
|
- EXT_CMD_TREE.load(os.path.join(cli_ctx.config.config_dir, 'extensionCommandTree.json'), VALID_SECOND)
|
|
+ azure_immutable_folder = os.environ.get('AZURE_IMMUTABLE_DIR', cli_ctx.config.config_dir)
|
|
+ EXT_CMD_TREE.load(os.path.join(azure_immutable_folder, 'extensionCommandTree.json'), VALID_SECOND)
|
|
if not EXT_CMD_TREE.data:
|
|
import posixpath
|
|
import requests
|