def validate_client_parameters(namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace if not n.connection_string: n.connection_string = az_config.get('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict['AccountName'] n.account_key = conn_dict['AccountKey'] # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = az_config.get('storage', 'account', None) if not n.account_key: n.account_key = az_config.get('storage', 'key', None) if not n.sas_token: n.sas_token = az_config.get('storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: n.account_key = _query_account_key(n.account_name)
def validate_client_parameters(namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace if not n.connection_string: n.connection_string = az_config.get('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict['AccountName'] n.account_key = conn_dict['AccountKey'] # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = az_config.get('storage', 'account', None) if not n.account_key: n.account_key = az_config.get('storage', 'key', None) if not n.sas_token: n.sas_token = az_config.get('storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: n.account_key = _query_account_key(n.account_name)
def validate_client_parameters(namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace if not n.connection_string: n.connection_string = az_config.get('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict['AccountName'] n.account_key = conn_dict['AccountKey'] # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = az_config.get('storage', 'account', None) if not n.account_key: n.account_key = az_config.get('storage', 'key', None) if not n.sas_token: n.sas_token = az_config.get('storage', 'sas_token', None) # if account name is specified but no key, attempt to query if n.account_name and not n.account_key: scf = get_mgmt_service_client(StorageManagementClient) acc = next((x for x in scf.storage_accounts.list() if x.name == n.account_name), None) if acc: from azure.cli.core.commands.arm import parse_resource_id rg = parse_resource_id(acc.id)['resource_group'] n.account_key = \ scf.storage_accounts.list_keys(rg, n.account_name).keys[0].value # pylint: disable=no-member else: raise ValueError("Storage account '{}' not found.".format(n.account_name))
def validate_client_parameters(namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace if not n.connection_string: n.connection_string = az_config.get('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict['AccountName'] n.account_key = conn_dict['AccountKey'] # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = az_config.get('storage', 'account', None) if not n.account_key: n.account_key = az_config.get('storage', 'key', None) if not n.sas_token: n.sas_token = az_config.get('storage', 'sas_token', None) # if account name is specified but no key, attempt to query if n.account_name and not n.account_key: scf = get_mgmt_service_client(StorageManagementClient) acc = next((x for x in scf.storage_accounts.list() if x.name == n.account_name), None) if acc: from azure.cli.core.commands.arm import parse_resource_id rg = parse_resource_id(acc.id)['resource_group'] n.account_key = \ scf.storage_accounts.list_keys(rg, n.account_name).keys[0].value # pylint: disable=no-member else: raise ValueError("Storage account '{}' not found.".format(n.account_name))
def validate_client_parameters(cmd, namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace def get_config_value(section, key, default): return cmd.cli_ctx.config.get(section, key, default) if hasattr(n, 'auth_mode'): auth_mode = n.auth_mode or get_config_value('storage', 'auth_mode', None) del n.auth_mode if not n.account_name: n.account_name = get_config_value('storage', 'account', None) if auth_mode == 'login': n.token_credential = _create_token_credential(cmd.cli_ctx) # give warning if there are account key args being ignored account_key_args = [n.account_key and "--account-key", n.sas_token and "--sas-token", n.connection_string and "--connection-string"] account_key_args = [arg for arg in account_key_args if arg] if account_key_args: from knack.log import get_logger logger = get_logger(__name__) logger.warning('In "login" auth mode, the following arguments are ignored: %s', ' ,'.join(account_key_args)) return if not n.connection_string: n.connection_string = get_config_value('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict.get('AccountName') n.account_key = conn_dict.get('AccountKey') if not n.account_name or not n.account_key: from knack.util import CLIError raise CLIError('Connection-string: %s, is malformed. Some shell environments require the ' 'connection string to be surrounded by quotes.' % n.connection_string) # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = get_config_value('storage', 'account', None) if not n.account_key: n.account_key = get_config_value('storage', 'key', None) if not n.sas_token: n.sas_token = get_config_value('storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: n.account_key = _query_account_key(cmd.cli_ctx, n.account_name)
def validate_client_parameters(cmd, namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace def get_config_value(section, key, default): return cmd.cli_ctx.config.get(section, key, default) if hasattr(n, 'auth_mode'): auth_mode = n.auth_mode or get_config_value('storage', 'auth_mode', None) del n.auth_mode if not n.account_name: n.account_name = get_config_value('storage', 'account', None) if auth_mode == 'login': n.token_credential = _create_token_credential(cmd.cli_ctx) # give warning if there are account key args being ignored account_key_args = [ n.account_key and "--account-key", n.sas_token and "--sas-token", n.connection_string and "--connection-string" ] account_key_args = [arg for arg in account_key_args if arg] if account_key_args: logger.warning( 'In "login" auth mode, the following arguments are ignored: %s', ' ,'.join(account_key_args)) return if not n.connection_string: n.connection_string = get_config_value('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict.get('AccountName') n.account_key = conn_dict.get('AccountKey') n.sas_token = conn_dict.get('SharedAccessSignature') # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = get_config_value('storage', 'account', None) if not n.account_key: n.account_key = get_config_value('storage', 'key', None) if not n.sas_token: n.sas_token = get_config_value('storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: n.account_key = _query_account_key(cmd.cli_ctx, n.account_name)
def validate_client_parameters(cmd, namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace def get_config_value(section, key, default): return cmd.cli_ctx.config.get(section, key, default) if not n.connection_string: n.connection_string = get_config_value('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict.get('AccountName') n.account_key = conn_dict.get('AccountKey') if not n.account_name or not n.account_key: from knack.util import CLIError raise CLIError( 'Connection-string: %s, is malformed. Some shell environments require the ' 'connection string to be surrounded by quotes.' % n.connection_string) # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = get_config_value('storage', 'account', None) if not n.account_key: n.account_key = get_config_value('storage', 'key', None) if not n.sas_token: n.sas_token = get_config_value('storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: n.account_key = _query_account_key(cmd.cli_ctx, n.account_name)
def validate_client_parameters(cmd, namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace def get_config_value(section, key, default): return cmd.cli_ctx.config.get(section, key, default) if not n.connection_string: n.connection_string = get_config_value('storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict.get('AccountName') n.account_key = conn_dict.get('AccountKey') if not n.account_name or not n.account_key: from knack.util import CLIError raise CLIError('Connection-string: %s, is malformed. Some shell environments require the ' 'connection string to be surrounded by quotes.' % n.connection_string) # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = get_config_value('storage', 'account', None) if not n.account_key: n.account_key = get_config_value('storage', 'key', None) if not n.sas_token: n.sas_token = get_config_value('storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: n.account_key = _query_account_key(cmd.cli_ctx, n.account_name)
def test_key_value_pairs_invalid(self): the_input = 'a=b;c=d;e' actual = validate_key_value_pairs(the_input) expected = {'a': 'b', 'c': 'd'} self.assertEqual(actual, expected)
def validate_client_parameters(cmd, namespace): """ Retrieves storage connection parameters from environment variables and parses out connection string into account name and key """ n = namespace if hasattr(n, 'auth_mode'): auth_mode = n.auth_mode or get_config_value(cmd, 'storage', 'auth_mode', None) del n.auth_mode if not n.account_name: n.account_name = get_config_value(cmd, 'storage', 'account', None) if auth_mode == 'login': prefix = cmd.command_kwargs['resource_type'].import_prefix # is_storagv2() is used to distinguish if the command is in track2 SDK # If yes, we will use get_login_credentials() as token credential if is_storagev2(prefix): from azure.cli.core._profile import Profile profile = Profile(cli_ctx=cmd.cli_ctx) n.token_credential, _, _ = profile.get_login_credentials( subscription_id=n._subscription) # Otherwise, we will assume it is in track1 and keep previous token updater else: n.token_credential = _create_token_credential(cmd.cli_ctx) if hasattr(n, 'token_credential') and n.token_credential: # give warning if there are account key args being ignored account_key_args = [ n.account_key and "--account-key", n.sas_token and "--sas-token", n.connection_string and "--connection-string" ] account_key_args = [arg for arg in account_key_args if arg] if account_key_args: logger.warning( 'In "login" auth mode, the following arguments are ignored: %s', ' ,'.join(account_key_args)) return if not n.connection_string: n.connection_string = get_config_value(cmd, 'storage', 'connection_string', None) # if connection string supplied or in environment variables, extract account key and name if n.connection_string: conn_dict = validate_key_value_pairs(n.connection_string) n.account_name = conn_dict.get('AccountName') n.account_key = conn_dict.get('AccountKey') n.sas_token = conn_dict.get('SharedAccessSignature') # otherwise, simply try to retrieve the remaining variables from environment variables if not n.account_name: n.account_name = get_config_value(cmd, 'storage', 'account', None) if not n.account_key: n.account_key = get_config_value(cmd, 'storage', 'key', None) if not n.sas_token: n.sas_token = get_config_value(cmd, 'storage', 'sas_token', None) # strip the '?' from sas token. the portal and command line are returns sas token in different # forms if n.sas_token: n.sas_token = n.sas_token.lstrip('?') # account name with secondary if n.account_name and n.account_name.endswith('-secondary'): n.location_mode = 'secondary' n.account_name = n.account_name[:-10] # if account name is specified but no key, attempt to query if n.account_name and not n.account_key and not n.sas_token: logger.warning( 'There are no credentials provided in your command and environment, we will query for the ' 'account key inside your storage account. \nPlease provide --connection-string, ' '--account-key or --sas-token as credentials, or use `--auth-mode login` if you ' 'have required RBAC roles in your command. For more information about RBAC roles ' 'in storage, visit ' 'https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-rbac-cli. \n' 'Setting the corresponding environment variables can avoid inputting credentials in ' 'your command. Please use --help to get more information.') n.account_key = _query_account_key(cmd.cli_ctx, n.account_name)
def test_key_value_pairs_invalid(self): the_input = 'a=b;c=d;e' actual = validate_key_value_pairs(the_input) expected = {'a': 'b', 'c': 'd'} self.assertEqual(actual, expected)