ক্লাউড ফাউন্ডেশন টুলকিট 101

1. CFT 101 এর ভূমিকা

b1d2ab0f35bb62a8.png

শেষ আপডেট: 2022-02-11

ক্লাউড ফাউন্ডেশন টুলকিট কি?

সংক্ষেপে, Google ক্লাউড প্ল্যাটফর্মে দ্রুত শুরু করার জন্য CFT সেরা-অভ্যাসের টেমপ্লেট সরবরাহ করে। এই টিউটোরিয়ালে, আপনি শিখবেন কিভাবে ক্লাউড ফাউন্ডেশন টুলকিটে অবদান রাখতে হয়।

আপনি কি প্রয়োজন হবে

  • একটি GitHub অ্যাকাউন্ট।
  • আপনার মেশিনে ডকার ইনস্টল করুন বা ক্লাউড শেল ব্যবহার করুন ( ম্যাক ইনস্টল , উইন্ডোজ ইনস্টল l)
  • কোড সম্পাদনার জন্য কোড সম্পাদক (উদাহরণ: ভিজ্যুয়াল স্টুডিও কোড )
  • গিট এবং গিটহাবের সাথে প্রাথমিক পরিচিতি
  • কোড হিসাবে Terraform এবং পরিকাঠামোর সাথে কিছু অভিজ্ঞতা
  • একটি পরিষেবা অ্যাকাউন্টে প্রকল্প নির্মাতার ভূমিকা প্রদানের অনুমতি৷
  • একটি Google ক্লাউড সংস্থা, একটি পরীক্ষা ফোল্ডার এবং একটি বিলিং অ্যাকাউন্ট৷

আপনি কি নির্মাণ করবেন

এই কোডল্যাবে, আপনি শিখতে যাচ্ছেন কিভাবে ক্লাউড ফাউন্ডেশন টুলকিটে (CFT) অবদান রাখতে হয়।

আপনি করবেন:

  • CFT এ অবদান রাখার জন্য একটি ডেভ এনভায়রনমেন্ট সেটআপ করুন
  • একটি CFT মডিউলে একটি বৈশিষ্ট্য যোগ করুন
  • যোগ করা বৈশিষ্ট্যের জন্য পরীক্ষা যোগ করুন
  • CFT এ ইন্টিগ্রেশন পরীক্ষা চালান
  • লিন্ট পরীক্ষা চালান
  • গিটহাবে কোড কমিট করুন এবং একটি পুল রিকোয়েস্ট (পিআর) জমা দিন

আপনি Google ক্লাউড স্টোরেজ CFT মডিউলে একটি নতুন বৈশিষ্ট্য যোগ করে উপরের সমস্ত পদক্ষেপগুলি সম্পাদন করবেন৷ আপনি "silly_label" নামক একটি লেবেল যোগ করবেন যা GCS CFT মডিউলের মাধ্যমে তৈরি করা সমস্ত বালতিতে স্বয়ংক্রিয়ভাবে যুক্ত হবে। এছাড়াও আপনি আপনার বৈশিষ্ট্য যাচাই করতে এবং শেষ থেকে শেষ ইন্টিগ্রেশন নিশ্চিত করতে পরীক্ষা লিখতে পারবেন।

2. ডেভ এনভায়রনমেন্ট সেটআপ করুন

আপনি যদি চান, আপনি আপনার উন্নয়নের উদ্দেশ্যে ক্লাউড শেল ব্যবহার করতে পারেন। আপনি যদি CFT-এ অবদানের জন্য ক্লাউড শেল ব্যবহার করতে না চান, তাহলে আপনি আপনার মেশিনে আপনার ডেভ এনভায়রনমেন্ট সেট আপ করতে পারেন।

গিট সেট আপ করুন

GitHub একটি ওপেন সোর্স ভার্সন কন্ট্রোল সিস্টেম (VCS) এর উপর ভিত্তি করে গিট নামক। আপনার মেশিনে বা আপনার ক্লাউড শেলে স্থানীয়ভাবে ঘটে যাওয়া গিটহাব-সম্পর্কিত সবকিছুর জন্য গিট দায়ী।

  1. আপনি যখন ক্লাউড শেল ব্যবহার করেন, তখন আপনাকে গিট ইনস্টল করতে হবে না কারণ এটি আগে থেকে ইনস্টল করা হয়।
