cloud-foundation-fabric/modules/cloud-config-container/bindplane
apichick 73e286c0ab
Added spanner-instance module (#2372)
2024-06-23 17:25:22 +00:00
..
images New Bindplane cloud-config-container setup (#2272) 2024-05-14 14:45:39 +02:00
README.md New Bindplane cloud-config-container setup (#2272) 2024-05-14 14:45:39 +02:00
cloud-config.yaml New Bindplane cloud-config-container setup (#2272) 2024-05-14 14:45:39 +02:00
main.tf New Bindplane cloud-config-container setup (#2272) 2024-05-14 14:45:39 +02:00
outputs.tf New Bindplane cloud-config-container setup (#2272) 2024-05-14 14:45:39 +02:00
variables.tf New Bindplane cloud-config-container setup (#2272) 2024-05-14 14:45:39 +02:00
versions.tf Added spanner-instance module (#2372) 2024-06-23 17:25:22 +00:00

README.md

Containerized Bindplane on Container Optimized OS

This module manages a cloud-config configuration that starts a containerized Bindplane service on Container Optimized OS, using the official Bindplane EE image provided by observIQ and documented in the official documentation page when selecting "Docker" as target platform.

The resulting cloud-config can be customized in a number of ways:

  • a custom Bindplane configuration can be set in Docker compose file available in /run/bindplane/docker-compose.yml using the bindplane_config variable
  • additional files can be passed in via the files variable
  • a completely custom cloud-config can be passed in via the cloud_config variable, and additional template variables can be passed in via config_variables

The default instance configuration inserts iptables rules to allow traffic on port 3001.

Logging and monitoring are enabled via the Google Cloud Logging agent configured for the instance via the google-logging-enabled metadata property, and the Node Problem Detector service started by default on boot.

The module renders the generated cloud config in the cloud_config output, to be used in instances or instance templates via the user-data metadata.

Setup

Please refer to the examples below for a sample terraform code for deploying a Bindplane server on GCP Compute VM with COS. After setting up the terraform code run the following commands:

terraform init
terraform apply

Wait for a couple of minutes for the VM to be bootstrapped then connect via IAP tunnel using the following command (substitute the VM name, project and zone according to your configuration):

gcloud compute ssh $VM_NAME --project $PROJECT --zone $ZONE -- -L 3001:127.0.0.1:3001 -N -q -f

Navigate to http://localhost:3001 to access the Bindplane console, the following login page should be displayed.

Bindplane Login page

Examples

Default configuration

This example will create a cloud-config that uses the module's defaults, creating a simple bindplane server with default (latest) docker image versions and setting localhost as remote url (suited only for local development).

module "cos-nginx" {
  source   = "./fabric/modules/cloud-config-container/bindplane"
  password = "secret"
}

module "vm-nginx-tls" {
  source     = "./fabric/modules/compute-vm"
  project_id = "my-project"
  zone       = "europe-west8-b"
  name       = "cos-nginx"
  network_interfaces = [{
    network    = "default"
    subnetwork = "gce"
  }]
  metadata = {
    user-data              = module.cos-nginx.cloud_config
    google-logging-enabled = true
  }
  boot_disk = {
    initialize_params = {
      image = "projects/cos-cloud/global/images/family/cos-stable"
      type  = "pd-ssd"
      size  = 10
    }
  }
  tags = ["http-server", "ssh"]
}
# tftest modules=2 resources=2

Variables

name description type required default
password Default admin user password. string
bindplane_config Bindplane configurations. object({…}) {}
cloud_config Cloud config template path. If null default will be used. string null
config_variables Additional variables used to render the cloud-config and Nginx templates. map(any) {}
file_defaults Default owner and permissions for files. object({…}) {…}
files Map of extra files to create on the instance, path as key. Owner and permissions will use defaults if null. map(object({…})) {}
runcmd_post Extra commands to run after starting nginx. list(string) []
runcmd_pre Extra commands to run before starting nginx. list(string) []
users List of additional usernames to be created. list(object({…})) […]

Outputs

name description sensitive
cloud_config Rendered cloud-config file to be passed as user-data instance metadata.