Cloud Foundation Toolkit'e Giriş

1. CFT 101'e Giriş

b1d2ab0f35bb62a8.png

Son Güncelleme: 11.02.2022

Cloud Foundation Toolkit nedir?

Özünde CFT, Google Cloud Platform'u hızlı bir şekilde kullanmaya başlamanız için en iyi uygulama şablonları sunar. Bu eğiticide, Cloud Foundation Toolkit'e nasıl katkıda bulunacağınızı öğreneceksiniz.

Gerekenler

  • GitHub hesabı.
  • Makinenizde Docker yüklü veya Cloud Shell kullanın ( Mac yüklemesi, Windows yüklemesi)
  • Kodu düzenlemek için Kod Düzenleyici (Örnek: Visual Studio Kodu)
  • Git ve GitHub ile ilgili temel düzeyde aşinalık
  • Biraz Terraform ve kod olarak altyapı deneyimi
  • Bir Hizmet Hesabına Proje Oluşturucu rolü verme izni
  • Bir Google Cloud kuruluşu, bir test klasörü ve bir faturalandırma hesabı

Oluşturacaklarınız

Bu codelab'de, Cloud Foundation Toolkit'e (CFT) nasıl katkıda bulunacağınızı öğreneceksiniz.

Bu kurstan sonra:

  • CFT'ye katkıda bulunmak için geliştirme ortamı oluşturma
  • CFT modülüne özellik ekleme
  • Eklenen özellik için testler ekleyin
  • CFT'de entegrasyon testleri yürütme
  • lint testleri yürütme
  • Kodu GitHub'a kaydedin ve bir Push İsteği (PR) gönderin

Yukarıdaki tüm adımları Google Cloud Storage CFT modülüne yeni özellik ekleyerek yürüteceksiniz. GCS CFT modülüyle oluşturulan tüm paketlere otomatik olarak eklenecek "silly_label" adlı bir etiket ekleyeceksiniz. Ayrıca, özelliğinizi doğrulamak ve uçtan uca entegrasyon sağlamak için testler yazacaksınız.

2. Geliştirici Ortamını Kurma

İsterseniz geliştirme amacıyla Cloud Shell'i kullanabilirsiniz. CFT'ye katkıda bulunmak için Cloud Shell'i kullanmak istemiyorsanız makinenizde geliştirme ortamınızı kurabilirsiniz.

Git'i kur

GitHub, Git adı verilen açık kaynak sürüm kontrol sistemini (VCS) temel alır. Git, makinenizde veya Cloud Shell'inizde yerel olarak gerçekleşen, GitHub ile ilgili her şeyden sorumludur.

  1. Cloud Shell'i kullandığınızda, önceden yüklü olduğu için Git'i yüklemeniz gerekmez.
$ git --version
# This will display the git version on the Cloud Shell.

Makinenize geliştirme ortamınızı kuruyorsanız Git'i yüklemeniz gerekir.

Git'te kullanıcı adınızı ve e-posta adresinizi ayarlama

Git, kayıtları bir kimlikle ilişkilendirmek için bir kullanıcı adı kullanır. Git kullanıcı adınız, GitHub kullanıcı adınızla aynı değildir.

Git kayıtlarınızla ilişkilendirilen adı git config komutunu kullanarak değiştirebilirsiniz. git config kullanarak Git kayıtlarınızla ilişkilendirilen adı değiştirmek yalnızca gelecekteki kayıt işlemlerini etkiler ve geçmiş kayıtlarda kullanılan adı değiştirmez.

Git'i başarıyla kurdunuz. Artık dalları çatallama, oluşturma ve klonlama işlemlerini yapabiliyor olmalısınız. Bu Codelab'de Git'i yoğun bir şekilde kullanacağız.

3. Fork CFT'nin GCS Deposu

CFT deposunu çatallama

Önceki adımda yerel makinenizde veya Cloud Shell'inizde Git'i kuracaksınız. Katkıda bulunmaya başlamak için Google Cloud Storage CFT deposunu çatallamanız gerekiyor.

Çatal, deponun bir kopyasıdır. Depoyu çatallamak, orijinal projeyi etkilemeden değişikliklerle özgürce denemeler yapmanıza olanak tanır.

