automated terminal push
This commit is contained in:
220
ansible/setup-ansible.sh
Normal file
220
ansible/setup-ansible.sh
Normal file
@@ -0,0 +1,220 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Enterprise Ansible Setup and Test Script
|
||||
# This script sets up the Ansible environment and runs tests
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if we're in the right directory
|
||||
if [ ! -d "ansible" ]; then
|
||||
print_error "ansible directory not found. Please run this script from your project root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ansible
|
||||
|
||||
print_status "Setting up Enterprise Ansible environment..."
|
||||
|
||||
# Create necessary directories
|
||||
print_status "Creating directory structure..."
|
||||
mkdir -p group_vars
|
||||
mkdir -p templates
|
||||
mkdir -p roles
|
||||
mkdir -p inventories/production
|
||||
mkdir -p inventories/staging
|
||||
|
||||
# Install Python dependencies
|
||||
print_status "Installing Python dependencies..."
|
||||
pip3 install --user boto3 botocore jmespath > /dev/null 2>&1 || {
|
||||
print_warning "Could not install Python dependencies. Install manually: pip3 install boto3 botocore jmespath"
|
||||
}
|
||||
|
||||
# Check Ansible installation
|
||||
if ! command -v ansible &> /dev/null; then
|
||||
print_error "Ansible not found. Please install Ansible first:"
|
||||
echo " Ubuntu/Debian: sudo apt update && sudo apt install ansible"
|
||||
echo " RHEL/CentOS: sudo yum install ansible"
|
||||
echo " macOS: brew install ansible"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ANSIBLE_VERSION=$(ansible --version | head -n1)
|
||||
print_success "Found: $ANSIBLE_VERSION"
|
||||
|
||||
# Check AWS CLI
|
||||
if ! command -v aws &> /dev/null; then
|
||||
print_error "AWS CLI not found. Please install AWS CLI first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
AWS_VERSION=$(aws --version)
|
||||
print_success "Found: $AWS_VERSION"
|
||||
|
||||
# Validate configuration files
|
||||
print_status "Validating Ansible configuration files..."
|
||||
|
||||
# Check if main playbook exists
|
||||
if [ ! -f "configure_ecs.yml" ]; then
|
||||
print_error "configure_ecs.yml not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate YAML syntax
|
||||
if command -v yamllint &> /dev/null; then
|
||||
print_status "Checking YAML syntax..."
|
||||
yamllint configure_ecs.yml || print_warning "YAML syntax issues found (non-critical)"
|
||||
else
|
||||
print_warning "yamllint not found. Install with: pip3 install yamllint"
|
||||
fi
|
||||
|
||||
# Validate Ansible playbook syntax
|
||||
print_status "Validating Ansible playbook syntax..."
|
||||
ansible-playbook configure_ecs.yml --syntax-check || {
|
||||
print_error "Ansible syntax validation failed!"
|
||||
exit 1
|
||||
}
|
||||
print_success "Ansible syntax validation passed"
|
||||
|
||||
# Test functions
|
||||
test_connectivity() {
|
||||
local ip=$1
|
||||
if [ -z "$ip" ]; then
|
||||
print_error "No IP address provided for connectivity test"
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_status "Testing connectivity to $ip..."
|
||||
|
||||
# Test SSH connectivity
|
||||
if timeout 10 bash -c "nc -z $ip 22" &>/dev/null; then
|
||||
print_success "SSH port (22) is reachable"
|
||||
else
|
||||
print_error "SSH port (22) is not reachable"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Test Ansible ping
|
||||
if ansible inventory_hosts -m ping -i hosts &>/dev/null; then
|
||||
print_success "Ansible connectivity test passed"
|
||||
else
|
||||
print_error "Ansible connectivity test failed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Create a test inventory for validation
|
||||
create_test_inventory() {
|
||||
local ip=${1:-"127.0.0.1"}
|
||||
|
||||
print_status "Creating test inventory with IP: $ip"
|
||||
|
||||
cat > hosts_test << EOF
|
||||
[inventory_hosts]
|
||||
test-instance ansible_host=$ip ansible_user=ec2-user
|
||||
|
||||
[inventory_hosts:vars]
|
||||
ansible_ssh_private_key_file=~/.ssh/id_rsa
|
||||
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10'
|
||||
ansible_python_interpreter=/usr/bin/python3
|
||||
ansible_connection=ssh
|
||||
aws_region=us-east-2
|
||||
EOF
|
||||
}
|
||||
|
||||
# Main execution
|
||||
print_status "Ansible Enterprise Setup Complete!"
|
||||
echo
|
||||
echo "Available operations:"
|
||||
echo " 1. Test connectivity (requires EC2 IP)"
|
||||
echo " 2. Run simple deployment test"
|
||||
echo " 3. Validate all playbooks"
|
||||
echo " 4. Show configuration summary"
|
||||
echo
|
||||
|
||||
# Interactive mode
|
||||
if [ "$1" == "--interactive" ]; then
|
||||
echo -n "Enter operation number (1-4): "
|
||||
read -r operation
|
||||
|
||||
case $operation in
|
||||
1)
|
||||
echo -n "Enter EC2 instance IP: "
|
||||
read -r ec2_ip
|
||||
create_test_inventory "$ec2_ip"
|
||||
if test_connectivity "$ec2_ip"; then
|
||||
print_success "Connectivity test passed!"
|
||||
else
|
||||
print_error "Connectivity test failed!"
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
echo -n "Enter EC2 instance IP: "
|
||||
read -r ec2_ip
|
||||
create_test_inventory "$ec2_ip"
|
||||
print_status "Running simple deployment test..."
|
||||
ansible-playbook simple-deploy.yml -i hosts_test -v
|
||||
;;
|
||||
3)
|
||||
print_status "Validating all playbooks..."
|
||||
for playbook in *.yml; do
|
||||
if [ -f "$playbook" ]; then
|
||||
print_status "Validating $playbook..."
|
||||
ansible-playbook "$playbook" --syntax-check
|
||||
fi
|
||||
done
|
||||
print_success "All playbooks validated!"
|
||||
;;
|
||||
4)
|
||||
print_status "Configuration Summary:"
|
||||
echo " - Working Directory: $(pwd)"
|
||||
echo " - Ansible Version: $(ansible --version | head -n1)"
|
||||
echo " - AWS CLI Version: $(aws --version 2>&1)"
|
||||
echo " - Available Playbooks:"
|
||||
ls -la *.yml 2>/dev/null | awk '{print " - " $9}' || echo " - None found"
|
||||
echo " - Python Dependencies:"
|
||||
python3 -c "import boto3, botocore; print(' - boto3: ' + boto3.__version__); print(' - botocore: ' + botocore.__version__)" 2>/dev/null || echo " - Not installed"
|
||||
;;
|
||||
*)
|
||||
print_error "Invalid operation number"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
if [ -f "hosts_test" ]; then
|
||||
rm -f hosts_test
|
||||
fi
|
||||
|
||||
print_success "Setup script completed!"
|
||||
echo
|
||||
echo "Next steps:"
|
||||
echo " 1. Update your Jenkins pipeline with the new Ansible integration"
|
||||
echo " 2. Test with: ./setup-ansible.sh --interactive"
|
||||
echo " 3. Run deployment: ansible-playbook configure_ecs.yml -i hosts -v"
|
||||
echo
|
Reference in New Issue
Block a user