Source code for runhouse.resources.secrets.provider_secrets.azure_secret

import configparser
import copy
import os

from typing import Dict

from runhouse.resources.secrets.provider_secrets.provider_secret import ProviderSecret
from runhouse.resources.secrets.utils import _check_file_for_mismatches
from runhouse.utils import create_local_dir


[docs]class AzureSecret(ProviderSecret): """ .. note:: To create an AzureSecret, please use the factory method :func:`provider_secret` with ``provider="azure"``. """ # values format: {"subscription_id": subscription_id} _PROVIDER = "azure" _DEFAULT_CREDENTIALS_PATH = "~/.azure/clouds.config" _DEFAULT_ENV_VARS = {"subscription_id": "AZURE_SUBSCRIPTION_ID"} @staticmethod def from_config(config: dict, dryrun: bool = False, _resolve_children: bool = True): return AzureSecret(**config, dryrun=dryrun) def _write_to_file( self, path: str = None, values: Dict = None, overwrite: bool = False, write_config: bool = True, ): new_secret = copy.deepcopy(self) if not _check_file_for_mismatches( path, self._from_path(path), values, overwrite ): subscription_id = values["subscription_id"] parser = configparser.ConfigParser() section_name = "AzureCloud" parser.add_section(section_name) parser.set( section=section_name, option="subscription", value=subscription_id, ) full_path = create_local_dir(path) with open(full_path, "w") as f: parser.write(f) if write_config: new_secret._add_to_rh_config(path) new_secret._values = None new_secret.path = path return new_secret def _from_path(self, path: str = None): config = configparser.ConfigParser() if path and os.path.exists(os.path.expanduser(path)): path = os.path.expanduser(path) config.read(path) if config and "AzureCloud" in config.sections(): subscription_id = config["AzureCloud"]["subscription"] return {"subscription_id": subscription_id} return {}