Çatallar genellikle başka birinin projesinde değişiklikler önermek veya bir başkasının projesini kendi fikriniz için başlangıç noktası olarak kullanmak amacıyla kullanılır.

Örneğin, bir hatanın düzeltilmesiyle ilgili değişiklikler önermek için çatalları kullanabilirsiniz. Bir hatayı düzeltmek için şunları yapabilirsiniz:

  • Depoyu çatallayın.
  • Düzeltmeyi yapın.
  • Proje sahibine pull isteği gönderin.

CFT deposunu çatallama adımları:

  1. Web tarayıcınızı açın ve terraform-google-modules/terraform-google-cloud-storage deposuna gidin. Bu kod deposunu Codelab'in tamamında kullanacağız.
  2. Sayfanın sağ üst köşesindeki Çatal'ı tıklayın.

9dc18f15ca662b56.png

  1. Çatalın nereye yerleştirileceğini ve profilinizi seçeceğinizi belirten bir seçenek sunulur. Bu durumda depo çatallanır.

Çatalınızı yerel olarak klonlayın

Oluşturduğunuz çatal, GCS modülü deposunun bir kopyasıdır. Şimdi yeni özelliğinizi eklemek için bu depoyu yerel ortamınıza klonlayacaksınız.

Çatalınızı klonlamak için uygulanacak adımlar:

  1. Web tarayıcınızı açın ve terraform-google-modules/terraform-google-cloud-storage üzerindeki çatalınıza gidin.
  2. Sağ üst köşede "Kod"u görürsünüz bu düğmeyi tıklayın.

98f8be8df319dcd8.png

  1. "Kod"u tıkladıktan sonra "Kopyala"yı tıklayın. simgesini tıklayın. Çatalınızı yerel ortamınıza klonlamak için bu URL'yi kullanacaksınız.

e61e1da6371f2a1d.png

  1. VSCode'unuzda veya makinenizde bir terminale gidin ve çatalı klonlayın.
$ git clone <url>
# This command will clone your fork locally.
# Paste the copied URL from the previous step.
  1. Çatalınızı yerel olarak klonladığınıza göre deponuza gitmeniz, çataldan yeni bir dal oluşturmanız ve geçici dalda kod değişiklikleri yapmanız gerekir.

Kurala göre dalınızı aşağıdaki gibi adlandırabilirsiniz:

  • Özellik istekleri için: feature/feature-name
  • Dahili güncellemeler için internal/change-name
  • Hata düzeltmeleri için: bugfix/issue-name

Yeni özellik eklediğiniz için geçici şubenizi feature/silly_label çağırabilirsiniz.

$ cd terraform-google-cloud-storage
# This command takes you into the cloned directory on your local machine.

$ git branch
# This command tells your current branch
# When you run this for the first time after you have cloned, your 
# output should say "master", that is your fork.

$ git checkout -b feature/silly_label
# This command creates a new branch on your fork and switches your 
# branch to the newly created branch.

$ git branch
# This command will confirm your current branch to be "feature/silly_label"

Artık Cloud Foundation Toolkit üzerinde çalışmaya başlamak için hazırsınız.

4. Test ortamı oluşturma

Standart CFT geliştirme süreci, test için izole bir test projesi kullanmaya dayanır. Bu adım, bir hizmet hesabı üzerinden test projesini (standart yapılandırmaya göre) oluşturma konusunda size yol gösterecektir.

0. Docker Engine'i yükleme

Makinenizi geliştirme amacıyla kullanıyorsanız Docker Engine'i yüklemeniz gerekir.

1. Google Cloud SDK'sını yükleyin

GCP Cloud Shell kullanıyorsanız Google Cloud SDK'yı yüklemeniz gerekmez.

Google Cloud SDK'ya gidin ve platformunuz için etkileşimli yükleyiciyi indirin.

2. Yapılandırmayı ayarlayın

Test ortamı oluşturmak için Google Cloud kuruluşu, test klasörü ve faturalandırma hesabı gereklidir. Bu değerlerin ortam değişkenleri aracılığıyla ayarlanması gerekir:

export TF_VAR_org_id="your_org_id"
export TF_VAR_folder_id="your_folder_id"
export TF_VAR_billing_account="your_billing_account_id"

