Cloud Foundation Toolkit 101

1. مقدمه ای بر CFT 101

b1d2ab0f35bb62a8.png

آخرین به روز رسانی: 2022-02-11

Cloud Foundation Toolkit چیست؟

در اصل، CFT بهترین الگوها را برای شروع سریع در Google Cloud Platform ارائه می دهد. در این آموزش، نحوه مشارکت در Cloud Foundation Toolkit را خواهید آموخت.

آنچه شما نیاز دارید

  • یک حساب GitHub
  • Docker روی دستگاه شما نصب شده یا از Cloud Shell استفاده کنید ( نصب مک ، نصب ویندوز l)
  • ویرایشگر کد برای ویرایش کد (مثال: کد ویژوال استودیو )
  • آشنایی اولیه با Git و GitHub
  • برخی تجربه با Terraform و زیرساخت به عنوان کد
  • اجازه اعطای نقش سازنده پروژه به یک حساب سرویس
  • یک سازمان Google Cloud، یک پوشه آزمایشی، و یک حساب صورت‌حساب

چیزی که خواهی ساخت

در این نرم‌افزار، شما می‌خواهید یاد بگیرید که چگونه در Cloud Foundation Toolkit (CFT) مشارکت کنید.

شما:

  • یک محیط توسعه دهنده برای مشارکت در CFT راه اندازی کنید
  • یک ویژگی به ماژول CFT اضافه کنید
  • تست هایی را برای ویژگی اضافه شده اضافه کنید
  • انجام تست های یکپارچه سازی در CFT
  • تست های پرز را اجرا کنید
  • کد را به GitHub ارسال کنید و یک درخواست کششی (PR) ارسال کنید

تمام مراحل بالا را با افزودن یک ویژگی جدید به ماژول CFT Google Cloud Storage انجام خواهید داد. شما یک برچسب به نام "silly_label" اضافه می کنید که به طور خودکار به تمام سطل های ایجاد شده از طریق ماژول GCS CFT اضافه می شود. همچنین می‌توانید آزمایش‌هایی بنویسید تا ویژگی خود را تأیید کنید و از یکپارچگی کامل اطمینان حاصل کنید.

2. محیط توسعه دهنده را راه اندازی کنید

اگر می خواهید، می توانید از Cloud Shell برای اهداف توسعه خود استفاده کنید. اگر نمی‌خواهید از Cloud Shell برای مشارکت در CFT استفاده کنید، می‌توانید محیط برنامه‌نویس خود را بر روی دستگاه خود تنظیم کنید.

Git را راه اندازی کنید

GitHub بر اساس یک سیستم کنترل نسخه منبع باز (VCS) به نام Git است. Git مسئول تمام موارد مرتبط با GitHub است که به صورت محلی روی دستگاه یا Cloud Shell شما اتفاق می افتد.

  1. وقتی از Cloud Shell استفاده می کنید، نیازی به نصب git ندارید زیرا از قبل نصب شده است.
$ git --version
# This will display the git version on the Cloud Shell.

اگر محیط توسعه دهنده خود را روی دستگاه خود تنظیم می کنید، باید Git را نصب کنید.

تنظیم نام کاربری و ایمیل خود در Git

Git از یک نام کاربری برای مرتبط کردن commit ها با یک هویت استفاده می کند. نام کاربری Git با نام کاربری GitHub شما یکسان نیست.

با استفاده از دستور git config می توانید نام مرتبط با commit های Git خود را تغییر دهید. تغییر نام مرتبط با commit های Git شما با استفاده از git config تنها بر commit های آینده تاثیر می گذارد و نام مورد استفاده برای commit های گذشته را تغییر نمی دهد.

Git را با موفقیت راه‌اندازی کرده‌اید و باید بتوانید شاخه‌ها را فورک، ایجاد و شبیه‌سازی کنید. ما از Git به طور گسترده در این Codelab استفاده خواهیم کرد.

3. Fork CFT's GCS Repository

