Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion day03/deploy_django_app.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ code_clone() {
if [ -d "django-notes-app" ]; then
echo "The code directory already exists. Skipping clone."
else
git clone https://github.com/LondheShubham153/django-notes-app.git || {
git clone https://github.com/mayurpwr7/django-notes-app.git || {
echo "Failed to clone the code."
return 1
}
Expand Down
94 changes: 94 additions & 0 deletions day04/my_own_instance_creation_file.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#!/bin/bash
#Ec2 Instance
set -euo pipefail

check_awscli() {
if ! command -v aws &> /dev/null; then
echo "AWS CLI is not installed. Please install it first." >&2
return 1
fi
}

install_awscli() {
echo "Installing AWS CLI v2 on Linux..."

# Download and install AWS CLI v2
curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt-get install -y unzip &> /dev/null
unzip -q awscliv2.zip
sudo ./aws/install

# Verify installation
aws --version

# Clean up
rm -rf awscliv2.zip ./aws
}

wait_for_instance() {
local instance_id="$1"
echo "Waiting for instance $instance_id to be in running state..."

while true; do
state=$(aws ec2 describe-instances --instance-ids "$instance_id" --query 'Reservations[0].Instances[0].State.Name' --output text)
if [[ "$state" == "running" ]]; then
echo "Instance $instance_id is now running."
break
fi
sleep 10
done
}
Comment on lines +28 to +40
Copy link

Choose a reason for hiding this comment

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

Add a timeout mechanism.

The function is correctly implemented. However, it lacks a timeout mechanism to avoid infinite loops.

Consider adding a timeout mechanism to avoid infinite loops. For example:

 wait_for_instance() {
     local instance_id="$1"
+    local timeout=300  # 5 minutes
+    local start_time=$(date +%s)
     echo "Waiting for instance $instance_id to be in running state..."
 
     while true; do
         state=$(aws ec2 describe-instances --instance-ids "$instance_id" --query 'Reservations[0].Instances[0].State.Name' --output text)
         if [[ "$state" == "running" ]]; then
             echo "Instance $instance_id is now running."
             break
         fi
+        if [[ $(($(date +%s) - start_time)) -ge $timeout ]]; then
+            echo "Timeout waiting for instance $instance_id to be in running state." >&2
+            return 1
+        fi
         sleep 10
     done
 }
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
wait_for_instance() {
local instance_id="$1"
echo "Waiting for instance $instance_id to be in running state..."
while true; do
state=$(aws ec2 describe-instances --instance-ids "$instance_id" --query 'Reservations[0].Instances[0].State.Name' --output text)
if [[ "$state" == "running" ]]; then
echo "Instance $instance_id is now running."
break
fi
sleep 10
done
}
wait_for_instance() {
local instance_id="$1"
local timeout=300 # 5 minutes
local start_time=$(date +%s)
echo "Waiting for instance $instance_id to be in running state..."
while true; do
state=$(aws ec2 describe-instances --instance-ids "$instance_id" --query 'Reservations[0].Instances[0].State.Name' --output text)
if [[ "$state" == "running" ]]; then
echo "Instance $instance_id is now running."
break
fi
if [[ $(($(date +%s) - start_time)) -ge $timeout ]]; then
echo "Timeout waiting for instance $instance_id to be in running state." >&2
return 1
fi
sleep 10
done
}


create_ec2_instance() {
local ami_id="$1"
local instance_type="$2"
local key_name="$3"
local subnet_id="$4"
local security_group_ids="$5"
local instance_name="$6"

# Run AWS CLI command to create EC2 instance
instance_id=$(aws ec2 run-instances \
--image-id "$ami_id" \
--instance-type "$instance_type" \
--key-name "$key_name" \
--subnet-id "$subnet_id" \
--security-group-ids "$security_group_ids" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$instance_name}]" \
--query 'Instances[0].InstanceId' \
--output text
)

if [[ -z "$instance_id" ]]; then
echo "Failed to create EC2 instance." >&2
exit 1
fi

echo "Instance $instance_id created successfully."

# Wait for the instance to be in running state
wait_for_instance "$instance_id"
}
Comment on lines +42 to +71
Copy link

Choose a reason for hiding this comment

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

Add input validation for parameters.

The function is correctly implemented. However, it lacks input validation for the parameters.