3. Hizmet hesabınızı oluşturun

Test ortamı oluşturmadan önce test ortamınıza bir hizmet hesabı anahtarı indirmeniz gerekir. Bu hizmet hesabının Proje Oluşturucu, Faturalandırma Hesabı Kullanıcısı ve Kuruluş Görüntüleyici rollerine sahip olması gerekir. Bu adımlar yeni bir hizmet hesabı oluşturmanıza yardımcı olur ancak mevcut bir hesabı da yeniden kullanabilirsiniz.

3.1 Kaynak GCP Projesi Oluşturma veya Seçme

Hizmet hesabınızı oluşturmadan önce içinde barındırılacak bir proje seçmeniz gerekir. Yeni proje de oluşturabilirsiniz.

gcloud config set core/project YOUR_PROJECT_ID

3.2 Google Cloud API'lerini etkinleştirme

Kaynak projenizde aşağıdaki Google Cloud API'lerini etkinleştirin:

gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable iam.googleapis.com
gcloud services enable cloudbilling.googleapis.com

3.3 Hizmet Hesabı Oluşturma

Test ortamını yönetmek için yeni bir hizmet hesabı oluşturun:

# Creating a service account for CFT.
gcloud iam service-accounts create cft-onboarding \
  --description="CFT Onboarding Terraform Service Account" \
  --display-name="CFT Onboarding"

# Assign SERVICE_ACCOUNT environment variable for later steps
export SERVICE_ACCOUNT=cft-onboarding@$(gcloud config get-value core/project).iam.gserviceaccount.com

Hizmet hesabınızın oluşturulduğunu doğrulayın:

gcloud iam service-accounts list --filter="EMAIL=${SERVICE_ACCOUNT}"

3.4 Hizmet Hesabına Proje Oluşturucu, Faturalandırma Hesabı Kullanıcısı ve Kuruluş Görüntüleyici rolleri atayın:

gcloud resource-manager folders add-iam-policy-binding ${TF_VAR_folder_id} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/resourcemanager.projectCreator"
gcloud organizations add-iam-policy-binding ${TF_VAR_org_id} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/billing.user"
gcloud beta billing accounts add-iam-policy-binding ${TF_VAR_billing_account} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/billing.user"
gcloud organizations add-iam-policy-binding ${TF_VAR_org_id} \
  --member="serviceAccount:${SERVICE_ACCOUNT}" \
  --role="roles/resourcemanager.organizationViewer"

Artık test ortamını yönetmek için kullanılabilecek bir Hizmet Hesabınız var.

4. Terraform Kimlik Bilgilerini Hazırlama

Test ortamını oluşturmak için hizmet hesabı anahtarını kabuğunuza indirmeniz gerekir.

4.1 Hizmet Hesabı Anahtarı

Terraform için bir hizmet hesabı anahtarı oluşturun ve indirin

gcloud iam service-accounts keys create cft.json --iam-account=${SERVICE_ACCOUNT}

4.2 Terraform Kimlik Bilgilerini Ayarlama

Değeri hizmet hesabı anahtarınızın içerikleri olarak ayarlayarak SERVICE_ACCOUNT_JSON ortam değişkenini kullanarak anahtarı Terraform'a sağlayın.

export SERVICE_ACCOUNT_JSON=$(< cft.json)

Kimlik bilgisi bilgilerini ortam değişkeninde depoladıktan sonra anahtar dosyasını kaldırın. Gerekirse yukarıdaki komutu kullanarak anahtarı yeniden oluşturabilirsiniz.

rm -rf cft.json

5. Terraform dağıtımları için test projesi oluşturma

Artık her şey hazır olduğuna göre tek bir komutla test projesini oluşturabilirsiniz. Bu komutu terraform-google-cloud-storage dizin kökünden çalıştırın:

make docker_test_prepare

make docker_test_prepare komutunu çalıştırdığınızda aşağıdaki çıkışı görürsünüz. En sonunda , Cloud Storage modülünüzü yeni özelliğinizle dağıtıp test edeceğiniz proje_kimliği test projesini alırsınız. Faturalandırma hesabını bağlarken sorunlarla karşılaşırsanız sorun giderme adımlarına bakın.

