genvid.toolbox.BastionAPI

class genvid.toolbox.BastionAPI(use_wan=False, **kwargs)

Bases: genvid.toolbox.httpapi.BaseHttpApiTool, genvid.toolbox.consul.ConsulTool

Client for the Bastion API.

Changed in version 1.20.0: Now, add a use_wan address parameter, default to False, If True, will use the TaggedAddresses “wan” when resolving the bastion-api.

NAME = 'bastion-api'
jobs = None

Get the JobsAPI

logs = None

Get the LogsAPI

Get the LinksAPI

get_genvid_repository_name() → str

Return the Genvid Repository name

New in version 1.13.0.

get_genvid_repository_config() → dict

Return the Genvid Repository configuration.

New in version 1.13.0.

get_base_url(timeout=0.0) → str

Get the base URL.

Parameters:timeout – Timeout to wait for the service to be available.
is_bastion_running(timeout=0.0) → bool

Check whether the bastion instance is running.

New in version 1.20.0.

get_bastion_version(timeout=0.0) → str

Get the version of this bastion instance.

Parameters:timeout – Timeout to wait for the service to be available.

New in version 1.20.0.

Get the list of links.

Parameters:
  • category – The link’s category.
  • link_id – The link’s ID.
  • timeout – The timeout in seconds.
Returns:

A list of strings.

get_backends(timeout=0.0) → dict

Get the list of all backend templates.

Parameters:timeout – The timeout in seconds.
get_backend(backend_id: str, timeout=0.0) → dict

Get a backend template.

Parameters:
  • backend_id – The backend ID.
  • timeout – The timeout in seconds.
add_backend(backend_id: str, backend_type: str, variables: dict = {}, timeout=0.0)

Add a new backend template.

Parameters:
  • backend_id – The backend ID.
  • backend_type – The type of backend.
  • variables – A list of default variables for the backend.
  • timeout – The timeout in seconds.
update_backend(backend_id: str, backend_type: str, variables: dict = {}, timeout=0.0)

Update an existing backend template.

Parameters:
  • backend_id – The backend ID.
  • backend_type – The type of backend.
  • variables – A list of default variables for the backend.
  • timeout – The timeout in seconds.
delete_backend(backend_id: str, timeout=0.0)

Remove a backend template.

Parameters:
  • backend_id – The backend ID.
  • timeout – The timeout in seconds.
get_clusters(timeout=0.0, *, query_parameters: str = '') → typing.List[dict]

Query the BastionAPI for all clusters.

Parameters:
  • query_parameters – String, beginning in ? which will be appended at the end of the request URL and interpreted as query parameters.
  • timeout – Maximum waiting time before giving up.

Changed in version 1.21.0: Added the query_parameters keyword-only argument to allow further customization of the query.

get_cluster(cluster_id: str, timeout=0.0) → dict

Get a cluster.

Parameters:
  • cluster_id – The cluster ID.
  • timeout – The timeout in seconds.
set_cluster(cluster_id: str, backend_id: str = 'default', backend_variables: dict = {}, category: str = '', is_static: bool = False, static_output: dict = {}, timeout=0.0) → None

Create a cluster.

Parameters:
  • cluster_id – The cluster ID.
  • backend_id – The backend ID.
  • backend_variables – The backend variables.
  • category – A category for the cluster.
  • is_static – If the cluster is static or not.
  • static_output – The static cluster output. It should be Terraform like.
  • timeout – The timeout in seconds.

Changed in version 1.13.0: New arguments for is_static and server_public_ips.

delete_cluster(cluster_id: str, force: bool = False, timeout=0.0) → None

Delete a cluster.

Parameters:
  • cluster_id – The cluster ID.
  • force – Force the cluster to be deleted.
  • timeout – The timeout in seconds.
cluster_get_setup_jobs(cluster_id: str, timeout=0.0) → typing.List[dict]

Get the list of setup jobs.

Parameters:
  • cluster_id – The cluster ID.
  • timeout – The timeout in seconds.
Returns:

A list of setup job definition.

cluster_set_setup_jobs(cluster_id: str, jobs: typing.List[dict], timeout=0.0)

Set the list of setup jobs.

Parameters:
  • cluster_id – The cluster ID.
  • jobs – A list of setup job definition.
  • timeout – The timeout in seconds.
cluster_do_setup(cluster_id, timeout=0.0)

Execute setup for a cluster. This action is used to start cluster-api.

Parameters:
  • cluster_id – The cluster ID.
  • timeout – The timeout in seconds.
Returns:

cluster_do_clean(cluster_id, timeout=0.0)

Execute clean for a cluster. This action will stop all Nomad jobs and remove Consul KV.

Parameters:
  • cluster_id – The cluster ID.
  • timeout – The timeout in seconds.
Returns:

get_cluster_service(cluster_id, service_id, timeout=0.0) → typing.List[str]

Get a service address.

Parameters:
  • cluster_id – The cluster ID.
  • service_id – The service ID.
  • timeout – The timeout in seconds.
Returns:

get_cluster_images(cluster_id, timeout=0.0) → dict

Retrieve multiple image definitions.

Parameters:
  • cluster_id – The cluster ID.
  • timeout – The timeout in seconds.
Returns:

The data associated with the image definitions.

set_cluster_images(cluster_id, data: dict, timeout=0.0)

Set multiple image definitions.

Parameters:
  • cluster_id – The cluster ID.
  • data – Data associated with the images.
  • timeout – The timeout in seconds.
delete_cluster_images(cluster_id, timeout=0.0)

Delete multiple image definitions.

Parameters:
  • cluster_id – The cluster ID.
  • timeout – The timeout in seconds.
delete_cluster_image(cluster_id, image_id: str, timeout=0.0)

Delete link definitions.

Parameters:
  • cluster_id – The cluster ID.
  • image_id – The image ID.
  • timeout – The timeout in seconds.
get_global(timeout=0.0, retry_request: bool = False) → dict

Get the global configuration.

Parameters:timeout – The timeout in seconds.
set_global(bastion_id: str, timeout=0.0)

Set the global configuration.

Parameters:
  • bastion_id – The bastion ID. This is used to isolate multiple bastions.
  • timeout – The timeout in seconds.
terraform_get_modules(prefix: str = '', timeout=0.0) → typing.List[dict]

Return the list of modules.

Parameters:
  • prefix – A prefix to filter the modules.
  • timeout – The timeout in seconds.
Returns:

A list of modules.

terraform_get_module(moduleId: str, timeout=0.0) → dict

Return information about a module.

Parameters:
  • moduleId – The module path.
  • timeout – The timeout in seconds.
Returns:

The module definition.

terraform_get_repositories(timeout=0.0) → typing.Dict[str, dict]

Return the list of Terraform repositories.

Parameters:timeout – The timeout in seconds.
Returns:A map of repositories by name.
terraform_add_repository(name: str, config: dict, timeout=0.0) → dict

Add a repository.

Parameters:
  • name – The unique name for the repository.
  • config – A dictionary with the repository configuration.
Returns:

The repository configuration.

terraform_update_repository(name: str, config: dict = {}, timeout=0.0) → dict

Update an existing repository.

Parameters:
  • name – The name of the repository.
  • config – A dictionary with the repository configuration. (Optional)
Returns:

The repository configuration.

terraform_remove_repository(name: str, timeout=0.0) → dict

Remove a repository.

Parameters:name – The name of the repository.
Returns:The repository configuration.
terraform_get_instances(timeout=0.0) → typing.List[dict]

Get the Terraform instances.

Parameters:timeout – The timeout in seconds.
terraform_get_instance(instance_id: str, timeout=0.0) → dict

Get a specific Terraform instance.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_get_global_tfvars(timeout=0.0) → dict

Get the global tfvars content.

Parameters:timeout – The timeout in seconds.
terraform_set_global_tfvars(tfvars: dict, timeout=0.0) → str

Set the global tfvars content.

Parameters:
  • tfvars – The tfvars content.
  • timeout – The timeout in seconds.
terraform_clean_global_tfvars(timeout=0.0) → str

Clean the global tfvars content.

Parameters:timeout – The timeout in seconds.
terraform_get_instance_tfvars_default(instance_id: str, timeout=0.0) → str

Get the instance tfvars content.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_get_instance_tfvars(instance_id: str, timeout=0.0) → str

Get the instance tfvars content.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_set_instance_tfvars(instance_id: str, tfvars: dict, timeout=0.0)

Set the instance tfvars content.

Parameters:
  • instance_id – The instance ID.
  • tfvars – The tfvars content.
  • timeout – The timeout in seconds.
terraform_get_instance_schema(instance_id: str, timeout=0.0) → str

Get the instance schema for its variables.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_get_instance_content(instance_id: str, content_id: str, timeout=0.0)

Get a .tf.json Terraform file content.

Parameters:
  • instance_id – The instance ID.
  • content_id – The Terraform file ID.
  • timeout – The timeout in seconds.
Returns:

The content of the specified file in JSON.

terraform_set_instance_content(instance_id: str, content_id: str, content: dict, timeout=0.0)

Set a .tf.json Terraform file content.

Parameters:
  • instance_id – The instance ID.
  • content_id – The Terraform file ID.
  • content – The Terraform file content.
  • timeout – The timeout in seconds.
terraform_delete_instance_content(instance_id: str, content_id: str, timeout=0.0)

