* factories refactor doc * Adds file schema and filesystem organization * Update 20231106-factories.md * move factories out of blueprints and create new factories README * align factory in billing-account module * align factory in dataplex-datascan module * align factory in billing-account module * align factory in net-firewall-policy module * align factory in dns-response-policy module * align factory in net-vpc-firewall module * align factory in net-vpc module * align factory variable names in FAST * remove decentralized firewall blueprint * bump terraform version * bump module versions * update top-level READMEs * move project factory to modules * fix variable names and tests * tfdoc * remove changelog link * add project factory to top-level README * fix cludrun eventarc diff * fix README * fix cludrun eventarc diff --------- Co-authored-by: Simone Ruffilli <sruffilli@google.com>
Containerized Nginx on Container Optimized OS
This module manages a cloud-config configuration that starts a containerized Nginx service on Container Optimized OS, using the hello demo image.
The resulting cloud-config can be customized in a number of ways:
- a custom Nginx configuration can be set in
/etc/nginx/conf.dusing thenginx_configvariable - additional files (eg for hosts or zone files) can be passed in via the
filesvariable - a completely custom
cloud-configcan be passed in via thecloud_configvariable, and additional template variables can be passed in viaconfig_variables
The default instance configuration inserts iptables rules to allow traffic on port 80.
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.
For convenience during development or for simple use cases, the module can optionally manage a single instance via the test_instance variable. If the instance is not needed the instance*tf files can be safely removed. Refer to the top-level README for more details on the included instance.
Examples
Default configuration
This example will create a cloud-config that uses the module's defaults, creating a simple hello web server showing host name and request id.
module "cos-nginx" {
source = "./fabric/modules/cloud-config-container/nginx"
}
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=1 resources=1
Variables
| name | description | type | required | default |
|---|---|---|---|---|
| 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({…})) |
{} |
|
| image | Nginx container image. | string |
"nginxdemos/hello:plain-text" |
|
| nginx_config | Nginx configuration path, if null container default will be used. | string |
null |
|
| 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. |