def _validate_directory_id(self, directory_id): """Raise an exception if the directory id is invalid or unknown.""" # Validation of ID takes precedence over a check for its existence. validate_args([("directoryId", directory_id)]) if directory_id not in self.directories: raise EntityDoesNotExistException( f"Directory {directory_id} does not exist")
def connect_directory( self, region, name, short_name, password, description, size, connect_settings, tags, ): # pylint: disable=too-many-arguments """Create a fake AD Connector.""" if len(self.directories) > Directory.CONNECTED_DIRECTORIES_LIMIT: raise DirectoryLimitExceededException( f"Directory limit exceeded. A maximum of " f"{Directory.CONNECTED_DIRECTORIES_LIMIT} directories may be created" ) validate_args( [ ("password", password), ("size", size), ("name", name), ("description", description), ("shortName", short_name), ( "connectSettings.vpcSettings.subnetIds", connect_settings["SubnetIds"], ), ( "connectSettings.customerUserName", connect_settings["CustomerUserName"], ), ("connectSettings.customerDnsIps", connect_settings["CustomerDnsIps"]), ] ) # ConnectSettings and VpcSettings both have a VpcId and Subnets. self._verify_subnets(region, connect_settings) errmsg = self.tagger.validate_tags(tags or []) if errmsg: raise ValidationException(errmsg) if len(tags) > Directory.MAX_TAGS_PER_DIRECTORY: raise DirectoryLimitExceededException("Tag Limit is exceeding") directory = Directory( region, name, password, "ADConnector", size=size, connect_settings=connect_settings, short_name=short_name, description=description, ) self.directories[directory.directory_id] = directory self.tagger.tag_resource(directory.directory_id, tags or []) return directory.directory_id
def enable_sso(self, directory_id, username=None, password=None): """Enable single-sign on for a directory.""" self._validate_directory_id(directory_id) validate_args([("ssoPassword", password), ("userName", username)]) directory = self.directories[directory_id] if directory.alias == directory_id: raise ClientException( f"An alias is required before enabling SSO. DomainId={directory_id}" ) directory = self.directories[directory_id] directory.enable_sso(True)
def create_microsoft_ad( self, region, name, short_name, password, description, vpc_settings, edition, tags, ): # pylint: disable=too-many-arguments """Create a fake Microsoft Ad Directory.""" if len(self.directories) > Directory.CLOUDONLY_MICROSOFT_AD_LIMIT: raise DirectoryLimitExceededException( f"Directory limit exceeded. A maximum of " f"{Directory.CLOUDONLY_MICROSOFT_AD_LIMIT} directories may be created" ) # boto3 looks for missing vpc_settings for create_microsoft_ad(). validate_args( [ ("password", password), ("edition", edition), ("name", name), ("description", description), ("shortName", short_name), ("vpcSettings.subnetIds", vpc_settings["SubnetIds"]), ] ) self._verify_subnets(region, vpc_settings) errmsg = self.tagger.validate_tags(tags or []) if errmsg: raise ValidationException(errmsg) if len(tags) > Directory.MAX_TAGS_PER_DIRECTORY: raise DirectoryLimitExceededException("Tag Limit is exceeding") directory = Directory( region, name, password, "MicrosoftAD", vpc_settings=vpc_settings, short_name=short_name, description=description, edition=edition, ) self.directories[directory.directory_id] = directory self.tagger.tag_resource(directory.directory_id, tags or []) return directory.directory_id
def create_directory( self, region, name, short_name, password, description, size, vpc_settings, tags ): # pylint: disable=too-many-arguments """Create a fake Simple Ad Directory.""" if len(self.directories) > Directory.CLOUDONLY_DIRECTORIES_LIMIT: raise DirectoryLimitExceededException( f"Directory limit exceeded. A maximum of " f"{Directory.CLOUDONLY_DIRECTORIES_LIMIT} directories may be created" ) # botocore doesn't look for missing vpc_settings, but boto3 does. if not vpc_settings: raise InvalidParameterException("VpcSettings must be specified.") validate_args( [ ("password", password), ("size", size), ("name", name), ("description", description), ("shortName", short_name), ("vpcSettings.subnetIds", vpc_settings["SubnetIds"]), ] ) self._verify_subnets(region, vpc_settings) errmsg = self.tagger.validate_tags(tags or []) if errmsg: raise ValidationException(errmsg) if len(tags) > Directory.MAX_TAGS_PER_DIRECTORY: raise DirectoryLimitExceededException("Tag Limit is exceeding") directory = Directory( region, name, password, "SimpleAD", size=size, vpc_settings=vpc_settings, short_name=short_name, description=description, ) self.directories[directory.directory_id] = directory self.tagger.tag_resource(directory.directory_id, tags or []) return directory.directory_id
def create_alias(self, directory_id, alias): """Create and assign an alias to a directory.""" self._validate_directory_id(directory_id) # The default alias name is the same as the directory name. Check # whether this directory was already given an alias. directory = self.directories[directory_id] if directory.alias != directory_id: raise InvalidParameterException( "The directory in the request already has an alias. That " "alias must be deleted before a new alias can be created.") # Is the alias already in use? if alias in [x.alias for x in self.directories.values()]: raise EntityAlreadyExistsException( f"Alias '{alias}' already exists.") validate_args([("alias", alias)]) directory.update_alias(alias) return {"DirectoryId": directory_id, "Alias": alias}
def disable_sso(self, directory_id, username=None, password=None): """Disable single-sign on for a directory.""" self._validate_directory_id(directory_id) validate_args([("ssoPassword", password), ("userName", username)]) directory = self.directories[directory_id] directory.enable_sso(False)