$ git --version
# This will display the git version on the Cloud Shell.

আপনি যদি আপনার মেশিনে আপনার ডেভ পরিবেশ সেট আপ করেন তবে আপনাকে গিট ইনস্টল করতে হবে।

গিটে আপনার ব্যবহারকারীর নাম এবং ইমেল সেট করা হচ্ছে

গিট একটি পরিচয়ের সাথে কমিট যুক্ত করতে একটি ব্যবহারকারীর নাম ব্যবহার করে। গিট ব্যবহারকারীর নামটি আপনার গিটহাব ব্যবহারকারীর নামের মতো নয়।

আপনি git config কমান্ড ব্যবহার করে আপনার গিট কমিটের সাথে যুক্ত নাম পরিবর্তন করতে পারেন। git config ব্যবহার করে আপনার গিট কমিটের সাথে যুক্ত নাম পরিবর্তন করা শুধুমাত্র ভবিষ্যতের প্রতিশ্রুতিকে প্রভাবিত করবে এবং অতীতের প্রতিশ্রুতিগুলির জন্য ব্যবহৃত নাম পরিবর্তন করবে না।

আপনি সফলভাবে গিট সেট আপ করেছেন এবং আপনি কাঁটাচামচ, তৈরি এবং শাখা ক্লোন করতে সক্ষম হবেন। আমরা এই কোডল্যাবে ব্যাপকভাবে গিট ব্যবহার করব।

3. ফর্ক CFT এর GCS সংগ্রহস্থল

একটি CFT সংগ্রহস্থল ফর্ক করুন

আপনি আগের ধাপে আপনার স্থানীয় মেশিনে বা আপনার ক্লাউড শেলে গিট সেট আপ করেছেন। অবদান রাখা শুরু করার জন্য এখন আপনাকে Google ক্লাউড স্টোরেজ CFT রেপোতে কাঁটা দিতে হবে।

একটি কাঁটা একটি সংগ্রহস্থল একটি অনুলিপি. একটি সংগ্রহস্থলকে ফোর্ক করা আপনাকে মূল প্রকল্পকে প্রভাবিত না করেই পরিবর্তনের সাথে অবাধে পরীক্ষা করার অনুমতি দেয়।

সাধারণত, কাঁটা ব্যবহার করা হয় অন্য কারো প্রজেক্টে পরিবর্তনের প্রস্তাব দিতে বা অন্য কারো প্রজেক্টকে আপনার নিজের ধারণার সূচনা বিন্দু হিসেবে ব্যবহার করতে।

উদাহরণস্বরূপ, আপনি একটি বাগ ফিক্সিং সম্পর্কিত পরিবর্তন প্রস্তাব করতে কাঁটাচামচ ব্যবহার করতে পারেন। একটি বাগ ঠিক করতে, আপনি করতে পারেন:

  • ভান্ডার কাঁটাচামচ.
  • ঠিক করুন।
  • প্রকল্পের মালিকের কাছে একটি টান অনুরোধ জমা দিন।

একটি CFT রেপো ফোর্ক করার জন্য পদক্ষেপ:

  1. আপনার ওয়েব ব্রাউজার খুলুন এবং terraform-google-modules/terraform-google-cloud-storage repository-এ নেভিগেট করুন। আমরা পুরো কোডল্যাবের জন্য এই রেপো ব্যবহার করব।
  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"

আপনি এখন ক্লাউড ফাউন্ডেশন টুলকিটে কাজ শুরু করার জন্য সমস্ত সেটআপ করেছেন!

4. একটি পরীক্ষার পরিবেশ তৈরি করুন

স্ট্যান্ডার্ড সিএফটি বিকাশ প্রক্রিয়াটি পরীক্ষার জন্য একটি বিচ্ছিন্ন পরীক্ষা প্রকল্প ব্যবহার করে। এই পদক্ষেপটি একটি পরিষেবা অ্যাকাউন্টের মাধ্যমে পরীক্ষামূলক প্রকল্প (একটি স্ট্যান্ডার্ড কনফিগারেশনের উপর ভিত্তি করে) তৈরি করার মাধ্যমে আপনাকে গাইড করবে।

