Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ci][terraform][cloud] tags/labels with metadata #792

Merged
merged 20 commits into from
Apr 25, 2022

Conversation

v1v
Copy link
Member

@v1v v1v commented Apr 19, 2022

What does this PR do?

Standardise the below tags/labels in the terraform resources for AWS/GCP:

  • environment => static value
  • repo. => static value
  • branch => dynamic value
  • build => dynamic value
  • created_date => dynamic value

Why is it important?

Help with tearing down any of the ephemeral resources which were not successfully removed as part of the system tests.

Implementation details

  • Those tag/labels are lowercase based to be GCP/AWS compliance
  • environment=CI will allow to filter all those cloud resources which were created in the CI
  • While created_date will help to filter those which were older than X days or X hours, since it's Unix epoch time based.
  • branch and build will help to identify what build in the CI and what PR, Branch or Tag created those resources.

Further details

BUILD_ID
The current build ID, identical to BUILD_NUMBER for builds created in 1.597+, but a YYYY-MM-DD_hh-mm-ss timestamp for older builds.

BRANCH_NAME
For a multibranch project, this will be set to the name of the branch being built, for example in case you wish to deploy to production from master but not from feature branches; if corresponding to some kind of change request, the name is generally arbitrary (refer to CHANGE_ID and CHANGE_TARGET).

Test

seems to produce the right labels

terraform_1  |       + tags                                 = {
terraform_1  |           + "Name" = "elastic-package-test-73109"
terraform_1  |         }
terraform_1  |       + tags_all                             = {
terraform_1  |           + "Name"         = "elastic-package-test-73109"
terraform_1  |           + "branch"       = "pr-792"
terraform_1  |           + "build"        = "13"
terraform_1  |           + "created_date" = "1650543466706"
terraform_1  |           + "environment"  = "ci"
terraform_1  |           + "repo"         = "elastic-package"
terraform_1  |         }
terraform_1  |       + labels               = {
terraform_1  |           + "branch"       = "pr-792"
terraform_1  |           + "build"        = "13"
terraform_1  |           + "created_date" = "1650543466706"
terraform_1  |           + "environment"  = "ci"
terraform_1  |           + "repo"         = "elastic-package"
terraform_1  |         }

@v1v v1v added automation Team:Automation Label for the Observability productivity team labels Apr 19, 2022
@v1v v1v self-assigned this Apr 19, 2022
@elasticmachine
Copy link
Collaborator

elasticmachine commented Apr 19, 2022

💚 Build Succeeded

the below badges are clickable and redirect to their specific view in the CI or DOCS
Pipeline View Test View Changes Artifacts preview preview

Expand to view the summary

Build stats

  • Start Time: 2022-04-21T12:49:47.089+0000

  • Duration: 25 min 29 sec

Test stats 🧪

Test Results
Failed 0
Passed 699
Skipped 0
Total 699

🤖 GitHub comments

To re-run your PR in the CI, just comment with:

  • /test : Re-trigger the build.

.ci/Jenkinsfile Outdated Show resolved Hide resolved
pull_request = var.PULL_REQUEST
ci_build_number = var.CI_BUILD_NUMBER
Environment = "CI"
Owner = "elastic-package"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it the repository name? Let's pick a single label.

@mtojek mtojek self-requested a review April 20, 2022 12:41
Copy link
Contributor

@mtojek mtojek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have also checked Terraform logs in the internal bucket:

Attaching to elastic-package-service_terraform_1
�[36mterraform_1  |�[0m + cp -r /stage/. /workspace
�[36mterraform_1  |�[0m + trap cleanup EXIT INT TERM
�[36mterraform_1  |�[0m + terraform init
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Initializing the backend...
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Initializing provider plugins...
�[36mterraform_1  |�[0m - Reusing previous version of hashicorp/google from the dependency lock file
�[36mterraform_1  |�[0m - Installing hashicorp/google v4.5.0...
�[36mterraform_1  |�[0m - Installed hashicorp/google v4.5.0 (signed by HashiCorp)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Terraform has been successfully initialized!
�[36mterraform_1  |�[0m + terraform plan
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
�[36mterraform_1  |�[0m   + create
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Terraform will perform the following actions:
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m   # google_compute_instance.default will be created
�[36mterraform_1  |�[0m   + resource "google_compute_instance" "default" {
�[36mterraform_1  |�[0m       + can_ip_forward       = false
�[36mterraform_1  |�[0m       + cpu_platform         = (known after apply)
�[36mterraform_1  |�[0m       + current_status       = (known after apply)
�[36mterraform_1  |�[0m       + deletion_protection  = false
�[36mterraform_1  |�[0m       + guest_accelerator    = (known after apply)
�[36mterraform_1  |�[0m       + id                   = (known after apply)
�[36mterraform_1  |�[0m       + instance_id          = (known after apply)
�[36mterraform_1  |�[0m       + label_fingerprint    = (known after apply)
�[36mterraform_1  |�[0m       + labels               = {
�[36mterraform_1  |�[0m           + "Branch"      = "PR-792"
�[36mterraform_1  |�[0m           + "Build"       = "3"
�[36mterraform_1  |�[0m           + "CreatedDate" = "unknown"
�[36mterraform_1  |�[0m           + "Environment" = "CI"
�[36mterraform_1  |�[0m           + "Owner"       = "elastic-package"
�[36mterraform_1  |�[0m           + "RunId"       = "18571"
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m       + machine_type         = "e2-micro"
�[36mterraform_1  |�[0m       + metadata_fingerprint = (known after apply)
�[36mterraform_1  |�[0m       + min_cpu_platform     = (known after apply)
�[36mterraform_1  |�[0m       + name                 = "elastic-package-system-test-18571"
�[36mterraform_1  |�[0m       + project              = (known after apply)
�[36mterraform_1  |�[0m       + self_link            = (known after apply)
�[36mterraform_1  |�[0m       + tags_fingerprint     = (known after apply)
�[36mterraform_1  |�[0m       + zone                 = "us-central1-a"
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + boot_disk {
�[36mterraform_1  |�[0m           + auto_delete                = true
�[36mterraform_1  |�[0m           + device_name                = (known after apply)
�[36mterraform_1  |�[0m           + disk_encryption_key_sha256 = (known after apply)
�[36mterraform_1  |�[0m           + kms_key_self_link          = (known after apply)
�[36mterraform_1  |�[0m           + mode                       = "READ_WRITE"
�[36mterraform_1  |�[0m           + source                     = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + initialize_params {
�[36mterraform_1  |�[0m               + image  = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-2004-focal-v20220419a"
�[36mterraform_1  |�[0m               + labels = (known after apply)
�[36mterraform_1  |�[0m               + size   = (known after apply)
�[36mterraform_1  |�[0m               + type   = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + confidential_instance_config {
�[36mterraform_1  |�[0m           + enable_confidential_compute = (known after apply)
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + network_interface {
�[36mterraform_1  |�[0m           + ipv6_access_type   = (known after apply)
�[36mterraform_1  |�[0m           + name               = (known after apply)
�[36mterraform_1  |�[0m           + network            = "default"
�[36mterraform_1  |�[0m           + network_ip         = (known after apply)
�[36mterraform_1  |�[0m           + stack_type         = (known after apply)
�[36mterraform_1  |�[0m           + subnetwork         = (known after apply)
�[36mterraform_1  |�[0m           + subnetwork_project = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + access_config {
�[36mterraform_1  |�[0m               + nat_ip       = (known after apply)
�[36mterraform_1  |�[0m               + network_tier = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + reservation_affinity {
�[36mterraform_1  |�[0m           + type = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + specific_reservation {
�[36mterraform_1  |�[0m               + key    = (known after apply)
�[36mterraform_1  |�[0m               + values = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + scheduling {
�[36mterraform_1  |�[0m           + automatic_restart   = (known after apply)
�[36mterraform_1  |�[0m           + min_node_cpus       = (known after apply)
�[36mterraform_1  |�[0m           + on_host_maintenance = (known after apply)
�[36mterraform_1  |�[0m           + preemptible         = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + node_affinities {
�[36mterraform_1  |�[0m               + key      = (known after apply)
�[36mterraform_1  |�[0m               + operator = (known after apply)
�[36mterraform_1  |�[0m               + values   = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m     }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Plan: 1 to add, 0 to change, 0 to destroy.
�[36mterraform_1  |�[0m + terraform apply -auto-approve
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
�[36mterraform_1  |�[0m   + create
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Terraform will perform the following actions:
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m   # google_compute_instance.default will be created
�[36mterraform_1  |�[0m   + resource "google_compute_instance" "default" {
�[36mterraform_1  |�[0m       + can_ip_forward       = false
�[36mterraform_1  |�[0m       + cpu_platform         = (known after apply)
�[36mterraform_1  |�[0m       + current_status       = (known after apply)
�[36mterraform_1  |�[0m       + deletion_protection  = false
�[36mterraform_1  |�[0m       + guest_accelerator    = (known after apply)
�[36mterraform_1  |�[0m       + id                   = (known after apply)
�[36mterraform_1  |�[0m       + instance_id          = (known after apply)
�[36mterraform_1  |�[0m       + label_fingerprint    = (known after apply)
�[36mterraform_1  |�[0m       + labels               = {
�[36mterraform_1  |�[0m           + "Branch"      = "PR-792"
�[36mterraform_1  |�[0m           + "Build"       = "3"
�[36mterraform_1  |�[0m           + "CreatedDate" = "unknown"
�[36mterraform_1  |�[0m           + "Environment" = "CI"
�[36mterraform_1  |�[0m           + "Owner"       = "elastic-package"
�[36mterraform_1  |�[0m           + "RunId"       = "18571"
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m       + machine_type         = "e2-micro"
�[36mterraform_1  |�[0m       + metadata_fingerprint = (known after apply)
�[36mterraform_1  |�[0m       + min_cpu_platform     = (known after apply)
�[36mterraform_1  |�[0m       + name                 = "elastic-package-system-test-18571"
�[36mterraform_1  |�[0m       + project              = (known after apply)
�[36mterraform_1  |�[0m       + self_link            = (known after apply)
�[36mterraform_1  |�[0m       + tags_fingerprint     = (known after apply)
�[36mterraform_1  |�[0m       + zone                 = "us-central1-a"
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + boot_disk {
�[36mterraform_1  |�[0m           + auto_delete                = true
�[36mterraform_1  |�[0m           + device_name                = (known after apply)
�[36mterraform_1  |�[0m           + disk_encryption_key_sha256 = (known after apply)
�[36mterraform_1  |�[0m           + kms_key_self_link          = (known after apply)
�[36mterraform_1  |�[0m           + mode                       = "READ_WRITE"
�[36mterraform_1  |�[0m           + source                     = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + initialize_params {
�[36mterraform_1  |�[0m               + image  = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-2004-focal-v20220419a"
�[36mterraform_1  |�[0m               + labels = (known after apply)
�[36mterraform_1  |�[0m               + size   = (known after apply)
�[36mterraform_1  |�[0m               + type   = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + confidential_instance_config {
�[36mterraform_1  |�[0m           + enable_confidential_compute = (known after apply)
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + network_interface {
�[36mterraform_1  |�[0m           + ipv6_access_type   = (known after apply)
�[36mterraform_1  |�[0m           + name               = (known after apply)
�[36mterraform_1  |�[0m           + network            = "default"
�[36mterraform_1  |�[0m           + network_ip         = (known after apply)
�[36mterraform_1  |�[0m           + stack_type         = (known after apply)
�[36mterraform_1  |�[0m           + subnetwork         = (known after apply)
�[36mterraform_1  |�[0m           + subnetwork_project = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + access_config {
�[36mterraform_1  |�[0m               + nat_ip       = (known after apply)
�[36mterraform_1  |�[0m               + network_tier = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + reservation_affinity {
�[36mterraform_1  |�[0m           + type = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + specific_reservation {
�[36mterraform_1  |�[0m               + key    = (known after apply)
�[36mterraform_1  |�[0m               + values = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m       + scheduling {
�[36mterraform_1  |�[0m           + automatic_restart   = (known after apply)
�[36mterraform_1  |�[0m           + min_node_cpus       = (known after apply)
�[36mterraform_1  |�[0m           + on_host_maintenance = (known after apply)
�[36mterraform_1  |�[0m           + preemptible         = (known after apply)
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m           + node_affinities {
�[36mterraform_1  |�[0m               + key      = (known after apply)
�[36mterraform_1  |�[0m               + operator = (known after apply)
�[36mterraform_1  |�[0m               + values   = (known after apply)
�[36mterraform_1  |�[0m             }
�[36mterraform_1  |�[0m         }
�[36mterraform_1  |�[0m     }
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Plan: 1 to add, 0 to change, 0 to destroy.
�[36mterraform_1  |�[0m google_compute_instance.default: Creating...
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m Error: Error creating instance: googleapi: Error 400: Invalid value for field 'resource.labels': ''. Label key 'Owner' violates format constraints. The key must start with a lowercase character, can only contain lowercase letters, numeric characters, underscores and dashes. The key can be at most 63 characters long. International characters are allowed., invalid
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m   with google_compute_instance.default,
�[36mterraform_1  |�[0m   on compute.tf line 7, in resource "google_compute_instance" "default":
�[36mterraform_1  |�[0m    7: resource "google_compute_instance" "default" {
�[36mterraform_1  |�[0m 
�[36mterraform_1  |�[0m + echo 'Terraform definitions applied.'
�[36mterraform_1  |�[0m Terraform definitions applied.
�[36mterraform_1  |�[0m + set +x

As you can see, GCP is picky about label values.

.ci/Jenkinsfile Outdated Show resolved Hide resolved
docs/howto/system_testing.md Outdated Show resolved Hide resolved
@v1v v1v marked this pull request as ready for review April 21, 2022 08:39
.ci/Jenkinsfile Outdated Show resolved Hide resolved
.ci/Jenkinsfile Outdated Show resolved Hide resolved
.ci/Jenkinsfile Outdated Show resolved Hide resolved
Copy link
Contributor

@mtojek mtojek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that we're close to getting this in. Just a few last comments about naming/location.

.ci/Jenkinsfile Outdated Show resolved Hide resolved
@mtojek
Copy link
Contributor

mtojek commented Apr 21, 2022

@v1v Please re-request the review when you address the feedback. Thanks for applying the changes.

@mtojek mtojek self-requested a review April 21, 2022 13:06
Copy link
Contributor

@mtojek mtojek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

I checked labels for instances in GCP and AWS, and they are assigned correctly:

GCP

Zrzut ekranu 2022-04-21 o 15 06 11

AWS

Zrzut ekranu 2022-04-21 o 15 06 32

@v1v
Copy link
Member Author

v1v commented Apr 21, 2022

Thanks @mtojek for walking through this review!! I'll proceed with the same pattern for the rest of projects :)

@v1v v1v requested a review from a team April 21, 2022 13:20
@v1v v1v merged commit 1331dc5 into elastic:main Apr 25, 2022
v1v added a commit to v1v/integrations that referenced this pull request Apr 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
automation Team:Automation Label for the Observability productivity team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants