Users
User provisioning allows you to create, update, or delete user profiles in your GoodData environment.
You can provision users using full or incremental load methods. Each of these methods requires a specific input type.
Usage
Start by importing and initializing the UserProvisioner.
from gooddata_pipelines import UserProvisioner
host = "http://localhost:3000"
token = "some_user_token"
# Initialize the provisioner with GoodData credentials
provisioner = UserProvisioner.create(host=host, token=token)
Then validate your data using an input model corresponding to the provisioned resource and selected workflow type, i.e., UserFullLoad
if you intend to run the provisioning in full load mode, or UserIncrementalLoad
if you want to provision incrementally.
The models expect the following fields:
- user_id: User ID.
- firstname: First name of the user.
- lastname: Last name of the user.
- email: Email of the user.
- auth_id: Authorization ID associated with the user.
- user_groups: List of user group IDs that the user should belong to.
- is_active: Deletion flag. Present only in the IncrementalLoad models.
Note on IDs
Each ID can only contain allowed characters. See Workspace Object Identification to learn more about object identifiers.
Use the appropriate model to validate your data:
# Add the model to the imports
from gooddata_pipelines import UserIncrementalLoad, UserProvisioner
host = "http://localhost:3000"
token = "some_user_token"
# Initialize the provisioner with GoodData credentials
provisioner = UserProvisioner.create(host=host, token=token)
# Load your data
raw_data = [
{
"user_id": "user_id_1",
"firstname": "Example",
"lastname": "User",
"email": "example.user@gooddata.com",
"auth_id": "",
"user_groups": ["user_group_1", "user_group_2"],
"is_active": True,
},
]
# Validate the data
validated_data = [
UserIncrementalLoad(
user_id=item["user_id"],
firstname=item["firstname"],
lastname=item["lastname"],
email=item["email"],
auth_id=item["auth_id"],
user_groups=item["user_groups"],
is_active=item["is_active"],
)
for item in raw_data
]
Now with the provisioner initialized and your data validated, you can run the provisioner:
# Import, initialize, validate...
...
# Run the provisioning method
provisioner.incremental_load(validated_data)
Examples
Here are full examples of a full load and incremental load user provisioning workflows:
Full Load
import logging
from gooddata_pipelines import UserFullLoad, UserProvisioner
host = "http://localhost:3000"
token = "some_user_token"
# Initialize the provisioner
provisioner = UserProvisioner.create(host=host, token=token)
# Optional: set up logging and subscribe to logs emitted by the provisioner
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
provisioner.logger.subscribe(logger)
# Prepare your data
raw_data = [
{
"user_id": "user_id_1",
"firstname": "Example",
"lastname": "User",
"email": "example.user@gooddata.com",
"auth_id": "",
"user_groups": ["user_group_1", "user_group_2"],
},
]
# Validate the data
validated_data = [
UserFullLoad(
user_id=item["user_id"],
firstname=item["firstname"],
lastname=item["lastname"],
email=item["email"],
auth_id=item["auth_id"],
user_groups=item["user_groups"],
)
for item in raw_data
]
# Run the provisioning with the validated data
provisioner.full_load(validated_data)
Incremental Load
import logging
from gooddata_pipelines import UserIncrementalLoad, UserProvisioner
host = "http://localhost:3000"
token = "some_user_token"
# Initialize the provisioner
provisioner = UserProvisioner.create(host=host, token=token)
# Optional: set up logging and subscribe to logs emitted by the provisioner
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
provisioner.logger.subscribe(logger)
# Prepare your data
raw_data = [
{
"user_id": "user_id_1",
"firstname": "Example",
"lastname": "User",
"email": "example.user@gooddata.com",
"auth_id": "",
"user_groups": ["user_group_1", "user_group_2"],
"is_active": True,
},
]
# Validate the data
validated_data = [
UserIncrementalLoad(
user_id=item["user_id"],
firstname=item["firstname"],
lastname=item["lastname"],
email=item["email"],
auth_id=item["auth_id"],
user_groups=item["user_groups"],
is_active=item["is_active"],
)
for item in raw_data
]
# Run the provisioning with the validated data
provisioner.incremental_load(validated_data)