macbookpro3:terraform-google-cloud-storage user$ make docker_test_prepare
docker run --rm -it \
                -e SERVICE_ACCOUNT_JSON \
                -e TF_VAR_org_id \
                -e TF_VAR_folder_id \
                -e TF_VAR_billing_account \
                -v /Users/cft/terraform-google-cloud-storage:/workspace \
                gcr.io/cloud-foundation-cicd/cft/developer-tools:0.8.0 \
                /usr/local/bin/execute_with_credentials.sh prepare_environment
Activated service account credentials for: [cft-onboarding@<project_id>.iam.gserviceaccount.com]
Activated service account credentials for: [cft-onboarding@<project_id>.iam.gserviceaccount.com]
Initializing modules...

Initializing the backend...

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.google-beta: version = "~> 3.9"
* provider.null: version = "~> 2.1"
* provider.random: version = "~> 2.2"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
module.project.module.project-factory.null_resource.preconditions: Refreshing state... [id=8723188031607443970]
module.project.module.project-factory.null_resource.shared_vpc_subnet_invalid_name[0]: Refreshing state... [id=5109975723938185892]
module.project.module.gsuite_group.data.google_organization.org[0]: Refreshing state...
module.project.module.project-factory.random_id.random_project_id_suffix: Refreshing state... [id=rnk]
module.project.module.project-factory.google_project.main: Refreshing state... [id=<project-id>]
module.project.module.project-factory.google_project_service.project_services[0]: Refreshing state... [id=<project-id>/storage-api.googleapis.com]
module.project.module.project-factory.google_project_service.project_services[1]: Refreshing state... [id=<project-id>/cloudresourcemanager.googleapis.com]
module.project.module.project-factory.google_project_service.project_services[2]: Refreshing state... [id=<project-id>/compute.googleapis.com]
module.project.module.project-factory.data.null_data_source.default_service_account: Refreshing state...
module.project.module.project-factory.google_service_account.default_service_account: Refreshing state... [id=projects/ci-cloud-storage-ae79/serviceAccounts/project-service-account@<project-id>.iam.gserv
iceaccount.com]
module.project.module.project-factory.google_project_service.project_services[3]: Refreshing state... [id=<project-id>/serviceusage.googleapis.com]
module.project.module.project-factory.null_resource.delete_default_compute_service_account[0]: Refreshing state... [id=3576396874950891283]
google_service_account.int_test: Refreshing state... [id=projects/<project-id>/serviceAccounts/cft-onboarding@<project-id>.iam.gserviceaccount.com]
google_service_account_key.int_test: Refreshing state... [id=projects/<project-id>/serviceAccounts/cft-onboarding@<project-id>.iam.gserviceaccount.com/keys/351009a1e011e88049ab2097994d1c627a61
6961]
google_project_iam_member.int_test[1]: Refreshing state... [id=<project-id>/roles/iam.serviceAccountUser/serviceaccount:cft-onboarding@<project-id>.iam.gserviceaccount.com]
google_project_iam_member.int_test[0]: Refreshing state... [id=<project-id>/roles/storage.admin/serviceaccount:cft-onboarding@<project-id>.iam.gserviceaccount.com]

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

project_id = <test-project-id>
sa_key = <sensitive>
Found test/setup/make_source.sh. Using it for additional explicit environment configuration.

Konsol çıkışında görebileceğiniz gibi project_id tarafından referans verilen bir test projesi oluşturdunuz. Geliştirme ve test ortamınız ayarlandı.

5. CFT modülüne yeni bir özellik ekleyin

Artık geliştirme ve test ortamınız ayarlandı. Şimdi "silly_label" etiketinizi eklemeye başlayalım. özelliğini kullanıma sunduk.

terraform-google-cloud-storage'da olduğunuzdan emin olun ve main.tf dosyasını, aşağıdaki klasör yapısında gösterildiği gibi açın.

ac1dba25408abd09.png

"silly_label" ifadesinden beri etiket bir etiketse özelliği, 27. satırdaki "labels" değişkenine ekleyeceksiniz. (aşağıda gösterildiği gibi) main.tf dosyasında:

terraform-google-cloud-storage/main.tf

resource "google_storage_bucket" "buckets" {
 <...>
 storage_class = var.storage_class
 // CODELAB:Add silly label in labels variable
 labels        = merge(var.labels, { name = replace("${local.prefix}${lower(each.value)}", ".", "-") }, { "silly" = var.silly_label })
 force_destroy = lookup(
 <...>
}

Şimdi, yukarıdaki klasör yapısında gördüğünüzvariable.tf dosyasına silly_label değişkenini ekleyeceksiniz.

Aşağıdaki kodu kopyalayıp değişkenler.tf dosyasındaki 31. satıra yapıştırın. Eklediğiniz değişken bloğunun üstünde ve altında yeni bir satır karakteri olduğundan emin olun.

terraform-google-cloud-storage/variables.tf

variable "names" {
 description = "Bucket name suffixes."
 type        = list(string)
}

// CODELAB: Add "silly_label" variable to variables.tf between "names" and "location"
variable "silly_label" {
 description = "Sample label for bucket."
 type        = string
}

variable "location" {
 description = "Bucket location."
 default     = "EU"
}

6. Depolama paketi örneğine yeni özellik ekleme

Özelliğinizi modülün main.tf'sine eklediniz. Şimdi, eklenen özelliği örnek üzerinden test edeceksiniz.

"silly_label" example/Multiple-buckets/main.tf'ye eklenmesi gerekir

Bu örnek, bir sonraki adımda entegrasyon testleri gerçekleştirmek için kullanılacaktır.

Aşağıdaki değişken silly_label satırını kopyalayıp, terraform-google-cloud-storage/examples/multi-buckets/ adresindeki main.tf dosyasındaki 27. satıra klasör yapısında görüldüğü şekilde yapıştırın:

5224fefbbcc61d89.png

terraform-google-cloud-storage/examples/multiple-buckets/main.tf

module "cloud_storage" {
 <...>
 // CODELAB: Add "silly_label" as an example to main.tf.
 silly_label        = "awesome"

 <..>
}

7. Özelliği kontrol etmek için şema testini güncelleyin

Özelliğinizi modülün main.tf'sine, sonra da Multiple_buckets örneğine eklediniz. Şimdi, Golang'da yazılmış bir plan entegrasyon testiyle özelliğinizi test etmeniz gerekiyor.

Yeni testlerinizi, aşağıdaki klasör yapısında bulunan Multiple_buckets_test.go dosyasına ekleyeceksiniz:

72ea272d4792405.png

"silly_label" eklediniz çoklu_buckets modülü aracılığıyla oluşturulan tüm paketlere odaklanacağız. Şimdi ise yeni özelliği test etmek için test yazmanız gerekiyor.

Aşağıdaki kodda gcloud alpha Storage komutuyla her bir paketin etiketini göreceksiniz. Ardından, komuttan döndürülen çıkışı kontrol edeceksiniz.

test/integration/multiple_buckets/multiple_buckets_test.go

func TestMultipleBuckets(t *testing.T) {
 <..>
op := gcloud.Run(t, fmt.Sprintf("alpha storage ls --buckets gs://%s", bucketName), gcloudArgs).Array()[0]

// verify silly label on each bucket
assert.Equal("awesome", op.Get("metadata.labels.silly").String(), "should have silly label set to awesome")

// verify lifecycle rules
...
}

8. CFT'de entegrasyon testleri yürütme

Entegrasyon Testi

Entegrasyon testleri kök modülün, alt modüllerin ve örneklerin davranışını doğrulamak için kullanılır. Eklemeler, değişiklikler ve düzeltmelere testler eşlik etmelidir.

Entegrasyon testleri şema test çerçevesi kullanılarak yazılır ve CFT KSA kullanılarak çalıştırılır. Bu araçlar, kolaylık sağlamak amacıyla Docker görüntüsü içinde paketlenmiştir.

Bu testlerin genel stratejisi, örnek modüllerin davranışını doğrulamaktır. Böylece, kök modülün, alt modüllerin ve örnek modüllerin tamamının işlevsel açıdan doğru olduğundan emin olursunuz.

Etkileşimli yürütmede her adımı birden fazla komutla yürütürsünüz.

  1. Docker kapsayıcısını etkileşimli modda test etmek için make docker_run komutunu çalıştırın.

Make, hedef programın nasıl türetileceğini belirten Makefiles adlı dosyaları okuyarak otomatik olarak kaynak koddan yürütülebilir programlar ve kitaplıklar oluşturan bir derleme otomasyon aracıdır. Dosya değişiklikleri yaptığınızda Docker container'ı otomatik olarak güncellenmelidir.

make docker_run komutunu çalıştırdığınızda Docker container'ınızda bir çalışma alanı oluşturur ve hizmet hesabınızın kimlik bilgilerini etkinleştirirsiniz. Çalışma alanı, sonraki adımlarda testlerin çalıştırılması için kullanılacak.

Terminalinizde aşağıdaki çıkışı görürsünüz:

Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
  1. Çalışma alanınızdaki tüm şema testlerini listelemek için cft test list komutunu çalıştırın.

Terminalinizde aşağıdaki çıkışı görürsünüz:

[root@CONTAINER_ID workspace]# cft test list
 NAME                           | CONFIG                    | LOCATION                                                   
--------------------------------+---------------------------+------------------------------------------------------------
 TestAll/examples/simple_bucket | examples/simple_bucket    | test/integration/discover_test.go                          
 TestMultipleBuckets            | examples/multiple_buckets | test/integration/multiple_buckets/multiple_buckets_test.go 

  1. Örneği ilk kullanıma hazırlamak için cft test run <EXAMPLE_NAME> --stage init komutunu çalıştırın. Bu durumda TestMultipleBuckets test çalıştırmasını başlatmak için cft test run TestMultipleBuckets --stage init. Testleri çalıştırırken daha fazla bilgi almak için --verbose işaretini de kullanabilirsiniz.

Bu başlangıç aşaması, Terraform örneğini başlatır.

Terminalinizde aşağıdaki çıkışı görürsünüz.

[root@<CONTAINER_ID> workspace]# cft test run TestMultipleBuckets --stage init --verbose
INFO[02-09|08:24:31] using test-dir: test/integration 
...
TestMultipleBuckets 2022-02-09T08:24:35Z command.go:179: Terraform has been successfully initialized!
...
TestMultipleBuckets 2022-02-09T08:24:35Z command.go:100: Running command terraform with args [validate]
TestMultipleBuckets 2022-02-09T08:24:36Z command.go:179: Success! The configuration is valid.
...
--- PASS: TestMultipleBuckets (4.05s)
  1. Örnek modülü uygulamak için cft test run <EXAMPLE_NAME> --stage apply komutunu çalıştırın.

Bu adım, önceki aşamada başlatılan örneği Codelab'de daha önce oluşturulan GCP projesine uygular.

Terminalinizde aşağıdaki çıkışı görürsünüz.

[root@<CONTAINER_ID> workspace]# cft test run TestMultipleBuckets --stage apply --verbose
INFO[02-09|08:28:11] using test-dir: test/integration
...
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: 
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: Outputs:
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: 
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179: names = {
TestMultipleBuckets 2022-02-09T08:28:19Z command.go:179:   "one" = "multiple-buckets-erp1-eu-one"
...
--- PASS: TestMultipleBuckets (6.51s)
PASS
ok      github.com/terraform-google-modules/terraform-google-cloud-storage/test/integration/multiple_buckets    6.548s
  1. Örneğin, beklenen altyapıyı oluşturduğunu doğrulamak için cft test run <EXAMPLE_NAME> --stage verify komutunu çalıştırın.

Bu adımda, TestMultipleBuckets içindeki doğrulama işlevi çalıştırılır. Doğrulama işlemi genellikle gcloud komutu çalıştırarak bir kaynağın mevcut durumuna ilişkin JSON çıkışı alarak ve geçerli durumun örnekte tanımlandığı gibi olduğunu doğrular.

Hata alırsanız beklenenleri ve test komutu tarafından nelerin alındığını görürsünüz.

Terminalinizde aşağıdaki çıkışı görürsünüz.

cft test run TestMultipleBuckets --stage verify --verbose
INFO[02-09|08:30:19] using test-dir: test/integration
...
TestMultipleBuckets 2022-02-09T08:30:27Z command.go:100: Running command terraform with args [output -no-color -json names_list]
TestMultipleBuckets 2022-02-09T08:30:27Z command.go:179: ["multiple-buckets-erp1-eu-one","multiple-buckets-erp1-eu-two"]
TestMultipleBuckets 2022-02-09T08:30:27Z command.go:100: Running command gcloud with args [alpha storage ls --buckets gs://multiple-buckets-erp1-eu-one --project ci-cloud-storage-8ce9 --json]
TestMultipleBuckets 2022-02-09T08:30:28Z command.go:179: [
TestMultipleBuckets 2022-02-09T08:30:28Z command.go:179: {
TestMultipleBuckets 2022-02-09T08:30:28Z command.go:179:   "url": "gs://multiple-buckets-erp1-eu-one/",
...
TestMultipleBuckets 2022-02-09T08:30:33Z command.go:179: ]
2022/02/09 08:30:33 RUN_STAGE env var set to verify
2022/02/09 08:30:33 Skipping stage teardown
--- PASS: TestMultipleBuckets (12.32s)
PASS
ok      github.com/terraform-google-modules/terraform-google-cloud-storage/test/integration/multiple_buckets    12.359s
  1. Örneği ortadan kaldırmak için cft test run <EXAMPLE_NAME> --stage teardown komutunu çalıştırın.

Bu adımda, yukarıdaki adımlarda oluşturduğunuz altyapı kaldırılır. Bu adım, GCS modülüne eklediğiniz etiketle birlikte projede oluşturulan GCS paketlerini de kaldırır.

Terminalinizde aşağıdaki çıkışı görebilirsiniz.

[root@<CONTAINER_ID> workspace]# cft test run TestMultipleBuckets --stage teardown --verbose
INFO[02-09|08:36:02] using test-dir: test/integration
...
TestMultipleBuckets 2022-02-09T08:36:06Z command.go:100: Running command terraform with args [destroy -auto-approve -input=false -lock=false]
TestMultipleBuckets 2022-02-09T08:36:07Z command.go:179: module.cloud_storage.random_id.bucket_suffix: Refreshing state... [id=mNA]
TestMultipleBuckets 2022-02-09T08:36:07Z command.go:179: random_string.prefix: Refreshing state... [id=erp1]
TestMultipleBuckets 2022-02-09T08:36:08Z command.go:179: module.cloud_storage.google_storage_bucket.buckets["two"]: Refreshing state... [id=multiple-buckets-erp1-eu-two]
...
TestMultipleBuckets 2022-02-09T08:36:10Z command.go:179: Destroy complete! Resources: 6 destroyed.
TestMultipleBuckets 2022-02-09T08:36:10Z command.go:179: 
--- PASS: TestMultipleBuckets (6.62s)
PASS
ok      github.com/terraform-google-modules/terraform-google-cloud-storage/test/integration/multiple_buckets    6.654s
  1. Test kapsayıcısından çıkmak için exit komutunu çalıştırın.

9. Girişler ve Çıkışlar için Belge Oluşturma

Kök modülün, alt modüllerin ve örnek modüllerin README'lerindeki Giriş ve Çıkışlar tabloları, ilgili modüllerin variables ve outputs kurallarına göre otomatik olarak oluşturulur. Modül arayüzleri değiştirilirse bu tablolar yenilenmelidir.

Çalıştırma:

make generate_docs
# This will generate new Inputs and Outputs tables

10. CFT'de lint testleri yürütme

Lint aracı, programlama hatalarını, hataları, stil hatalarını ve şüpheli yapıları işaretlemek için kaynak kodunu analiz eden bir araçtır.

Depodaki dosyaların birçoğunda kalite standardını koruyacak şekilde lin veya biçimlendirilebilir. CFT'de kaliteden emin olmak için lint testi kullanırsınız.

Çalıştırma:

make docker_test_lint
# This will run all lint tests on your repo

11. GitHub'da halkla ilişkiler (PR) gönderme

Kodunuzu yerel olarak değiştirdiğinize ve entegrasyon testleriyle test ettiğinize göre bu kodu ana depoya yayınlayabilirsiniz.

Kodunuzu ana depoda kullanılabilir hale getirmek için dalınıza kod değişikliklerini uygulamanız ve ana depoya aktarmanız gerekir. Kodunuzun, Codelab'in başında çatalladığınız ana depoya eklenmesi için kod deponuza kod gönderdikten sonra ana depoda bir Çekme İsteği (PR) oluşturmanız gerekir.

Bir PR bildirdiğinizde depo yöneticisi, önerilen kod değişikliklerini incelemesi için bilgilendirilir. Ayrıca, kod değişikliklerinizle ilgili geri bildirim almak için diğer kullanıcıları da incelemeci olarak ekleyebilirsiniz. PR, depoda testler çalıştıracak bir Cloud Build tetikler.

Kod değişikliklerinize bağlı olarak, kod incelemeciler kodunuzla ilgili yorumlarda bulunur, en iyi uygulamalar ve belgelere dayalı olarak bir şeyin değiştirilmesi gerekiyorsa kodda değişiklik yapmanızı ister. Yönetici, kod değişikliklerinizi inceler, kodunuzun depoyla uyumlu olduğundan emin olur ve kodunuzu ana depoda birleştirmeden önce tekrar bazı değişiklikler yapmanızı isteyebilir.

Çatallı dalınıza kod kaydetmek ve çatallı dalınıza kod aktarmak için aşağıdaki adımları uygulayın:

  1. İlk adım, değiştirilen dosyaları yerel depoya eklemektir.
$ git add main.tf
$ git add README.md
$ git add variables.tf
$ git add examples/multiple-buckets/main.tf
$ git add test/integration/multiple_buckets/multiple_buckets_test.go
# The ‘git add' command adds the file in the local repository and 
# stages the file for commit. To unstage a file, use git reset HEAD YOUR-FILE
  1. Dosyalarınız şu anda aşamalı olarak oluşturuldu. Sonrasında değişiklikleri uygulayacaksınız.
$ git commit -m "First CFT commit"
# This will commit the staged changes and prepares them to be pushed 
# to a remote repository. To remove this commit and modify the file, 
# use 'git reset --soft HEAD~1' and commit and add the file again.
  1. Push İsteği (PR) oluşturmak için yerel deponuzdaki kaydedilen değişiklikleri GitHub'a aktarın.
$ git push -u origin feature/silly_label
# Pushes the changes in your local repository up to the remote
# repository you specified as the origin

Kod değişiklikleriniz artık bir Çekme İsteği için hazır.

terraform-google-modules/terraform-google-cloud-storage repo ile ilgili bir PR oluşturmak için aşağıdaki adımları uygulayın:

  1. Web tarayıcınızda deponun ana sayfasına gidin.
  2. Banner'da, çatalınızın PR'sini açmanız için bir öneri gösterilir. "Karşılaştır ve çekme isteği"ni tıklayın.

60e7ae0cbc11588e.png

  1. Kod değişikliklerinizi açıklamak için pull isteğinize bir başlık ve açıklama girin. Olabildiğince kısa ve öz olun.

329342f7e9d64410.png

  1. İncelenmeye hazır bir pull isteği oluşturmak için "Çekme İsteği Oluştur"u tıklayın.
  2. PR nedeniyle tetiklenen Cloud Build Tetikleyicilerinin çalıştığını görürsünüz.
  3. Herhangi bir sorunla karşılaşırsanız çatallardan çekme isteklerini açma ile ilgili resmi GitHub dokümanlarına bakın.

İlk kod değişikliğinizi çatallı dalınıza başarıyla aktardınız ve ilk CFT PR'nizi ana dala göre yükselttiniz.

12. Tebrikler

Tebrikler, bir CFT modülüne başarıyla bir özellik eklediniz ve incelenmek üzere bir PR gönderdiniz!

Bir CFT modülüne özellik eklediniz, bir örnek üzerinden yerel olarak test ettiniz ve kodunuzu GitHub'a kaydetmeden önce testler yaptınız. Son olarak, inceleme için bir PR'yi oluşturdunuz ve nihai olarak CFT'ye birleştirdiniz.

Artık Cloud Foundation Toolkit'i kullanmaya başlamak için gereken önemli adımları biliyorsunuz.