Delete a .tf.json Terraform file content.

Parameters:
  • instance_id – The instance ID.
  • content_id – The Terraform file ID.
  • timeout – The timeout in seconds.
terraform_get_instance_status(instance_id: str, timeout=0.0) → dict

Get the status of an instance.

The instance states can be:

  • VOID: The instance doesn’t exist.
  • EMPTY: The instance exists but isn’t initialized.
  • DOWN: The instance is initialized but doesn’t contain any
    resources.
  • UP: The instance manage some resources.
  • BUSY: The instance is currently running a command.
  • ERROR: An error has occured during the retrieval of the status.
  • INVALID: The current status of the instance is unknown.
Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
Returns:

A dictionary with a single key status.

terraform_wait_on_instance(instance_id: str, *, timeout: int = 60, increment: int = 1)

Wait on a specific instance to finish running a Terraform command.

More specifically, we wait for the command to have a status different from ‘BUSY’.

Parameters:
  • instance_id – The ID of the instance to wait on.
  • timeout – The maximum number of time to wait.
  • increment – How much time to wait between each status query.
terraform_do_instance_get(instance_id: str, timeout=0.0) → dict

Execute terraform get for the instance.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_get_providers(instance_id: str, *, timeout=0.0) → typing.Sequence[genvid.toolbox.terraform_provider.TerraformProvider]

Get all providers known to the specified instance.

Parameters:
  • instance_id – Instance ID of the cluster we operate on.
  • timeout – Timeout in seconds.
Returns:

All known providers, as a sequence.

terraform_get_default_providers(*, timeout=0.0) → typing.Sequence[genvid.toolbox.terraform_provider.TerraformProvider]

Get the global default configuration for all providers.

Parameters:timeout – Timeout in seconds.
Returns:All known providers, as a sequence.
terraform_put_providers(instance_id: str, providers: typing.Iterable[genvid.toolbox.terraform_provider.TerraformProvider], *, timeout=0.0) → dict

Override the configuration of all providers on a specific instance.

Parameters:
  • instance_id – Instance ID of the cluster we operate on.
  • providers – The new provider configurations to use.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_put_default_providers(providers: typing.Iterable[genvid.toolbox.terraform_provider.TerraformProvider], *, timeout=0.0) → dict

Override the global default configuration of all providers.

Parameters:
  • providers – The new provider configurations to use.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_delete_providers(instance_id: str, *, timeout=0.0) → dict

Delete the configuration of all providers on a specific instance.

Parameters:
  • instance_id – Instance ID of the cluster we operate on.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_delete_default_providers(*, timeout=0.0) → dict

Delete the global default configuration of all providers.

Parameters:timeout – Timeout in seconds.
Returns:The response of the Bastion API, should be {}.
terraform_get_provider(instance_id: str, provider_name: str, provider_alias: typing.Union[str, NoneType] = None, *, timeout=0.0) → genvid.toolbox.terraform_provider.TerraformProvider

Get the configuration of a specific provider on a specific cluster.

Parameters:
  • instance_id – Instance ID of the cluster we operate on.
  • provider_name – Provider’s name.
  • provider_alias – Optional alias for the provider.
  • timeout – Timeout in seconds.
Returns:

The matching provider.

terraform_get_default_provider(provider_name: str, provider_alias: typing.Union[str, NoneType] = None, *, timeout=0.0) → typing.Sequence[genvid.toolbox.terraform_provider.TerraformProvider]

Get the global default configuration for a specific provider.

Parameters:
  • provider_name – Provider’s name.
  • provider_alias – Optional alias for the provider.
  • timeout – Timeout in seconds.
Returns:

The matching provider.

terraform_put_provider(instance_id: str, provider: genvid.toolbox.terraform_provider.TerraformProvider, *, timeout=0.0) → dict

Override a provider configuration on a specific instance.

Parameters:
  • instance_id – Instance ID of the cluster we operate on.
  • provider – The provider configuration to send to the back-end.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_put_default_provider(provider: genvid.toolbox.terraform_provider.TerraformProvider, *, timeout=0.0) → dict

Override the global default configuration for a specific provider.

Parameters:
  • providers – The new provider configurations to use.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_delete_provider(instance_id: str, provider_name: str, provider_alias: typing.Union[str, NoneType] = None, *, timeout=0.0) → dict

Delete a specific provider on a specific cluster.

Parameters:
  • instance_id – Instance ID of the cluster we operate on.
  • provider_name – Provider’s name.
  • provider_alias – Optional alias for the provider.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_delete_default_provider(provider_name: str, provider_alias: typing.Union[str, NoneType] = None, *, timeout=0.0) → dict

Delete the global default configuration for a specific provider.

