### Install System Dependencies Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Installs necessary system packages including Git, OPAM, and build tools using apt-get. ```bash apt-get update apt-get install -y git opam ca-certificates wget m4 build-essential ``` -------------------------------- ### Verify OpenInfraQuote Installation Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/installation Check if OpenInfraQuote has been installed correctly by running the version command. This confirms the binary is accessible in your PATH. ```bash oiq --version ``` -------------------------------- ### Run OpenInfraQuote with Docker Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/installation Execute OpenInfraQuote using Docker without local installation. This example runs both the 'match' and 'price' steps, requiring prices.csv and tfplan.json in the current directory. ```bash docker run --rm -i \ -v $(pwd)/prices.csv:/prices.csv \ -v $(pwd)/tfplan.json:/tfplan.json \ ghcr.io/terrateamio/openinfraquote:latest \ match --pricesheet /prices.csv /tfplan.json \ | docker run --rm -i \ ghcr.io/terrateamio/openinfraquote:latest \ price --region us-east-1 ``` -------------------------------- ### Install OpenInfraQuote to PATH Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Copies the compiled OpenInfraQuote binary to a system-wide executable path for easy access. ```bash cp build/release/oiq_cli/oiq_cli.native /usr/local/bin/oiq ``` -------------------------------- ### Install OpenInfraQuote with Homebrew on macOS Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/installation Use Homebrew to tap the OpenInfraQuote repository and install the latest version. This is the recommended method for macOS users. ```bash brew tap terrateamio/openinfraquote brew install openinfraquote ``` -------------------------------- ### Initialize OPAM Environment Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Initializes the OPAM package manager and sets up the environment variables for OCaml development. Use --disable-sandboxing for simpler setups. ```bash opam init --disable-sandboxing -a -y eval "$(opam env)" ``` -------------------------------- ### Install OCaml Dependencies Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Installs the required OCaml libraries for OpenInfraQuote using the OPAM package manager. ```bash opam install -y ISO8601 cmdliner containers csv duration logs pds ppx_blob ppx_deriving ppx_deriving_yojson uri yojson ``` -------------------------------- ### Download and Install OpenInfraQuote on Linux Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/installation Manually download the latest release for Linux (x86_64 or arm64) from GitHub, extract it, and place the binary in your system's PATH. This script automatically detects the architecture. ```bash # Get the latest release tag LATEST_VERSION=$(curl -s https://api.github.com/repos/terrateamio/openinfraquote/releases/latest | grep -o '"tag_name": ".*"' | cut -d'"' -f4) # Detect architecture ARCH=$(uname -m) if [ "$ARCH" = "x86_64" ]; then ARCH="amd64" elif [ "$ARCH" = "arm64" ] || [ "$ARCH" = "aarch64" ]; then ARCH="arm64" else echo "Unsupported architecture: $ARCH" exit 1 fi # Download and install curl -L "https://github.com/terrateamio/openinfraquote/releases/download/${LATEST_VERSION}/oiq-linux-${ARCH}-${LATEST_VERSION}.tar.gz" -o "oiq.tar.gz" tar -xzf oiq.tar.gz chmod +x oiq sudo mv oiq /usr/local/bin/ rm oiq.tar.gz ``` -------------------------------- ### Download and Install OpenInfraQuote on macOS (Apple Silicon) Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/installation Manually download the latest release for macOS with Apple Silicon from GitHub, extract it, and place the binary in your system's PATH. This is for M1/M2/M3 Macs. ```bash # Get the latest release tag LATEST_VERSION=$(curl -s https://api.github.com/repos/terrateamio/openinfraquote/releases/latest | grep -o '"tag_name": ".*"' | cut -d'"' -f4) # Download and install curl -L "https://github.com/terrateamio/openinfraquote/releases/download/${LATEST_VERSION}/oiq-macos-arm64-${LATEST_VERSION}.tar.gz" -o "oiq.tar.gz" tar -xzf oiq.tar.gz chmod +x oiq sudo mv oiq /usr/local/bin/ rm oiq.tar.gz ``` -------------------------------- ### Match Query Language Example Source: https://openinfraquote.readthedocs.io/en/latest/development/architecture Demonstrates a filter expression in the Match Query Language for selecting AWS instances in a specific region. ```text (type = aws_instance and region = us-east-1) ``` -------------------------------- ### Custom Pricing CSV Format Example Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/supported-providers This example demonstrates the structure of a row in the `prices.csv` file for defining custom pricing rules for AWS RDS instances. It specifies matching conditions and pricing metadata. ```csv AmazonRDS,Database Instance,type=aws_db_instance&values.engine=oracle-se2&values.instance_class=db.t3.medium&values.multi_az=false,end_usage_amount=Inf&purchase_option=reserved®ion=ap-south-1&service_class=instance&service_provider=aws&start_usage_amount=0,0.0343000000,t,USD AmazonRDS,Database Instance,type=aws_db_instance&values.engine=aurora-postgresql&values.instance_class=db.r5.24xlarge&values.multi_az=false,end_usage_amount=Inf&purchase_option=reserved®ion=eu-west-2&service_class=instance&service_provider=aws&start_usage_amount=0,5.1442000000,t,USD ``` -------------------------------- ### Generate Default Summary Output Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/output-formats Use the default 'summary' format to get a human-readable overview of cost changes. This is ideal for reviewers to quickly scan modifications and their cost impact. ```bash oiq price --region us-east-1 ``` -------------------------------- ### Example OPA Rego Policy for Cost Control Source: https://openinfraquote.readthedocs.io/en/latest/advanced/opa This Rego policy defines a rule to deny if the total monthly cost exceeds a budget of $1000. Save this policy in a file named 'policy/terraform/cost.rego'. ```rego package terraform.cost default allow = true deny[msg] { input.price.max > 1000 msg := sprintf("Total monthly cost $%.2f exceeds budget", [input.price.max]) } ``` -------------------------------- ### Build OpenInfraQuote Project Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Ensures the OPAM environment is evaluated and then builds the OpenInfraQuote project using make. ```bash eval "$(opam env)" pds make release ``` -------------------------------- ### Match, Save Output, and Price Separately Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Demonstrates matching a Terraform plan, saving the output to a file, and then pricing that saved output in a separate step. ```bash oiq match --pricesheet prices.csv tfplan.json --output matched.json oiq price --input matched.json --region us-east-1 --format json ``` -------------------------------- ### Generate Terraform Plan Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Create a binary Terraform plan file. This is the first step before analyzing your infrastructure with OpenInfraQuote. ```bash terraform plan -out=tf.plan ``` -------------------------------- ### Provide Custom Usage File Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Use a custom usage file with OpenInfraQuote for more accurate cost estimates tailored to specific workloads, especially for usage-based resources. ```bash oiq price --usage usage.json ``` -------------------------------- ### Run OpenInfraQuote Binary Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Executes the compiled OpenInfraQuote native binary directly from the build directory. ```bash ./build/release/oiq_cli/oiq_cli.native ``` -------------------------------- ### Price from Matched Data File Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Use the `--input` option to provide a pre-processed file of matched data to the `price` step, useful for separating analysis stages. ```bash oiq price --region us-east-1 --input matched.json --format json ``` -------------------------------- ### Print Default Usage File Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Prints the default usage.json file used for estimating usage-based pricing. ```bash oiq print-default-usage ``` -------------------------------- ### Use Environment Variables for CLI Configuration Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Shows how to set environment variables for region, pricesheet, and output format to configure the OpenInfraQuote CLI. ```bash export OIQ_REGION=us-west-2 export OIQ_PRICE_SHEET=prices.csv export OIQ_OUTPUT_FORMAT=markdown oiq match tfplan.json | oiq price ``` -------------------------------- ### Match and Price Terraform Plan Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Run OpenInfraQuote to match resources from a Terraform plan against pricing data and then calculate the estimated costs. ```bash oiq match --pricesheet prices.csv tfplan.json | oiq price --region us-east-1 ``` -------------------------------- ### Specify Usage File on Command Line Source: https://openinfraquote.readthedocs.io/en/latest/advanced/usage-file Use this command to tell OpenInfraQuote to use your custom `usage.json` file for pricing calculations. ```bash oiq price --usage usage.json ``` -------------------------------- ### Print Default Usage File to File Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Prints the default usage.json file and redirects its output to a file named 'usage.json'. ```bash oiq print-default-usage > usage.json ``` -------------------------------- ### View Default Usage File Source: https://openinfraquote.readthedocs.io/en/latest/advanced/usage-file Run this command to display the default usage file content. You can redirect this output to a file to customize it. ```bash oiq print-default-usage ``` ```bash oiq print-default-usage > usage.json ``` -------------------------------- ### Build OpenInfraQuote Docker Image Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Builds a Docker image for OpenInfraQuote with the tag 'openinfraquote:latest' from the current directory. ```bash docker build -t openinfraquote:latest . ``` -------------------------------- ### Clone OpenInfraQuote Repository Source: https://openinfraquote.readthedocs.io/en/latest/development/contributing Clone your forked repository to your local machine to begin development. Ensure you replace YOUR_USERNAME with your GitHub username. ```bash git clone https://github.com/YOUR_USERNAME/openinfraquote.git cd openinfraquote ``` -------------------------------- ### Set Output Format Source: https://openinfraquote.readthedocs.io/en/latest/advanced/environment-variables Configure the output format for the 'price' command using this environment variable. Supported formats include summary, text, json, markdown, and atlantis-comment. ```bash export OIQ_OUTPUT_FORMAT=markdown ``` -------------------------------- ### Match and Price Terraform Plan Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Chains the 'match' and 'price' commands to first parse a Terraform plan and then compute price estimates. ```bash oiq match --pricesheet prices.csv tfplan.json | \ oiq price --region us-east-1 --format summary ``` -------------------------------- ### Apply Advanced Match Query Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Use the `--mq` (match query) option to apply advanced selection logic for pricing, allowing for more precise filtering of resources. ```bash oiq price --mq '(type = aws_s3_bucket and region = us-east-1)' ``` -------------------------------- ### Write Matched Data to File Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Save the output of the `match` step to a file using the `--output` option. This allows for inspection before the `price` step. ```bash oiq match --pricesheet prices.csv tfplan.json --output matched.json ``` -------------------------------- ### Run OpenInfraQuote Docker Container Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Runs a Docker container from the 'openinfraquote:latest' image. ```bash docker run openinfraquote:latest ``` -------------------------------- ### Match Terraform Plan to Pricing Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Parses a Terraform plan or state JSON file and matches resources to pricing entries using a specified pricesheet. ```bash oiq match --pricesheet prices.csv tfplan.json ``` -------------------------------- ### Download Latest Pricing Sheet Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Download and decompress the latest pricing sheet. This CSV file is required for the `match` command. ```bash curl -s https://oiq.terrateam.io/prices.csv.gz | gunzip > prices.csv ``` -------------------------------- ### Estimate Costs from Terraform Plan Source: https://openinfraquote.readthedocs.io/en/latest This snippet shows how to generate a Terraform plan, convert it to JSON, and then use OpenInfraQuote to estimate the monthly cost changes. It's useful for understanding the impact of planned infrastructure modifications. ```bash $ terraform plan -out=tf.plan $ terraform show -json tf.plan > tfplan.json $ oiq match --pricesheet prices.csv tfplan.json | oiq price --region us-east-1 💸 OpenInfraQuote: Monthly Cost Estimate Monthly cost increased by $25.00 📈 Before: $63.85 - $63.85 After: $88.85 - $88.85 🟢 Added: 1 🔴 Removed: 0 ⚪ Existing: 1 Added resources: Resource Monthly Cost ------------------------------------------------------------+-------------- aws_db_instance.example-db $25.00 Existing resources: Resource Monthly Cost ------------------------------------------------------------+-------------- aws_s3_bucket.example-bucket $63.85 ``` -------------------------------- ### Atlantis Custom Workflow for OpenInfraQuote Source: https://openinfraquote.readthedocs.io/en/latest/integrations/atlantis Configure Atlantis to automatically run OpenInfraQuote for cost estimation during the plan phase. This workflow initializes Terraform, plans the changes, shows the plan in JSON format, downloads the latest OpenInfraQuote binary and pricing data, and then uses OpenInfraQuote to match resources and comment on the pull request with cost estimates. ```yaml workflows: default: plan: steps: - init - plan - run: terraform show -json $PLANFILE > $SHOWFILE - run: | ARCH=$(uname -m) if [ "$ARCH" = "x86_64" ]; then OIQ_ARCH="amd64" elif [ "$ARCH" = "aarch64" ]; then OIQ_ARCH="arm64" else exit 1 fi LATEST_VERSION=$(curl -s https://api.github.com/repos/terrateamio/openinfraquote/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') NEED_UPDATE=true if [ -f "/tmp/oiq" ]; then INSTALLED_VERSION=$(/tmp/oiq --version | sed 's/^v//') if [ "$INSTALLED_VERSION" = "$LATEST_VERSION" ]; then NEED_UPDATE=false fi fi if $NEED_UPDATE; then OIQ_TAR_URL="https://github.com/terrateamio/openinfraquote/releases/download/v${LATEST_VERSION}/oiq-linux-${OIQ_ARCH}-v${LATEST_VERSION}.tar.gz" curl -sL "$OIQ_TAR_URL" -o /tmp/oiq.tar.gz tar -xzf /tmp/oiq.tar.gz -C /tmp chmod +x /tmp/oiq fi PRICE_FILE="/tmp/prices.csv" PRICE_GZ_FILE="/tmp/prices.csv.gz" NEED_UPDATE=true if [ -f "$PRICE_FILE" ]; then LAST_MODIFIED=$(stat -c %Y "$PRICE_FILE") NOW=$(date +%s) AGE=$(( (NOW - LAST_MODIFIED) / 86400 )) if [ "$AGE" -lt 7 ]; then NEED_UPDATE=false fi fi if $NEED_UPDATE; then curl -s https://oiq.terrateam.io/prices.csv.gz -o "$PRICE_GZ_FILE" gunzip -f "$PRICE_GZ_FILE" fi - run: /tmp/oiq match --pricesheet /tmp/prices.csv $SHOWFILE | /tmp/oiq price --format=atlantis-comment repos: - id: /.*/ workflow: default ``` -------------------------------- ### GitLab CI Pipeline for OpenInfraQuote Source: https://openinfraquote.readthedocs.io/en/latest/integrations/gitlab-ci This `.gitlab-ci.yml` configuration defines a pipeline with stages for Terraform planning and OpenInfraQuote cost estimation. It includes rules to trigger only for merge requests affecting Terraform files and specifies dependencies between jobs. ```yaml stages: - plan - cost variables: PLAN_JSON: plan.json COST_MD: cost_estimate.md plan: stage: plan image: name: hashicorp/terraform:1.2.9 entrypoint: [""] script: - env - terraform init - terraform plan -out=tfplan.binary - terraform show -json tfplan.binary > ${PLAN_JSON} artifacts: paths: - ${PLAN_JSON} expire_in: 1 week rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: - "**/*.tf" cost-estimate: stage: cost image: name: ubuntu:22.04 script: - env - apt-get update && apt-get install -y curl jq tar gzip - ARCH=$(uname -m) - 'if [ "$ARCH" = "x86_64" ]; then OIQ_ARCH="amd64"; elif [ "$ARCH" = "aarch64" ]; then OIQ_ARCH="arm64"; else exit 1; fi' - LATEST_VERSION=$(curl -s https://api.github.com/repos/terrateamio/openinfraquote/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') - OIQ_TAR_URL="https://github.com/terrateamio/openinfraquote/releases/download/v${LATEST_VERSION}/oiq-linux-${OIQ_ARCH}-v${LATEST_VERSION}.tar.gz" - curl -sL "$OIQ_TAR_URL" -o oiq.tar.gz - tar -xzf oiq.tar.gz - chmod +x oiq - PRICE_FILE="prices.csv" - PRICE_GZ_FILE="prices.csv.gz" - curl -s https://oiq.terrateam.io/prices.csv.gz -o "$PRICE_GZ_FILE" - gunzip -f "$PRICE_GZ_FILE" - ./oiq match --pricesheet "$PRICE_FILE" ${PLAN_JSON} | ./oiq price --format markdown > ${COST_MD} artifacts: paths: - ${COST_MD} rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: - "**/*.tf" needs: - job: plan artifacts: true dependencies: - plan cost-comment: stage: cost image: ubuntu:22.04 script: - env - apt-get update && apt-get install -y curl - | curl -v --request POST --header "PRIVATE-TOKEN: ${GITLAB_OIQ_TOKEN}" --data-urlencode "body=$(cat ${COST_MD})" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}/notes" rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' needs: - job: cost-estimate artifacts: true dependencies: - cost-estimate ``` -------------------------------- ### Clone OpenInfraQuote Repository Source: https://openinfraquote.readthedocs.io/en/latest/development/build-from-source Clones the OpenInfraQuote source code from GitHub and navigates into the project directory. ```bash git clone https://github.com/terrateamio/openinfraquote.git cd openinfraquote ``` -------------------------------- ### OpenInfraQuote High-Level Pipeline Source: https://openinfraquote.readthedocs.io/en/latest/development/architecture Illustrates the data flow through OpenInfraQuote's processing pipeline, from Terraform input to final output. ```text Terraform Plan/State → Match → Price → Output │ │ │ ▼ ▼ ▼ Match Set Pricing Format ``` -------------------------------- ### Set Pricing Sheet Path Source: https://openinfraquote.readthedocs.io/en/latest/advanced/environment-variables Use this environment variable to specify the local path to your pricing sheet (prices.csv). ```bash export OIQ_PRICE_SHEET=./prices.csv ``` -------------------------------- ### Set OpenInfraQuote Output Format Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Specify the desired output format for OpenInfraQuote results. Supported formats include `summary`, `text`, `json`, `markdown`, and `atlantis-comment`. ```bash oiq price --format json ``` ```bash oiq price --format markdown ``` ```bash oiq price --format summary ``` -------------------------------- ### Generate Verbose Text Output Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/output-formats Employ the 'text' format for detailed pricing data, match metadata, and per-resource cost differences. This format is useful for audits or debugging purposes. ```bash oiq price --format text ``` -------------------------------- ### Terraform Plan Workflow for GitHub Actions Source: https://openinfraquote.readthedocs.io/en/latest/integrations/github-actions This workflow triggers on pull requests that modify Terraform files. It checks out the code, sets up Terraform, generates a plan, converts it to JSON, and then uses the OpenInfraQuote action to comment on the PR with the cost estimate. ```yaml name: Terraform Plan on: pull_request: paths: - '**.tf' - '**.tfvars' permissions: pull-requests: write jobs: plan: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - name: Set up Terraform uses: hashicorp/setup-terraform@v3 - name: Terraform Init run: terraform init - name: Terraform Plan run: terraform plan -out=tfplan.binary - name: Convert plan to JSON run: terraform show -json tfplan.binary > tfplan.json - name: Run OpenInfraQuote uses: terrateamio/openinfraquote-action@v1 with: plan-path: tfplan.json comment-on-pr: true ``` -------------------------------- ### Estimate Costs from Terraform State Source: https://openinfraquote.readthedocs.io/en/latest This snippet demonstrates how to pull Terraform state, convert it to JSON, and then use OpenInfraQuote to estimate the current monthly infrastructure cost. This is useful for auditing existing deployments. ```bash $ terraform state pull | terraform show --json > tfstate.json $ oiq match --pricesheet prices.csv tfstate.json | oiq price --region us-east-1 💸 OpenInfraQuote: Monthly Cost Estimate No change in monthly cost Total: $127.70 Resources: Resource Monthly Cost ------------------------------------------------------------+-------------- aws_s3_bucket.example $63.85 aws_s3_bucket.example2 $63.85 ``` -------------------------------- ### Convert Terraform Plan to JSON Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Convert the binary Terraform plan file into a JSON format that OpenInfraQuote can process. ```bash terraform show -json tf.plan > tfplan.json ``` -------------------------------- ### Generate Cost Estimate in JSON Format Source: https://openinfraquote.readthedocs.io/en/latest/advanced/opa Use this command to generate a structured cost estimate in JSON format, which is compatible with Conftest for policy evaluation. Ensure you have the pricesheet and plan files available. ```bash oiq match --pricesheet prices.csv tfplan.json | oiq price --region us-east-1 --format=json > estimate.json ``` -------------------------------- ### Run Conftest Policy Evaluation Source: https://openinfraquote.readthedocs.io/en/latest/advanced/opa Execute Conftest to test the generated estimate against the defined Rego policy. This command checks 'estimate.json' using policies located in 'policy/' with the namespace 'terraform.cost'. A non-zero exit status indicates policy violations. ```bash conftest test estimate.json --policy policy/ --namespace terraform.cost ``` -------------------------------- ### Compute Price Estimates Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/cli-reference Computes price estimates from a previously matched file or piped input, filtering by region and specifying the output format. ```bash oiq price --region us-east-1 --format summary ``` -------------------------------- ### Generate JSON Output Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/output-formats Utilize the 'json' format to obtain structured data suitable for machine parsing, integrations, or further automated processing. This provides a machine-readable representation of pricing information. ```bash oiq price --format json ``` -------------------------------- ### Set Region for Pricing Source: https://openinfraquote.readthedocs.io/en/latest/advanced/environment-variables Specify the region to be used when estimating prices with this environment variable. ```bash export OIQ_REGION=us-west-2 ``` -------------------------------- ### Generate Markdown Output Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/output-formats The 'markdown' format is optimized for documentation and pull request comments, presenting cost estimates and resource changes in a clear, structured table format. ```bash oiq price --format markdown ``` -------------------------------- ### Push Changes to Fork Source: https://openinfraquote.readthedocs.io/en/latest/development/contributing Push your committed changes from your local branch to your forked repository on GitHub. ```bash git push origin my-feature-branch ``` -------------------------------- ### Atlantis Comment Output Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/output-formats Use this format for automated comments in an Atlantis PR workflow. It provides a human-readable summary of cost changes. ```bash oiq price --format atlantis-comment ``` ```text ╔══════════════════════════════════════════════════════════╗ ║ 💸 OpenInfraQuote Monthly Cost Estimate ║ ╚══════════════════════════════════════════════════════════╝ No change in monthly cost Before: $63.85 - $63.85 After: $63.85 - $63.85 🟢 Added: 1 🔴 Removed: 1 ⚪ Existing: 1 Added resources: Resource Type Before After example4 aws_s3_bucket $63.85 - $63.85 $63.85 - $63.85 Removed resources: Resource Type Before After example2 aws_s3_bucket $63.85 - $63.85 -$63.85 - -$63.85 Existing resources: Resource Type Before After example aws_s3_bucket $63.85 - $63.85 $63.85 - $63.85 ``` -------------------------------- ### Create a New Feature Branch Source: https://openinfraquote.readthedocs.io/en/latest/development/contributing Create a new branch for your feature or bug fix to keep your changes organized and separate from the main development line. ```bash git checkout -b my-feature-branch ``` -------------------------------- ### Commit Changes Source: https://openinfraquote.readthedocs.io/en/latest/development/contributing Commit your staged changes with a clear and descriptive message summarizing the modifications made. ```bash git commit -m "Your descriptive commit message" ``` -------------------------------- ### Specify Pricing Region Source: https://openinfraquote.readthedocs.io/en/latest/getting-started/basic-usage Apply pricing specific to a particular AWS region using the `--region` flag. This is a shortcut for setting a match query. ```bash oiq price --region us-east-1 ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.