উত্তর:
আসলে তা না. যদিও এটিকে ঘিরে কাজ করার মানক উপায় হ'ল উদাহরণ:
terraform apply -target=aws_security_group.my_sg
তবে এটি কেবল একবারে একটি সুরক্ষা গোষ্ঠী প্রয়োগ করতে চলেছে, তাই আপনার যদি তাদের প্রচুর পরিমাণ থাকে তবে ক্লান্তিকর হয়ে উঠবেন। তবে আপনি এক কমান্ডে একাধিক সংস্থান লক্ষ্যবস্তু করতে পারেন:
terraform apply -target=aws_security_group.my_sg -target=aws_security_group.my_2nd_sg
তবে সম্ভাব্য দু'টি কাজের ক্ষেত্র রয়েছে:
-target
পরামিতি নির্ভরতা সম্মান করে।
এর অর্থ হল যদি আপনি উদাঃ হন। -target=aws_instance.my_server
এবং এই উদাহরণটি ছিল, বলুন, এটি অন্তরঙ্গকরণের মাধ্যমে সংযুক্ত পাঁচটি সুরক্ষা গোষ্ঠী, সেই সুরক্ষা গোষ্ঠীর পরিবর্তনগুলি পরিকল্পনার মধ্যে অন্তর্ভুক্ত করা উচিত (আমি এটির পুরোপুরি পরীক্ষা করিনি, তবে আমি বিশ্বাস করি যে এটি কীভাবে কাজ করে))
যদিও এটি কিছুটা অগোছালো, কারণ আপনি সম্ভবত কোনও উদাহরণ স্পর্শ করতে চান না। সুরক্ষিত null_resource
গোষ্ঠীগুলির জন্য একটি লক্ষ্য সরবরাহ করার জন্য একটি নিরাপদ বিকল্পের মতো কিছু ব্যবহার করা হতে পারে , তবে আবার আমি এটি চেষ্টা করিনি (যদিও অন্য কোনও 'নিরাপদ' সংস্থান থাকতে পারে তবে আপনি নির্ভর করতে পারেন?)।
একটি মডিউল তৈরি করুন।
আপনি যেমন কোনও সরল সংস্থানকে লক্ষ্য করতে পারেন ঠিক তেমন একটি মডিউলও আপনি লক্ষ্য করতে পারেন:
terraform apply -target=module.my_security_groups
এই মডিউলটির অভ্যন্তরে, আপনি আপনার সুরক্ষা গোষ্ঠীগুলির সমস্ত সংজ্ঞা দিতে পারেন - ঠিক যেমন মডিউলটির বাইরে আপনারও রয়েছে। এটি সরাসরি লক্ষ্যবস্তু করতে সক্ষম হওয়ার পাশাপাশি, আপনার যদি কখনও প্রয়োজন হয় তবে অন্যান্য অবকাঠামোতে একই সুরক্ষা গোষ্ঠীগুলির পুনরায় ব্যবহার করা আপনার পক্ষে সহজ করে তোলে।
এটি সম্ভব বলে মনে হচ্ছে না। কনফিগারেশন ফাইলগুলি লোড করার কোড এখানে রয়েছে এবং এটি বর্তমান ডিরেক্টরি (বা একটি নির্দিষ্ট) থেকে সমস্ত * .tf ফাইল লোড করে এবং একটি ফাইলে কনফিগারেশন সীমিত করার মতো কিছুই নেই।
টেরাফর্ম মডিউলটি ব্যবহার করা পছন্দনীয়, তবে যদি আপনাকে সত্যিই কোনও একক ফাইলের বিরুদ্ধে টেরাফর্ম প্রয়োগ করতে হয় তবে আমি এই ব্যাশ স্ক্রিপ্টটি একটি ফাইলের সমস্ত লক্ষ্য এবং মডিউলের বিরুদ্ধে টেরফর্ম প্রয়োগ কমান্ড উত্পন্ন করতে তৈরি করেছি:
#!/usr/bin/env bash
if [[ -z "$@" ]]; then
echo "Missing file input arguments"
exit 1
fi
echo "terraform apply \\"
for FILE in "$@"
do
RESOURCE=$(sed -n 's/resource "\([^"]*\)" "\([^"]*\)".*/-target=\1.\2 \\/gp' $FILE)
MODULE=$(sed -n 's/module "\([^"]*\)".*/-target=module.\1 \\/gp' $FILE)
if [[ -z "$RESOURCE" ]] && [[ -z "$MODULE" ]]; then
echo "Cannot detect terraform resource and module in $FILE"
exit 1
fi
if [[ ! -z "$RESOURCE" ]]; then
echo -e $"$RESOURCE"
fi
if [[ ! -z "$MODULE" ]]; then
echo -e $"$MODULE"
fi
done
echo "-refresh=true"
আমি আসলে বাশ বিশেষজ্ঞ নই, তবে ম্যাকের কাজ করার জন্য এটি পরীক্ষা করা হয়েছিল।
সম্পাদনা: সেড কমান্ড অনুমান করে যে সংস্থানগুলি এবং মডিউলগুলি যথাযথভাবে অনুসারে বিন্যাস করা হয়েছে terraform fmt
:
resource "aws_eip" "my_public_ip" {
}
resource "aws_instance" "my_server" {
}
module "my_module" {
}