Parameters:
  • provider_name – Provider’s name.
  • provider_alias – Optional alias for the provider.
  • timeout – Timeout in seconds.
Returns:

The response of the Bastion API, should be {}.

terraform_do_instance_import_module(instance_id: str, module_path: str = 'cluster/default', timeout=0.0, force: bool = False, **kwargs) → dict

Execute terraform init for the instance.

Parameters:
  • instance_id – The instance ID.
  • module_path – The module to use.
  • timeout – The timeout in seconds.
  • force – Force the import even if the cluster is in an error state.
terraform_do_instance_init(instance_id: str, timeout: float = 0.0, force: bool = False) → dict

Execute terraform init for the instance

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
  • force – Force the initialization even if the cluster is in an error state.
terraform_do_instance_refresh(instance_id: str, timeout=0.0) → dict

Execute terraform refresh for the instance.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_regenerate_instance(instance_id: str, timeout=0.0) → dict

Regenerate the Terraform working directory for the instance.

Parameters:
  • instance_id – ID of the instance.
  • timeout – Timeout in seconds.

New in version 1.21.

terraform_do_instance_plan(instance_id: str, destroy: bool = False, timeout=0.0) → dict

Execute terraform plan for the instance.

Parameters:
  • instance_id – The instance ID.
  • destroy – Execute the destroy plan.
  • timeout – The timeout in seconds.
terraform_do_instance_apply(instance_id: str, timeout=0.0) → dict

Execute terraform apply for the instance.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_do_instance_apply_plan(instance_id: str, plan_file: str, timeout=0.0) → dict

Execute terraform apply on the instance for the given plan file. The plan file name is usually the command ID of the plan command.

Parameters:
  • instance_id – The instance ID.
  • plan_file – The plan file name.
  • timeout – The timeout in seconds.
terraform_do_instance_destroy(instance_id: str, timeout=0.0) → dict

Execute terraform destroy for the instance.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_do_instance_output(instance_id: str, timeout=0.0) → dict

Return the terraform output command.

Parameters:
  • instance_id – The instance ID.
  • timeout – The timeout in seconds.
terraform_get_instance_commands(instance_id: str, current: bool = True, timeout=0.0) → typing.List[dict]

Get the commands related to a Terraform instance.

Parameters:
  • instance_id – The instance ID.
  • current – If True, only return the currently running commands.
  • timeout – The timeout in seconds.
terraform_get_instance_command(instance_id: str, command_id: str, timeout=0.0) → dict

Get the command base on the instance ID and the command ID.

Parameters:
  • instance_id – The instance ID.
  • command_id – The command ID.
  • timeout – The timeout in seconds.
terraform_wait_instance_command(instance_id: str, command_id: str, timeout=0.0) → dict

Get the command base on the instance ID and the command ID.

Parameters:
  • instance_id – The instance ID.
  • command_id – The command ID.
  • timeout – The timeout in seconds.
terraform_get_instance_command_log(instance_id: str, command_id: str, origin: str = 'start', offset: int = 0, size: int = 20000, timeout=0.0) → dict

Get an instance’s command log.

Parameters:
  • instance_id – The instance ID.
  • command_id – The command ID.
  • origin – If the log is from the start or end.
  • offset – The offset relative to the origin.
  • size – The max size of the log to be returned.
  • timeout – The timeout in seconds.
terraform_print_command_log(instance_id: str, command_id: str, output=None, tail=False, follow=False, lines: int = 10, timeout=0.0)

Print a command’s log on output.

Parameters:
  • instance_id – The instance ID.
  • command_id – The command ID.
  • output – If None, default to stdout.
  • tail – If True, print the end of the log.
  • follow – If True, continue to show the log as it runs.
  • lines – An approximate number of lines to show.
  • timeout – The timeout in seconds.
get_bastion_id()

Get the bastion ID.

:raises RuntimeError : If the bastion ID is not set. :return : Bastion ID

render_template(content: typing.Union[str, NoneType] = None, templatePath: typing.Union[str, NoneType] = None, sources: typing.Union[str, NoneType] = None, environment: typing.Union[typing.Dict[str, str], NoneType] = None, timeout=5.0) → dict

Execute a consul-template on the server site and return the result.

Parameters:
  • content – The content of the template to render. Must be None or empty if templatePath is used.
  • templatePath – The path of the template inside the source. content must be None or empty if it is used and sources must be provided.
  • sources – A url for the sources. Must be provided if templatePath is set.
  • environment – A dictionary of environment variables. Keys and values must be string.
  • timeout – The timeout in seconds.
Returns:

Ex: { “data”: “result”, “stderr”: “message”}

New in version 1.33.0.

class bastion_api.BastionAPI

Implementation of genvid.toolbox.BastionAPI