mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-07-25 11:05:59 +00:00
![]() Hi there, Here is an attempt to implement canary releases ( #1252 ). This is the first time I write golang and make a terraform contribution, I opened the PR to obtain feedback and advices so please let me know how I can improve this code! In addition I used `make fmt` to format the code but left some lines bigger than 80 characters, do I need to split them ? I tested the feature against a project with the following configuration: ``` resource "google_compute_health_check" "mikael-hackathon-healthcheck" { name = "mikael-hackathon-healthcheck" check_interval_sec = 1 timeout_sec = 1 healthy_threshold = 2 unhealthy_threshold = 10 http_health_check { request_path = "/" port = "80" } } resource "google_compute_instance_template" "mikael-hackaton-template" { name_prefix = "mikael-hackaton-" description = "This template is used to create app server instances." tags = ["loadbalanced", "internal-web", "hackaton"] labels = { environment = "hackaton" } instance_description = "Hackaton demo rolling upgrade" machine_type = "n1-standard-1" can_ip_forward = false scheduling { automatic_restart = true on_host_maintenance = "MIGRATE" } disk { source_image = "debian-cloud/debian-9" disk_type = "pd-standard" disk_size_gb = 20 auto_delete = true boot = true } network_interface { network = "default" access_config = {} } service_account { email = "${google_service_account.mikael-hackaton.email}" scopes = ["cloud-platform"] } lifecycle { create_before_destroy = true } metadata_startup_script = "apt-get update && apt-get install -y apache2 && echo I am stable version at $(hostname) > /var/www/html/index.html" } resource "google_compute_instance_template" "mikael-hackaton-template-canary" { name_prefix = "mikael-hackaton-canary" description = "This template is used to create app server instances." tags = ["loadbalanced", "internal-web", "hackaton"] labels = { environment = "hackaton" } instance_description = "Hackaton demo rolling upgrade" machine_type = "n1-standard-1" can_ip_forward = false scheduling { automatic_restart = true on_host_maintenance = "MIGRATE" } disk { source_image = "debian-cloud/debian-9" disk_type = "pd-standard" disk_size_gb = 20 auto_delete = true boot = true } network_interface { network = "default" access_config = {} } service_account { email = "${google_service_account.mikael-hackaton.email}" scopes = ["cloud-platform"] } lifecycle { create_before_destroy = true } metadata_startup_script = "apt-get update && apt-get install -y apache2 && echo I am a canary at $(hostname) > /var/www/html/index.html" } resource "google_compute_target_pool" "mikael-hackaton-target-pool" { name = "mikael-hackaton-target-pool" } resource "google_compute_instance_group_manager" "mikael-hackaton-manager" { name = "mikael-hackaton-manager" base_instance_name = "mikael-hackaton" #instance_template = "${google_compute_instance_template.mikael-hackaton-template.self_link}" update_strategy = "ROLLING_UPDATE" zone = "${var.zone}" target_pools = ["${google_compute_target_pool.mikael-hackaton-target-pool.self_link}"] target_size = 5 version { name = "primary" instance_template = "${google_compute_instance_template.mikael-hackaton-template.self_link}" } version { name = "canary" instance_template = "${google_compute_instance_template.mikael-hackaton-template-canary.self_link}" target_size_fixed = 1 } named_port { name = "http" port = 80 } auto_healing_policies { health_check = "${google_compute_health_check.mikael-hackathon-healthcheck.self_link}" initial_delay_sec = 10 } rolling_update_policy { type = "PROACTIVE" minimal_action = "REPLACE" max_surge_percent = 100 max_unavailable_percent = 50 min_ready_sec = 5 } } ``` |
||
---|---|---|
.. | ||
bigquery_dataset.html.markdown | ||
bigquery_table.html.markdown | ||
bigtable_instance.html.markdown | ||
bigtable_table.html.markdown | ||
cloudbuild_trigger.html.markdown | ||
cloudfunctions_function.html.markdown | ||
cloudiot_registry.html.markdown | ||
compute_address.html.markdown | ||
compute_autoscaler.html.markdown | ||
compute_backend_bucket.html.markdown | ||
compute_backend_service.html.markdown | ||
compute_disk.html.markdown | ||
compute_firewall.html.markdown | ||
compute_forwarding_rule.html.markdown | ||
compute_global_address.html.markdown | ||
compute_global_forwarding_rule.html.markdown | ||
compute_health_check.html.markdown | ||
compute_http_health_check.html.markdown | ||
compute_https_health_check.html.markdown | ||
compute_image.html.markdown | ||
compute_instance_group_manager.html.markdown | ||
compute_instance_group.html.markdown | ||
compute_instance_template.html.markdown | ||
compute_instance.html.markdown | ||
compute_network_peering.html.markdown | ||
compute_network.html.markdown | ||
compute_project_metadata_item.html.markdown | ||
compute_project_metadata.html.markdown | ||
compute_region_autoscaler.html.markdown | ||
compute_region_backend_service.html.markdown | ||
compute_region_instance_group_manager.html.markdown | ||
compute_route.html.markdown | ||
compute_router_interface.html.markdown | ||
compute_router_peer.html.markdown | ||
compute_router.html.markdown | ||
compute_security_policy.html.markdown | ||
compute_shared_vpc_host_project.html.markdown | ||
compute_shared_vpc_service_project.html.markdown | ||
compute_snapshot.html.markdown | ||
compute_ssl_certificate.html.markdown | ||
compute_ssl_policy.html.markdown | ||
compute_subnetwork_iam.html.markdown | ||
compute_subnetwork.html.markdown | ||
compute_target_http_proxy.html.markdown | ||
compute_target_https_proxy.html.markdown | ||
compute_target_pool.html.markdown | ||
compute_target_ssl_proxy.html.markdown | ||
compute_target_tcp_proxy.html.markdown | ||
compute_url_map.html.markdown | ||
compute_vpn_gateway.html.markdown | ||
compute_vpn_tunnel.html.markdown | ||
container_cluster.html.markdown | ||
container_node_pool.html.markdown | ||
dataflow_job.html.markdown | ||
dataproc_cluster.html.markdown | ||
dataproc_job.html.markdown | ||
dns_managed_zone.markdown | ||
dns_record_set.markdown | ||
endpoints_service.html.markdown | ||
google_folder_iam_binding.html.markdown | ||
google_folder_iam_member.html.markdown | ||
google_folder_iam_policy.html.markdown | ||
google_folder_organization_policy.html.markdown | ||
google_folder.html.markdown | ||
google_kms_crypto_key_iam_binding.html.markdown | ||
google_kms_crypto_key_iam_member.html.markdown | ||
google_kms_crypto_key.html.markdown | ||
google_kms_key_ring_iam.html.markdown | ||
google_kms_key_ring.html.markdown | ||
google_organization_iam_binding.md | ||
google_organization_iam_custom_role.html.markdown | ||
google_organization_iam_member.md | ||
google_organization_iam_policy.md | ||
google_organization_policy.html.markdown | ||
google_project_iam_custom_role.html.markdown | ||
google_project_iam.html.markdown | ||
google_project_organization_policy.html.markdown | ||
google_project_service.html.markdown | ||
google_project_services.html.markdown | ||
google_project.html.markdown | ||
google_service_account_iam.html.markdown | ||
google_service_account_key.html.markdown | ||
google_service_account.html.markdown | ||
logging_billing_account_exclusion.html.markdown | ||
logging_billing_account_sink.html.markdown | ||
logging_folder_exclusion.html.markdown | ||
logging_folder_sink.html.markdown | ||
logging_organization_exclusion.html.markdown | ||
logging_organization_sink.html.markdown | ||
logging_project_exclusion.html.markdown | ||
logging_project_sink.html.markdown | ||
pubsub_subscription_iam.html.markdown | ||
pubsub_subscription.html.markdown | ||
pubsub_topic_iam.html.markdown | ||
pubsub_topic.html.markdown | ||
redis_instance.html.markdown | ||
resourcemanager_lien.html.markdown | ||
runtimeconfig_config.html.markdown | ||
runtimeconfig_variable.html.markdown | ||
sourcerepo_repository.html.markdown | ||
spanner_database_iam.html.markdown | ||
spanner_database.html.markdown | ||
spanner_instance_iam.html.markdown | ||
spanner_instance.html.markdown | ||
sql_database_instance.html.markdown | ||
sql_database.html.markdown | ||
sql_user.html.markdown | ||
storage_bucket_acl.html.markdown | ||
storage_bucket_iam.html.markdown | ||
storage_bucket_object.html.markdown | ||
storage_bucket.html.markdown | ||
storage_default_object_acl.html.markdown | ||
storage_notification.html.markdown | ||
storage_object_acl.html.markdown | ||
usage_export_bucket.html.markdown |