یک مخزن CFT را فورک کنید

شما Git را در دستگاه محلی یا Cloud Shell خود در مرحله قبلی راه اندازی می کنید. اکنون باید مخزن CFT Google Cloud Storage را جدا کنید تا شروع به مشارکت کنید.

چنگال یک کپی از یک مخزن است. Forking یک مخزن به شما امکان می دهد آزادانه تغییرات را بدون تأثیر بر پروژه اصلی آزمایش کنید.

معمولاً از فورک ها برای پیشنهاد تغییرات در پروژه شخص دیگری یا استفاده از پروژه شخص دیگری به عنوان نقطه شروع ایده خود استفاده می شود.

برای مثال، می‌توانید از فورک‌ها برای پیشنهاد تغییرات مربوط به رفع اشکال استفاده کنید. برای رفع یک باگ، می توانید:

  • مخزن را چنگال کنید.
  • درستش کن
  • یک درخواست کشش به مالک پروژه ارسال کنید.

مراحل تشکیل یک مخزن CFT:

  1. مرورگر وب خود را باز کنید و به مخزن terraform-google-modules/terraform-google-cloud-storage بروید. ما از این مخزن برای کل Codelab استفاده خواهیم کرد.
  2. در گوشه سمت راست بالای صفحه، روی Fork کلیک کنید.

9dc18f15ca662b56.png

  1. گزینه ای به شما ارائه می شود که در آن می خواهید چنگال را داشته باشید، نمایه خود را انتخاب کنید و مخزن فورک خواهد شد.

چنگال خود را به صورت محلی کلون کنید

فورکی که ایجاد کردید یک کپی از مخزن ماژول GCS است. اکنون این مخزن را در محیط محلی خود کلون می کنید تا ویژگی جدید خود را اضافه کنید.

مراحل کلون کردن چنگال:

  1. مرورگر وب خود را باز کنید و به فورک خود در terraform-google-modules/terraform-google-cloud-storage بروید.
  2. در گوشه سمت راست بالا، دکمه "کد" را پیدا خواهید کرد، روی آن کلیک کنید.

98f8be8df319dcd8.png

  1. بعد از اینکه روی دکمه "کد" کلیک کردید، روی نماد "کپی" کلیک کنید تا URL فورک کپی شود. شما از این URL برای شبیه سازی فورک خود در محیط محلی خود استفاده خواهید کرد.

e61e1da6371f2a1d.png

  1. به ترمینال در VSCode یا دستگاه خود بروید و فورک را شبیه سازی کنید.
$ git clone <url>
# This command will clone your fork locally.
# Paste the copied URL from the previous step.
  1. اکنون که فورک خود را به صورت محلی کلون کرده اید، باید به مخزن خود بروید، یک شاخه جدید از فورک ایجاد کنید و کد را در شاخه موقت تغییر دهید.

طبق قرارداد، می توانید شعبه خود را به صورت زیر نام گذاری کنید:

  • برای درخواست های ویژگی: feature/feature-name
  • برای به روز رسانی داخلی، internal/change-name
  • برای رفع اشکال: bugfix/issue-name

از آنجایی که در حال اضافه کردن یک ویژگی جدید هستید، می توانید با feature/silly_label شاخه موقت خود تماس بگیرید

$ 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"

اکنون برای شروع کار روی Cloud Foundation Toolkit آماده هستید!

4. یک محیط تست ایجاد کنید

فرآیند استاندارد توسعه CFT مبتنی بر استفاده از یک پروژه آزمایشی مجزا برای آزمایش است. این مرحله شما را از طریق ایجاد پروژه آزمایشی (بر اساس یک پیکربندی استاندارد) از طریق یک حساب خدمات راهنمایی می کند.

0. Docker Engine را نصب کنید

اگر از دستگاه خود برای اهداف توسعه استفاده می کنید، باید Docker Engine را نصب کنید.

1. Google Cloud SDK را نصب کنید