0. ডকার ইঞ্জিন ইনস্টল করুন

আপনি যদি আপনার মেশিনটি উন্নয়নের উদ্দেশ্যে ব্যবহার করেন তবে আপনাকে ডকার ইঞ্জিন ইনস্টল করতে হবে।

1. Google Cloud SDK ইনস্টল করুন৷

আপনি যদি GCP ক্লাউড শেল ব্যবহার করেন তাহলে আপনাকে Google Cloud SDK ইনস্টল করার দরকার নেই৷

Google Cloud SDK- এ যান এবং আপনার প্ল্যাটফর্মের জন্য ইন্টারেক্টিভ ইনস্টলার ডাউনলোড করুন।

2. কনফিগারেশন সেট করুন

একটি পরীক্ষার পরিবেশ তৈরি করার জন্য, আপনার একটি Google ক্লাউড সংস্থা, একটি পরীক্ষা ফোল্ডার এবং একটি বিলিং অ্যাকাউন্টের প্রয়োজন হবে৷ এই মানগুলি পরিবেশের ভেরিয়েবলের মাধ্যমে সেট করা দরকার:

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. আপনার পরিষেবা অ্যাকাউন্ট সেট আপ করুন৷

একটি পরীক্ষার পরিবেশ তৈরি করার আগে, আপনাকে আপনার পরীক্ষার পরিবেশে একটি পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করতে হবে। এই পরিষেবা অ্যাকাউন্টের প্রয়োজন হবে প্রকল্প নির্মাতা, বিলিং অ্যাকাউন্ট ব্যবহারকারী, এবং সংস্থা দর্শকের ভূমিকা। এই পদক্ষেপগুলি আপনাকে একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করতে সহায়তা করে তবে আপনি একটি বিদ্যমান অ্যাকাউন্ট পুনরায় ব্যবহার করতে পারেন।

3.1 বীজ GCP প্রকল্প তৈরি বা নির্বাচন করুন

আপনার পরিষেবা অ্যাকাউন্ট তৈরি করার আগে, আপনাকে এটি হোস্ট করার জন্য একটি প্রকল্প নির্বাচন করতে হবে৷ আপনি একটি নতুন প্রকল্পও তৈরি করতে পারেন৷

gcloud config set core/project YOUR_PROJECT_ID

3.2 Google ক্লাউড API সক্ষম করুন৷

আপনার বীজ প্রকল্পে নিম্নলিখিত Google ক্লাউড APIগুলি সক্ষম করুন:

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. টেরাফর্ম শংসাপত্র প্রস্তুত করুন

পরীক্ষার পরিবেশ তৈরি করার জন্য, আপনাকে আপনার শেলে পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করতে হবে।

4.1 পরিষেবা অ্যাকাউন্ট কী

Terraform এর জন্য একটি পরিষেবা অ্যাকাউন্ট কী তৈরি করুন এবং ডাউনলোড করুন

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

4.2 টেরাফর্ম শংসাপত্র সেটআপ করুন

পরিবেশ পরিবর্তনশীল SERVICE_ACCOUNT_JSON ব্যবহার করে Terraform-এ কী সরবরাহ করুন, আপনার পরিষেবা অ্যাকাউন্ট কী-এর বিষয়বস্তুর মান নির্ধারণ করুন।

export SERVICE_ACCOUNT_JSON=$(< cft.json)

এনভায়রনমেন্ট ভেরিয়েবলে শংসাপত্রের তথ্য সংরক্ষণ করার পরে, কীফাইলটি সরান। উপরের একই কমান্ড ব্যবহার করে প্রয়োজন হলে আপনি পরে একটি কী পুনরায় তৈরি করতে পারেন।

rm -rf cft.json

5. টেরাফর্ম স্থাপনার জন্য পরীক্ষামূলক প্রকল্প তৈরি করুন

এখন সবকিছু প্রস্তুত করা হয়েছে, আপনি একটি একক কমান্ড দিয়ে পরীক্ষা প্রকল্প তৈরি করতে পারেন। terraform-google-Cloud-storage ডিরেক্টরি রুট থেকে এই কমান্ডটি চালান:

make docker_test_prepare

আপনি যখন make docker_test_prepare চালাবেন তখন আপনি নীচের আউটপুটটি দেখতে পাবেন, শেষে আপনি পরীক্ষামূলক প্রকল্প_আইডি পাবেন যা তৈরি করা হয়েছে যেখানে আপনি আপনার নতুন বৈশিষ্ট্যের সাথে আপনার ক্লাউড স্টোরেজ মডিউলটি স্থাপন এবং পরীক্ষা করবেন। আপনি যদি একটি বিলিং অ্যাকাউন্ট লিঙ্ক করতে সমস্যার সম্মুখীন হন, তাহলে সমস্যা সমাধানের পদক্ষেপগুলি দেখুন৷

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.

আপনি এখন একটি পরীক্ষামূলক প্রকল্প তৈরি করেছেন যা প্রজেক্ট_আইডি দ্বারা উল্লেখ করা হয়েছে যেমন আপনি কনসোল আউটপুটে দেখতে পাচ্ছেন। আপনার বিকাশ এবং পরীক্ষার পরিবেশ সেটআপ করা হয়েছে।

5. CFT মডিউলে একটি নতুন বৈশিষ্ট্য যোগ করুন

এখন আপনার ডেভেলপমেন্ট এবং টেস্ট এনভায়রনমেন্ট সেটআপ করা হয়েছে, চলুন google-Cloud-storage CFT মডিউলে আপনার "silly_label" ফিচার যোগ করা শুরু করি।

নিশ্চিত করুন যে আপনি terraform-google-cloud-storage-এ আছেন এবং main.tf ফাইলটি খুলুন যেভাবে আপনি ফোল্ডারের কাঠামোতে নীচে দেখছেন।

ac1dba25408abd09.png

যেহেতু "silly_label" একটি লেবেল, তাই আপনি main.tf-এর ভেরিয়েবল "লেবেল"-এ 27 লাইনে বৈশিষ্ট্যটি যোগ করবেন, যেমন আপনি নীচে দেখছেন:

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

এখন, আপনি variables.tf-এ silly_label ভেরিয়েবল যোগ করবেন যা আপনি উপরের ফোল্ডার কাঠামোতে দেখতে পাচ্ছেন।

নিচের কোডটি কপি পেস্ট করুন এবং variables.tf-এর 31 নম্বর লাইনে যোগ করুন এবং আপনি যে ভেরিয়েবল ব্লকটি যুক্ত করবেন তার উপরে এবং নীচে একটি নতুন লাইন অক্ষর আছে তা নিশ্চিত করুন।

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 এ আপনার বৈশিষ্ট্য যোগ করেছেন এবং এখন আপনি একটি উদাহরণের মাধ্যমে আপনার যোগ করা বৈশিষ্ট্যটি পরীক্ষা করবেন।

উদাহরণ/multiple-buckets/main.tf-এ "silly_label" যোগ করতে হবে

এই উদাহরণটি পরবর্তী ধাপে ইন্টিগ্রেশন পরীক্ষা করার জন্য ব্যবহার করা হবে।

টেরাফর্ম-google-cloud-storage/examples/multiple-buckets/ এ ফোল্ডারের কাঠামোতে দেখা যায় এমন নীচের পরিবর্তনশীল silly_label লাইনটিকে main.tf-এ লাইন 27-এ কপি করুন:

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_test.go ফাইলে আপনার নতুন পরীক্ষা যোগ করবেন:

72ea272d4792405.png

আপনি মাল্টিপল_বাকেট মডিউলের মাধ্যমে তৈরি করা সমস্ত বালতিতে "সিলি_লেবেল" যোগ করেছেন এবং এখন নতুন বৈশিষ্ট্যটি পরীক্ষা করার জন্য আপনাকে পরীক্ষা লিখতে হবে।

