Skip to main content

Get Terraform usage statistics.

Project description

Overview

A Python module to call the Terraform Cloud API and retrieve data for total and applied Runs of Workspaces.

> CAUTION! This may take a while to run if the Organization has a large number of Workspaces and / or Runs.

Usage

Installation:

pip3 install terraform_usage
# or
python3 -m pip install terraform_usage

Bash:

tfc_usage -o <organization> -t <token> -k <keyword> -f <filename> -s <start_date> -e <end_date> -m <mode> -u <api_url> -p <page_size> -d <delay>

Python:

import terraform_usage as tfu
workspaces = tfu.list_workspaces(
   <organization>,
   <token>,
   <keyword>,
   <api_url>,
   <page_size>,
   <delay>
)
runs = tfu.analyze_runs(
   workspaces,
   <token>,
   <start_date>,
   <end_date>,
   <mode>,
   <api_url>,
   <page_size>,
   <delay>
)
create_csv(
   [run.values() for run in runs],
   <filename>,
   <mode>
)

Execution example:

tfc_usage -o myorg -t mytoken -k "*myworkspace-*" -m advanced -f myfile.csv -s 2023-11-01 -e 2023-11-30

Run parameters:
Organization: myorg
Keyword: *myworkspace-*
Filename: myfile.csv
Start date: 2023-11-01
End date: 2023-11-30
Mode: advanced
API URL: https://app.terraform.io/api/v2
Page size: 50
Delay: 1.0
-------
Getting page 1 of Workspaces.
Found 3 Workspaces.
Getting Run data for Workspace aws-myworkspace-dev.
Getting page 1 of Runs.
Getting Run data for Workspace aws-myworkspace-prod.
Getting page 1 of Runs.
Getting Run data for Workspace aws-myworkspace-test.
Getting page 1 of Runs.
Creating CSV file myfile.csv.
Writing data to myfile.csv.

Output in CSV file example:

workspace,all_runs,successful_applies,total_time
aws-myworkspace-dev,4,0,53
aws-myworkspace-prod,0,0,0
aws-myworkspace-test,0,0,0

Execution Modes

  • basic
    • Function
      • Get total number of Runs and successful Applies for all time.

    • Available filters
      • Workspace name pattern

    • Pros and cons
      • Faster execution

      • Less details

  • advanced
    • Function
      • Get total number of Runs, successful Applies, and total Run time.

    • Available filters
      • Workspace name pattern

      • Start date

      • End date

    • Pros and cons
      • Potentially slower execution for a large number of Workspaces and Runs.

      • More details

Arguments

  • organization - Terraform Cloud Organization name. Required.

  • token - Terraform Cloud API token. Required.

  • keyword - Workspace name keyword to filter by. Default is “all”.

  • filename - CSV filename to save the output data to. Default is “report.csv”.

  • start_date - Start date for Run lookups. Default is “all”.

  • end_date - End date for Run lookups. Default is “all”.

  • mode - Execution mode (“basic” or “advanced”). Default is “basic”.

  • api_url - Terraform Cloud API URL. Default is “https://app.terraform.io/api/v2”.

  • page_size - Number of items per page. Default is 50.

  • delay - Delay (in seconds) between API calls. Default is 1.0.

Error Handling

  • Error: Skipping run due to missing attribute(s).
    • An attribute (timestamp, etc.) is missing from the Run data. Can be caused by local agent Runs or a glitch during execution.

  • Error: One or more Python exceptions.
    • Multiple possible causes. One of the most common is due to the script hitting the Terraform Cloud API rate limit (30 requests per second). There is a safeguard that slows down execution to avoid this.

API Documentation

https://developer.hashicorp.com/terraform/cloud-docs/api-docs

New Features

  • Added Workspace resource listing.

Create Python code (execute_tfu.py):

import os
import terraform_usage as tfu
from pprint import pprint as pp
resources = tfu.list_resources(
   "<workspace_id>",
   os.environ['TFE_TOKEN'],
   os.environ['TFE_URL'],
   20,
   1
)
 pp(resources)

Set environment variables and execute:

export TFE_TOKEN="<tfe-token>"
export TFE_URL="https://app.terraform.io/api/v2"

python3 execute_tfu.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terraform_usage-2.2.2.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

terraform_usage-2.2.2-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file terraform_usage-2.2.2.tar.gz.

File metadata

  • Download URL: terraform_usage-2.2.2.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/5.15.154+

File hashes

Hashes for terraform_usage-2.2.2.tar.gz
Algorithm Hash digest
SHA256 f73709dc9e0d1b89cd433323f250513a1ec23e96326a995f9ad93e7613da6c64
MD5 fb27bc89f4c814ec4bed39e69b6e8d54
BLAKE2b-256 6117b928cfde613adc1b6bbc3e9e6706b34665ff1f4fdd54168029fe573c0695

See more details on using hashes here.

File details

Details for the file terraform_usage-2.2.2-py3-none-any.whl.

File metadata

  • Download URL: terraform_usage-2.2.2-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/5.15.154+

File hashes

Hashes for terraform_usage-2.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 347a424eeddd8b476bfcf7d85670be72e13d764826db0e6e53b4b6fa410abc6d
MD5 9b12eea512779da378453dff139083c5
BLAKE2b-256 3dfb280c660d5990ef05b839f5885086fb8d411491f0c10a7f2ef17802ada2e8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page