اگر از GCP Cloud Shell استفاده می کنید، نیازی به نصب Google Cloud SDK ندارید.

به Google Cloud SDK بروید و نصب کننده تعاملی را برای پلتفرم خود دانلود کنید.

2. تنظیمات را تنظیم کنید

برای ایجاد یک محیط آزمایشی، به یک سازمان Google Cloud، یک پوشه آزمایشی و یک حساب صورتحساب نیاز دارید. این مقادیر باید از طریق متغیرهای محیطی تنظیم شوند:

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. حساب سرویس خود را تنظیم کنید

قبل از ایجاد یک محیط آزمایشی، باید یک کلید حساب کاربری را در محیط آزمایشی خود دانلود کنید. این حساب سرویس به نقش‌های Project Creator، Billing Account User و Organization Viewer نیاز دارد. این مراحل به شما کمک می‌کند یک حساب سرویس جدید ایجاد کنید، اما می‌توانید از یک حساب موجود نیز استفاده مجدد کنید.

3.1 پروژه Seed GCP را ایجاد یا انتخاب کنید

قبل از ایجاد حساب سرویس خود، باید پروژه ای را برای میزبانی آن انتخاب کنید. همچنین می توانید یک پروژه جدید ایجاد کنید.

gcloud config set core/project YOUR_PROJECT_ID

3.2 Google Cloud APIs را فعال کنید

APIهای Google Cloud زیر را در پروژه seed خود فعال کنید:

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

3.3 ایجاد حساب خدمات

یک حساب سرویس جدید برای مدیریت محیط تست ایجاد کنید:

# 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

بررسی کنید که حساب سرویس شما ایجاد شده است:

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

3.4 اعطای نقش خالق پروژه، کاربر حساب صورت‌حساب و نمایشگر سازمان به حساب خدمات:

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"

اکنون یک حساب سرویس دارید که می تواند برای مدیریت محیط تست استفاده شود.

4. اعتبار Terraform را آماده کنید

برای ایجاد محیط تست، باید کلید حساب کاربری سرویس را در پوسته خود دانلود کنید.

4.1 کلید حساب خدمات

یک کلید حساب کاربری برای Terraform ایجاد و دانلود کنید

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

4.2 راه اندازی اعتبار Terraform

کلید Terraform را با استفاده از متغیر محیطی SERVICE_ACCOUNT_JSON تامین کنید و مقدار را برای محتویات کلید حساب سرویس خود تنظیم کنید.

export SERVICE_ACCOUNT_JSON=$(< cft.json)

پس از ذخیره اطلاعات اعتبار در متغیر محیطی، فایل کلید را حذف کنید. در صورت نیاز می‌توانید با استفاده از همان دستور بالا، بعداً یک کلید را دوباره ایجاد کنید.

rm -rf cft.json

5. پروژه آزمایشی برای استقرار Terraform ایجاد کنید

اکنون که همه چیز آماده است، می توانید با یک دستور پروژه آزمایشی را ایجاد کنید. این دستور را از ریشه دایرکتوری terraform-google-cloud-storage اجرا کنید:

make docker_test_prepare

هنگامی که make docker_test_prepare را اجرا می کنید خروجی زیر را خواهید دید، در پایان پروژه_id آزمایشی ایجاد شده را دریافت خواهید کرد که در آن ماژول Cloud Storage خود را با ویژگی جدید خود مستقر و آزمایش خواهید کرد. اگر در پیوند دادن حساب صورت‌حساب با مشکل مواجه شدید، به مراحل عیب‌یابی مراجعه کنید.

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.

شما اکنون یک پروژه آزمایشی ایجاد کرده اید که همانطور که در خروجی کنسول مشاهده می کنید توسط project_id ارجاع داده شده است. محیط توسعه و آزمایش شما راه اندازی شده است.

5. یک ویژگی جدید به ماژول CFT اضافه کنید

اکنون محیط توسعه و آزمایش شما تنظیم شده است، بیایید شروع به اضافه کردن ویژگی "silly_label" خود به ماژول CFT google-cloud-storage کنیم.