নীচের কোডে, আপনি gcloud alpha স্টোরেজ কমান্ডের মাধ্যমে প্রতিটি বালতির লেবেল পাচ্ছেন এবং তারপর আপনি কমান্ড থেকে ফিরে আসা আউটপুট পরীক্ষা করুন।

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. ইন্টারেক্টিভ মোডে ডকার কন্টেইনার টেস্টিং শুরু করতে make docker_run চালান।

মেক হল একটি বিল্ড অটোমেশন টুল যা স্বয়ংক্রিয়ভাবে মেকফাইলস নামক ফাইলগুলি পড়ে সোর্স কোড থেকে এক্সিকিউটেবল প্রোগ্রাম এবং লাইব্রেরি তৈরি করে যা নির্দিষ্ট করে কিভাবে টার্গেট প্রোগ্রামটি বের করতে হয়। আপনি যখন ফাইল পরিবর্তন করবেন তখন ডকার কন্টেইনারটি স্বয়ংক্রিয়ভাবে আপডেট হতে হবে।

আপনি যখন make docker_run চালান, তখন আপনি আপনার ডকার কন্টেইনারে একটি ওয়ার্কস্পেস তৈরি করেন এবং আপনার পরিষেবা অ্যাকাউন্টের জন্য শংসাপত্রগুলি সক্রিয় করেন। ওয়ার্কস্পেস পরীক্ষা চালানোর জন্য পরবর্তী ধাপে ব্যবহার করা হবে।

আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন:

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 পতাকা ব্যবহার করতে পারেন।

এই init পর্যায়টি 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 প্রকল্পে পূর্ববর্তী পর্যায়ে সূচনাকৃত উদাহরণ প্রয়োগ করে।

আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন।

