Platform Libraries¶
Delphix provides a set of functions that plugins can use for executing remote commands, etc.
retrieve_credentials¶
Takes a credentials-supplier object and returns a PasswordCredentials or KeyPairCredentials object. If the credentials supplier refers to a password vault, the operation obtains the credentials from that vault.
The operation accepts only credentials-supplier objects exactly as provided by parameters of the plugin operation, without any changes. Credential suppliers are effectively opaque to plugin code; their internals can change without notice.
Signature¶
def retrieve_credentials(credentials_supplier)
Arguments¶
| Argument | Type | Description |
|---|---|---|
| credentials_supplier | dict | Unmodified object provided within the parameters field of a plugin operation parameter that conforms to credentialsSupplier, passwordCredentialsSupplier, or keyCredentialsSupplier. |
Returns¶
An object of the abstract type Credentials. Concretely, a PasswordCredentials or KeyPairCredentials.
Throws¶
An exception with a descriptive message attribute if either:
- The secret is returned by the vault and the type of this secret does not match the type(s) required by the
expectedSecretTypeproperty of the credentials supplier. For example, this occurs when the secret is akeyPairbutexpectedSecretTypeis set topassword. Or, - The
credentials_supplierparameter does not equal any credentials supplier passed to the plugin by the engine.
Example¶
from dlpx.virtualization import libs from dlpx.virtualization.common import PasswordCredentials @plugin.virtual.stop() def my_virtual_stop(virtual_source, repository, source_config): credentials = libs.retrieve_credentials(virtual_source.parameters.db_credentials_supplier) environment_vars = { "DATABASE_USERNAME" : credentials.username } if isinstance(credentials, PasswordCredentials): environment_vars["DATABASE_PASSWORD"] = credentials.password else: environment_vars["DATABASE_KEY"] = credentials.private_key run_bash¶
Executes a bash command on a remote Unix host.
Signature¶
def run_bash(remote_connection, command, variables=None, use_login_shell=False, check=False)
Arguments¶
| Argument | Type | Description |
|---|---|---|
| remote_connection | RemoteConnection | Connection associated with the remote host to run the command on. |
| command | String | Command to run on the host. |
| variables | dict[String, String] | Optional. Environment variables to set when running the command. |
| use_login_shell | boolean | Optional. Whether to use a login shell. |
| check | boolean | Optional. Whether or not to raise an exception if the exit_code in the RunBashResponse is non-zero. |
Returns¶
An object of RunBashResponse
| Field | Type | Description |
|---|---|---|
| exit_code | Integer | Exit code from the command. |
| stdout | String | Stdout from the command. |
| stderr | String | Stderr from the command. |
Examples¶
Calling bash with an inline command.¶
from dlpx.virtualization import libs command = "echo 'Hi' >> /tmp/debug.log" variables = {"var": "val"} response = libs.run_bash(connection, command, variables) print response.exit_code print response.stdout print response.stderr Using parameters to construct a bash command.¶
from dlpx.virtualization import libs name = virtual_source.parameters.username port = virtual_source.parameters.port command = "mysqldump -u {} -p {}".format(name,port) response = libs.run_bash(connection, command) Running a bash script that is saved in a directory.¶
Python 2.7 recommended approach¶
import pkgutil from dlpx.virtualization import libs script_content = pkgutil.get_data('resources', 'get_date.sh') # Execute script on remote host response = libs.run_bash(direct_source.connection, script_content) Python 3.8 and Python 3.11 recommended approach¶
from importlib import resources from dlpx.virtualization import libs script_content = resources.read_text('resources', 'get_date.sh') # Execute script on remote host response = libs.run_bash(direct_source.connection, script_content) run_expect¶
Executes a tcl command or script on a remote Unix host.
Signature¶
def run_expect(remote_connection, command, variables=None)
Arguments¶
| Argument | Type | Description |
|---|---|---|
| remote_connection | RemoteConnection | Connection associated with the remote host to run the command on. |
| command | String | Expect(Tcl) command to run. |
| variables | dict[String, String] | Optional. Environment variables to set when running the command. |
Returns¶
An object of RunExpectResponse
| Field | Type | Description |
|---|---|---|
| exit_code | Integer | Exit code from the command. |
| stdout | String | Stdout from the command. |
| stderr | String | Stderr from the command. |
Example¶
Calling expect with an inline command.
from dlpx.virtualization import libs command = "puts 'Hi'" variables = {"var": "val"} repsonse = libs.run_expect(connection, command, variables) print response.exit_code print response.stdout print response.stderr run_powershell¶
Executes a powershell command on a remote Windows host.
Signature¶
def run_powershell(remote_connection, command, variables=None, check=False)
Arguments¶
| Argument | Type | Description |
|---|---|---|
| remote_connection | RemoteConnection | Connection associated with the remote host to run the command on. |
| command | String | Command to run to the remote host. |
| variables | dict[String, String] | Optional. Environment variables to set when running the command. |
| check | boolean | Optional. Whether or not to raise an exception if the exit_code in the RunPowershellResponse is non-zero. |
Returns¶
An object of RunPowershellResponse
| Field | Type | Description |
|---|---|---|
| exit_code | Integer | Exit code from the command. |
| stdout | String | Stdout from the command. |
| stderr | String | Stderr from the command. |
Example¶
Calling powershell with an inline command.
from dlpx.virtualization import libs command = "Write-Output 'Hi'" variables = {"var": "val"} response = libs.run_powershell(connection, command, variables) print response.exit_code print response.stdout print response.stderr run_sync¶
Copies files from the remote source host directly into the dSource, without involving a staging host.
Signature¶
def run_sync(remote_connection, source_directory, rsync_user=None, exclude_paths=None, sym_links_to_follow=None)
Arguments¶
| Argument | Type | Description |
|---|---|---|
| remote_connection | RemoteConnection | Connection associated with the remote host to run the command on. |
| source_directory | String | Directory of files to be synced. |
| rsync_user | String | Optional User who has access to the directory to be synced. |
| exclude_paths | list[String] | Optional Paths to be excluded. |
| sym_links_to_follow | list[String] | Optional Symbollic links to follow if any. |
Returns¶
None
Example¶
from dlpx.virtualization import libs source_directory = "sourceDirectory" rsync_user = "rsyncUser" exclude_paths = ["/path1", "/path2"] sym_links_to_follow = ["/path3", "/path4"] libs.run_sync(connection, source_directory, rsync_user, exclude_paths, sym_links_to_follow) upgrade_password¶
Takes a plain password and, optionally, a user name and converts them to an object that conforms to credentialsSupplier. This function generalizes an existing password property to allow users to later select an alternative source, such as a password vault.
This function can be called only from data migrations. The resulting object can be assigned to a property of type credentialsSupplier or passwordCredentialsSupplier.
Signature¶
def upgrade_password(password, username=None)
Arguments¶
| Argument | Type | Description |
|---|---|---|
| password | String | A plain password. |
| username | String | Optional. A user name. |
Returns¶
A dict object that conforms to passwordCredentialsSupplier.
Example¶
from dlpx.virtualization import libs @plugin.upgrade.linked_source("2021.02.15") def convert_password_to_credentials_supplier(old_linked_source): new_linked_source = dict(old_linked_source) password = old_linked_source["credentials"] username = old_linked_source["username"] new_linked_source["credentials"] = libs.upgrade_password(password, username) del new_linked_source["username"] return new_linked_source