مطمئن شوید که در terraform-google-cloud-storage هستید و فایل main.tf را همانطور که در زیر می بینید در ساختار پوشه باز کنید.

ac1dba25408abd09.png

از آنجایی که "silly_label" یک برچسب است، همانطور که در زیر می بینید، ویژگی را در خط 27 در متغیر "labels" در main.tf اضافه می کنید:

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(
 <...>
}

حالا متغیر silly_label را در variables.tf که در ساختار پوشه بالا می بینید اضافه می کنید.

کد زیر را کپی کنید و آن را به خط 31 در variables.tf اضافه کنید و مطمئن شوید که یک کاراکتر خط جدید در بالا و پایین بلوک متغیری که اضافه می کنید دارید.

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. یک ویژگی جدید به نمونه سطل ذخیره سازی اضافه کنید

شما ویژگی خود را به main.tf ماژول اضافه کرده اید و اکنون ویژگی اضافه شده خود را از طریق یک مثال تست خواهید کرد.

"silly_label" باید به examples/multiple-buckets/main.tf اضافه شود

این مثال در مرحله بعد برای انجام تست های یکپارچه سازی استفاده خواهد شد.

خط silly_label متغیر زیر را در خط 27 در main.tf در terraform-google-cloud-storage/examples/multiple-buckets/ کپی کنید، همانطور که در ساختار پوشه مشاهده می شود:

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. برای بررسی ویژگی، آزمایش طرح اولیه را به روز کنید

شما ویژگی خود را به main.tf ماژول اضافه کرده اید و سپس ویژگی را به مثال multiple_buckets اضافه کرده اید. اکنون، باید ویژگی خود را از طریق یک تست یکپارچه سازی طرحی که در Golang نوشته شده است، آزمایش کنید.

تست های جدید خود را در فایل multiple_buckets_test.go که در ساختار پوشه زیر یافت می شود اضافه می کنید:

72ea272d4792405.png

شما "silly_label" را روی همه سطل‌هایی که از طریق ماژول multiple_buckets ایجاد می‌شوند اضافه کرده‌اید و اکنون باید تست‌هایی بنویسید تا ویژگی جدید را آزمایش کنید.

در کد زیر، برچسب هر سطل را از طریق دستور gcloud alpha storage دریافت می‌کنید و سپس خروجی برگشتی از دستور را بررسی می‌کنید.

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 را اجرا کنید

تست یکپارچه سازی

تست های یکپارچه سازی برای بررسی رفتار ماژول ریشه، زیر ماژول ها و مثال ها استفاده می شود. اضافات، تغییرات و اصلاحات باید همراه با آزمایش باشد.

تست‌های ادغام با استفاده از چارچوب تست طرح‌نویسی نوشته شده‌اند و با استفاده از CFT CLI اجرا می‌شوند. این ابزارها برای راحتی در داخل یک تصویر داکر بسته بندی شده اند.

استراتژی کلی برای این تست‌ها این است که رفتار ماژول‌های مثال را تأیید کنیم، بنابراین اطمینان حاصل کنیم که ماژول ریشه، زیرماژول‌ها و ماژول‌های نمونه همگی از نظر عملکردی درست هستند.

در اجرای تعاملی، شما هر مرحله را از طریق چند دستور اجرا می کنید.

  1. برای شروع آزمایش کانتینر Docker در حالت تعاملی make docker_run اجرا کنید.

Make یک ابزار اتوماسیون ساخت است که به طور خودکار برنامه‌ها و کتابخانه‌های اجرایی را از کد منبع با خواندن فایل‌هایی به نام Makefiles می‌سازد که نحوه استخراج برنامه هدف را مشخص می‌کند. هنگامی که فایل را تغییر می دهید، ظرف docker باید به طور خودکار به روز شود.