[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 এ যাচাই ফাংশন চালাবে। সাধারণত একটি রিসোর্সের বর্তমান অবস্থার জন্য JSON আউটপুট পুনরুদ্ধার করার জন্য একটি gcloud কমান্ড কার্যকর করার মাধ্যমে যাচাই করা হয় এবং দাবি করা হয় যে বর্তমান অবস্থা উদাহরণে ঘোষণা করা হয়েছে।

আপনি যদি কোনো ত্রুটি পান, আপনি দেখতে পাবেন কী প্রত্যাশিত ছিল এবং পরীক্ষার জন্য কমান্ড দ্বারা কী প্রাপ্ত হয়েছিল।

আপনি আপনার টার্মিনালে নীচের আউটপুট দেখতে পাবেন।

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 এ লিন্ট পরীক্ষা চালান

একটি লিন্টার হল এমন একটি টুল যা প্রোগ্রামিং ত্রুটি, বাগ, শৈলীগত ত্রুটি এবং সন্দেহজনক নির্মাণগুলিকে ফ্ল্যাগ করার জন্য সোর্স কোড বিশ্লেষণ করে।

রিপোজিটরির অনেক ফাইল মানের মান বজায় রাখতে লিন্টেড বা ফরম্যাট করা যেতে পারে। সিএফটি-তে গুণমান নিশ্চিত করতে, আপনি একটি লিন্ট পরীক্ষা ব্যবহার করবেন।

চালান:

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

11. Github-এ PR জমা দেওয়া

এখন আপনি স্থানীয়ভাবে আপনার কোড পরিবর্তন করেছেন এবং ইন্টিগ্রেশন পরীক্ষার মাধ্যমে এটি পরীক্ষা করেছেন আপনি এই কোডটি মাস্টার রেপোতে প্রকাশ করতে চান।

আপনার কোডটি মাস্টার রেপোতে উপলব্ধ করতে, আপনাকে আপনার শাখায় কোড পরিবর্তন করতে হবে এবং এটিকে মাস্টার সংগ্রহস্থলে ঠেলে দিতে হবে। আপনার কোড মূল রেপোতে যোগ করার জন্য যেটি আপনি কোডল্যাবের শুরুতে কাঁটা দিয়েছিলেন, আপনি আপনার রেপোতে কোড দেওয়ার পরে মাস্টার রেপোতে একটি পুল অনুরোধ (PR) উত্থাপন করবেন।

আপনি যখন PR বাড়াবেন, প্রস্তাবিত কোড পরিবর্তনগুলি পর্যালোচনা করার জন্য রেপো অ্যাডমিনকে অবহিত করা হবে। উপরন্তু, আপনি আপনার কোড পরিবর্তনের প্রতিক্রিয়া পেতে অন্যান্য ব্যবহারকারীদেরও পর্যালোচক হিসেবে যোগ করতে পারেন। পিআর একটি ক্লাউড বিল্ডকে ট্রিগার করবে যা রেপোতে পরীক্ষা চালাবে।

আপনার কোড পরিবর্তনের উপর ভিত্তি করে, কোড পর্যালোচকরা আপনার কোডের উপর মন্তব্য প্রদান করবে এবং সর্বোত্তম অনুশীলন এবং ডকুমেন্টেশনের উপর ভিত্তি করে কিছু পরিবর্তন করার প্রয়োজন হলে পরিবর্তনের জন্য বলবে। প্রশাসক আপনার কোড পরিবর্তনগুলি পর্যালোচনা করবেন, আপনার কোড রেপোর সাথে সঙ্গতিপূর্ণ কিনা তা নিশ্চিত করুন এবং আপনার কোড মাস্টার রেপোতে মার্জ করার আগে আপনাকে আবার কিছু পরিবর্তন করার জন্য অনুরোধ করতে পারে।

আপনার কাঁটাযুক্ত শাখায় কোড কমিট করার জন্য নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন এবং আপনার কাঁটাযুক্ত শাখায় কোড পুশ করুন:

  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. একটি পুল রিকোয়েস্ট (পিআর) তৈরি করার জন্য আপনার স্থানীয় সংগ্রহস্থলে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলিকে গিটহাবে পুশ করুন।
$ 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 repo- তে PR তৈরি করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন :

  1. আপনার ওয়েব ব্রাউজারে, রেপোর মূল পৃষ্ঠায় নেভিগেট করুন।
  2. আপনি আপনার কাঁটা থেকে একটি পিআর খুলতে ব্যানারের মাধ্যমে একটি পরামর্শ দেখতে পাবেন। "তুলনা এবং অনুরোধ অনুরোধ" এ ক্লিক করুন।

60e7ae0cbc11588e.png

  1. আপনার কোড পরিবর্তনগুলি বর্ণনা করতে আপনার পুল অনুরোধের জন্য একটি শিরোনাম এবং বিবরণ লিখুন৷ সংক্ষিপ্ত হওয়ার সময় যতটা সম্ভব নির্দিষ্ট হন।

329342f7e9d64410.png

  1. পর্যালোচনার জন্য প্রস্তুত একটি পুল অনুরোধ তৈরি করতে, "পুল অনুরোধ তৈরি করুন" এ ক্লিক করুন।
  2. আপনি দেখতে পাবেন ক্লাউড বিল্ড ট্রিগার চলছে যা PR এর কারণে ট্রিগার হয়েছে।
  3. আপনি কোনো সমস্যার সম্মুখীন হলে ফর্ক থেকে পুল অনুরোধ খোলার বিষয়ে অফিসিয়াল GitHub ডক্স দেখুন।

আপনি আপনার কাঁটাযুক্ত শাখায় আপনার প্রথম কোড পরিবর্তনটি সফলভাবে পুশ করেছেন এবং আপনার প্রথম CFT PR মাস্টার শাখার বিরুদ্ধে উত্থাপন করেছেন!

12. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে একটি CFT মডিউলে একটি বৈশিষ্ট্য যোগ করেছেন এবং পর্যালোচনার জন্য একটি PR জমা দিয়েছেন!

আপনি একটি CFT মডিউলে একটি বৈশিষ্ট্য যুক্ত করেছেন, একটি উদাহরণের মাধ্যমে এটি স্থানীয়ভাবে পরীক্ষা করেছেন এবং আপনার কোড GitHub এ কমিট করার আগে পরীক্ষা করেছেন। অবশেষে, আপনি পর্যালোচনার জন্য একটি PR উত্থাপন করেছেন এবং CFT-এ চূড়ান্ত একত্রীকরণ করেছেন।

আপনি এখন ক্লাউড ফাউন্ডেশন টুলকিটের সাথে শুরু করার গুরুত্বপূর্ণ পদক্ষেপগুলি জানেন৷