Consider adding input validation for the parameters to ensure they are not empty. For example:

 create_ec2_instance() {
     local ami_id="$1"
     local instance_type="$2"
     local key_name="$3"
     local subnet_id="$4"
     local security_group_ids="$5"
     local instance_name="$6"
 
+    if [[ -z "$ami_id" || -z "$instance_type" || -z "$key_name" || -z "$subnet_id" || -z "$security_group_ids" || -z "$instance_name" ]]; then
+        echo "One or more required parameters are missing." >&2
+        return 1
+    fi
+
     # Run AWS CLI command to create EC2 instance
     instance_id=$(aws ec2 run-instances \
         --image-id "$ami_id" \
         --instance-type "$instance_type" \
         --key-name "$key_name" \
         --subnet-id "$subnet_id" \
         --security-group-ids "$security_group_ids" \
         --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$instance_name}]" \
         --query 'Instances[0].InstanceId' \
         --output text
     )
 
     if [[ -z "$instance_id" ]]; then
         echo "Failed to create EC2 instance." >&2
         exit 1
     fi
 
     echo "Instance $instance_id created successfully."
 
     # Wait for the instance to be in running state
     wait_for_instance "$instance_id"
 }
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
create_ec2_instance() {
local ami_id="$1"
local instance_type="$2"
local key_name="$3"
local subnet_id="$4"
local security_group_ids="$5"
local instance_name="$6"
# Run AWS CLI command to create EC2 instance
instance_id=$(aws ec2 run-instances \
--image-id "$ami_id" \
--instance-type "$instance_type" \
--key-name "$key_name" \
--subnet-id "$subnet_id" \
--security-group-ids "$security_group_ids" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$instance_name}]" \
--query 'Instances[0].InstanceId' \
--output text
)
if [[ -z "$instance_id" ]]; then
echo "Failed to create EC2 instance." >&2
exit 1
fi
echo "Instance $instance_id created successfully."
# Wait for the instance to be in running state
wait_for_instance "$instance_id"
}
create_ec2_instance() {
local ami_id="$1"
local instance_type="$2"
local key_name="$3"
local subnet_id="$4"
local security_group_ids="$5"
local instance_name="$6"
if [[ -z "$ami_id" || -z "$instance_type" || -z "$key_name" || -z "$subnet_id" || -z "$security_group_ids" || -z "$instance_name" ]]; then
echo "One or more required parameters are missing." >&2
return 1
fi
# Run AWS CLI command to create EC2 instance
instance_id=$(aws ec2 run-instances \
--image-id "$ami_id" \
--instance-type "$instance_type" \
--key-name "$key_name" \
--subnet-id "$subnet_id" \
--security-group-ids "$security_group_ids" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$instance_name}]" \
--query 'Instances[0].InstanceId' \
--output text
)
if [[ -z "$instance_id" ]]; then
echo "Failed to create EC2 instance." >&2
exit 1
fi
echo "Instance $instance_id created successfully."
# Wait for the instance to be in running state
wait_for_instance "$instance_id"
}


main() {
check_awscli || install_awscli
if ! check_awscli ; then
install aws_cli || exit 1
fi
echo "Creating EC2 instance..."

# Specify the parameters for creating the EC2 instance
AMI_ID="ami-0522ab6e1ddcc7055"
INSTANCE_TYPE="t2.micro"
KEY_NAME="july"
SUBNET_ID="subnet-058699d5e4022d57d"
SECURITY_GROUP_IDS="sg-0e5cb3867ea4d1bea" # Add your security group IDs separated by space
INSTANCE_NAME="Shell-Script-EC2-Demo"

# Call the function to create the EC2 instance
create_ec2_instance "$AMI_ID" "$INSTANCE_TYPE" "$KEY_NAME" "$SUBNET_ID" "$SECURITY_GROUP_IDS" "$INSTANCE_NAME"

echo "EC2 instance creation completed."
}

main "$@"
Comment on lines +73 to +94
Copy link

Choose a reason for hiding this comment

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

Remove redundant check for AWS CLI installation.

The function is correctly implemented. However, there is a redundant check for AWS CLI installation.

Consider removing the redundant check for AWS CLI installation. Apply this diff:

 main() {
     check_awscli || install_awscli
-    if ! check_awscli ; then
-    install aws_cli || exit 1
-    fi
     echo "Creating EC2 instance..."
 
     # Specify the parameters for creating the EC2 instance
     AMI_ID="ami-0522ab6e1ddcc7055"
     INSTANCE_TYPE="t2.micro"
     KEY_NAME="july"
     SUBNET_ID="subnet-058699d5e4022d57d"
     SECURITY_GROUP_IDS="sg-0e5cb3867ea4d1bea"  # Add your security group IDs separated by space
     INSTANCE_NAME="Shell-Script-EC2-Demo"
 
     # Call the function to create the EC2 instance
     create_ec2_instance "$AMI_ID" "$INSTANCE_TYPE" "$KEY_NAME" "$SUBNET_ID" "$SECURITY_GROUP_IDS" "$INSTANCE_NAME"
 
     echo "EC2 instance creation completed."
 }
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
main() {
check_awscli || install_awscli
if ! check_awscli ; then
install aws_cli || exit 1
fi
echo "Creating EC2 instance..."
# Specify the parameters for creating the EC2 instance
AMI_ID="ami-0522ab6e1ddcc7055"
INSTANCE_TYPE="t2.micro"
KEY_NAME="july"
SUBNET_ID="subnet-058699d5e4022d57d"
SECURITY_GROUP_IDS="sg-0e5cb3867ea4d1bea" # Add your security group IDs separated by space
INSTANCE_NAME="Shell-Script-EC2-Demo"
# Call the function to create the EC2 instance
create_ec2_instance "$AMI_ID" "$INSTANCE_TYPE" "$KEY_NAME" "$SUBNET_ID" "$SECURITY_GROUP_IDS" "$INSTANCE_NAME"
echo "EC2 instance creation completed."
}
main "$@"
main() {
check_awscli || install_awscli
echo "Creating EC2 instance..."
# Specify the parameters for creating the EC2 instance
AMI_ID="ami-0522ab6e1ddcc7055"
INSTANCE_TYPE="t2.micro"
KEY_NAME="july"
SUBNET_ID="subnet-058699d5e4022d57d"
SECURITY_GROUP_IDS="sg-0e5cb3867ea4d1bea" # Add your security group IDs separated by space
INSTANCE_NAME="Shell-Script-EC2-Demo"
# Call the function to create the EC2 instance
create_ec2_instance "$AMI_ID" "$INSTANCE_TYPE" "$KEY_NAME" "$SUBNET_ID" "$SECURITY_GROUP_IDS" "$INSTANCE_NAME"
echo "EC2 instance creation completed."
}