هنگامی که make docker_run اجرا می کنید، یک فضای کاری در ظرف docker خود ایجاد می کنید و اعتبارنامه ها را برای حساب سرویس خود فعال می کنید. از فضای کاری در مراحل بعدی برای اجرای تست ها استفاده خواهد شد.

خروجی زیر را در ترمینال خود خواهید دید:

Activated service account credentials for: [cft@<PROJECT_ID>.iam.gserviceaccount.com]
  1. cft test list را اجرا کنید تا تمام تست‌های نقشه‌های موجود در فضای کاری شما فهرست شود.

خروجی زیر را در ترمینال خود خواهید دید:

[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. cft test run <EXAMPLE_NAME> --stage init برای مقداردهی اولیه مثال اجرا کنید. در این مورد برای مقداردهی اولیه تست TestMultipleBuckets ، cft test run TestMultipleBuckets --stage init . همچنین می‌توانید از پرچم --verbose برای دریافت اطلاعات اضافی هنگام اجرای آزمایش‌ها استفاده کنید.

این مرحله آغازین مثال Terraform را مقداردهی اولیه می کند.

خروجی زیر را در ترمینال خود خواهید دید.

[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. cft test run <EXAMPLE_NAME> --stage apply برای اعمال ماژول مثال.

این مرحله مثال اولیه شده در مرحله قبل را برای پروژه GCP که قبلاً در Codelab ایجاد شده بود اعمال می کند.

خروجی زیر را در ترمینال خود خواهید دید.

[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. cft test run <EXAMPLE_NAME> --stage verify برای بررسی اینکه آیا مثال زیرساخت مورد انتظار را ایجاد کرده است را اجرا کنید.

این مرحله تابع تایید را در TestMultipleBuckets اجرا می کند. معمولاً تأیید از طریق اجرای دستور gcloud برای بازیابی خروجی JSON برای وضعیت فعلی یک منبع و بیان اینکه وضعیت فعلی همانطور که در مثال اعلام شده است انجام می شود.

اگر خطایی دریافت کردید، خواهید دید که چه چیزی مورد انتظار بود و چه چیزی توسط فرمان برای تست دریافت شد.

خروجی زیر را در ترمینال خود خواهید دید.

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. cft test run <EXAMPLE_NAME> --stage teardown برای حذف مثال اجرا کنید.

این مرحله زیرساختی که در مراحل بالا ایجاد کرده اید را از بین می برد. این مرحله همچنین سطل های GCS ایجاد شده در پروژه را به همراه برچسبی که به ماژول GCS اضافه کرده اید از بین می برد.

می توانید خروجی زیر را در ترمینال خود مشاهده کنید.

[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. exit اجرا کنید تا از محفظه آزمایش خارج شوید.

9. ایجاد اسناد برای ورودی ها و خروجی ها

جداول ورودی و خروجی در README های ماژول ریشه، زیر ماژول ها و ماژول های نمونه به طور خودکار بر اساس variables و outputs ماژول های مربوطه تولید می شوند. در صورت تغییر رابط های ماژول، این جداول باید به روز شوند.

اجرا کن:

make generate_docs
# This will generate new Inputs and Outputs tables

10. تست های پرز در CFT را اجرا کنید

Linter ابزاری است که کد منبع را تجزیه و تحلیل می کند تا خطاهای برنامه نویسی، اشکالات، خطاهای سبکی و ساختارهای مشکوک را پرچم گذاری کند.

بسیاری از فایل‌های موجود در مخزن را می‌توان برای حفظ کیفیت استاندارد پرده یا قالب‌بندی کرد. برای اطمینان از کیفیت در CFT، از تست پرز استفاده می کنید.

اجرا کن:

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

11. ارسال روابط عمومی در Github

اکنون که کد خود را به صورت محلی تغییر داده اید و آن را از طریق تست های یکپارچه سازی آزمایش کرده اید، می خواهید این کد را در مخزن اصلی منتشر کنید.

برای در دسترس قرار دادن کد خود در مخزن اصلی، باید تغییرات کد را در شعبه خود انجام دهید و آن را به مخزن اصلی فشار دهید. برای اینکه کد شما به مخزن اصلی که در ابتدای Codelab فورک کرده اید اضافه شود، پس از تخصیص کد به مخزن خود، یک Pull Request (PR) در مخزن اصلی مطرح می کنید.

هنگامی که یک PR را مطرح می کنید، به مدیر repo اطلاع داده می شود تا تغییرات کد پیشنهادی را بررسی کند. علاوه بر این، می توانید کاربران دیگری را نیز به عنوان بازبین اضافه کنید تا در مورد تغییرات کد خود بازخورد دریافت کنید. روابط عمومی یک Cloud Build را راه‌اندازی می‌کند که آزمایش‌هایی را روی مخزن اجرا می‌کند.

بر اساس تغییرات کد شما، بازبینان کد نظراتی را در مورد کد شما ارائه می‌کنند و در صورت نیاز به تغییر بر اساس بهترین شیوه‌ها و مستندات، تغییراتی را درخواست می‌کنند. سرپرست تغییرات کد شما را بررسی می‌کند، مطمئن می‌شود که کد شما با مخزن مطابقت دارد و ممکن است دوباره از شما بخواهد قبل از ادغام کد خود در مخزن اصلی، تغییراتی ایجاد کنید.

مراحل زیر را برای ارسال کد به شاخه انشعاباتی خود و فشار دادن کد به شاخه فورک شده خود انجام دهید:

  1. مرحله اول اضافه کردن فایل های تغییر یافته به مخزن محلی است.
$ 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. فایل های شما اکنون مرحله بندی شده اند، در مرحله بعد تغییرات را انجام خواهید داد.
$ 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. تغییرات متعهد در مخزن محلی خود را برای ایجاد یک درخواست کشش (PR) به GitHub فشار دهید.
$ git push -u origin feature/silly_label
# Pushes the changes in your local repository up to the remote
# repository you specified as the origin

تغییرات کد شما اکنون برای یک درخواست کششی آماده است!

مراحل زیر را برای ایجاد روابط عمومی در مخزن terraform-google-modules/terraform-google-cloud-storage انجام دهید :

  1. در مرورگر وب خود، به صفحه اصلی مخزن بروید.
  2. پیشنهادی از طریق بنر برای باز کردن روابط عمومی از چنگال خود خواهید دید. بر روی "مقایسه و کشش درخواست" کلیک کنید.

60e7ae0cbc11588e.png

  1. عنوان و توضیحاتی را برای درخواست کشش خود وارد کنید تا تغییرات کد خود را توضیح دهید. در عین مختصر بودن تا حد امکان خاص باشید.

329342f7e9d64410.png

  1. برای ایجاد یک درخواست کشش که آماده بررسی است، روی «ایجاد درخواست کشش» کلیک کنید.
  2. تریگرهای ساخت ابر را خواهید دید که به دلیل روابط عمومی راه اندازی می شوند.
  3. در صورت مواجه شدن با هر گونه مشکل، به اسناد رسمی GitHub برای باز کردن درخواست‌های کشش از فورک‌ها مراجعه کنید.

شما با موفقیت اولین تغییر کد خود را به شاخه چنگالی خود انجام دادید و اولین CFT PR خود را در برابر شاخه اصلی افزایش دادید!

12. تبریک می گویم

تبریک می گویم، شما با موفقیت یک ویژگی را به یک ماژول CFT اضافه کرده اید و یک PR را برای بررسی ارسال کرده اید!

شما یک ویژگی را به یک ماژول CFT اضافه کرده اید، آن را به صورت محلی از طریق یک مثال آزمایش کرده اید و قبل از اینکه کد خود را به GitHub بفرستید، آزمایشاتی را انجام داده اید. در نهایت، شما یک PR را برای بررسی و ادغام نهایی در CFT مطرح کردید.

اکنون مراحل مهمی را برای شروع کار با Cloud Foundation Toolkit می دانید.