diff --git a/README.md b/README.md index e020384..53db973 100644 --- a/README.md +++ b/README.md @@ -124,8 +124,8 @@ cd bolt_vm_automation bolt plan run bolt_vm_automation::create_ubuntu \ target=vortex \ vm_name=moeny-bank01 \ - ip_with_cidr=100.40.223.189/24 \ hostname=moeny-bank01 + ip_with_cidr=100.40.223.189/24 \ ``` ## Alpine VMs @@ -137,8 +137,8 @@ Below is a sample command to run the Alpine bolt plan. ```bash bolt plan run bolt_vm_automation::create_alpine \ vm_name=moeny-service \ - ip_with_cidr=100.40.223.189/24 \ hostname=moeny-service \ + ip_with_cidr=100.40.223.189/24 \ add_a_record_bool=true \ dns_hostname=service ``` @@ -181,12 +181,12 @@ In order to spin up VMs on an internal network, you will need to generate an Alp ```bash bolt plan run bolt_vm_automation::create_alpine \ vm_name=moeny-service-alpine \ - ip_with_cidr=10.44.0.20/24 \ hostname=moeny-service-alpine \ network=internal-moeny \ - staging_ip=10.44.0.250 \ + ip_with_cidr=10.44.0.20/24 \ gateway_ip=10.44.0.1 \ - iso_path=/mnt/nfs/kvm-isos/iso-build/alpine-autoinstall-internal_moeny.iso -v + iso_path=/mnt/nfs/kvm-isos/iso-build/alpine-autoinstall-internal_moeny.iso \ + staging_ip=10.44.0.250 -v ``` Similarly, a new Ubuntu iso will need to be generated that is compatible with the internal IPs. This can be done by simply updating the `user-data` file from Step 6 to have the proper network configuration, as in [`user-data-internal`](user-data-internal.yaml). Here is a sample command to run the Ubuntu bolt plan. @@ -194,10 +194,10 @@ Similarly, a new Ubuntu iso will need to be generated that is compatible with th ```bash bolt plan run bolt_vm_automation::create_ubuntu \ vm_name=moeny-service-ubuntu \ - ip_with_cidr=10.44.0.20/24 \ hostname=moeny-service-ubuntu \ network=internal-moeny \ - gateway=10.44.0.1 \ + ip_with_cidr=10.44.0.20/24 \ + gateway_ip=10.44.0.1 \ iso_path=/mnt/nfs/kvm-isos/iso-build/ubuntu-22.04-autoinstall-internal_moeny.iso \ - vm_target=vm-template-internal -v + staging_ip=10.44.0.250 -v ``` \ No newline at end of file diff --git a/bolt_vm_automation/inventory.yaml b/bolt_vm_automation/inventory.yaml index c5d7165..c097592 100644 --- a/bolt_vm_automation/inventory.yaml +++ b/bolt_vm_automation/inventory.yaml @@ -19,11 +19,11 @@ groups: private-key: ~/.ssh/DMMF-20211104 host-key-check: false targets: - - name: vm-template-public + - name: public config: ssh: host: 100.40.223.190 - - name: vm-template-internal + - name: internal config: ssh: host: 10.44.0.250 diff --git a/bolt_vm_automation/plans/create_alpine.yaml b/bolt_vm_automation/plans/create_alpine.yaml index 5f9b31b..1165296 100644 --- a/bolt_vm_automation/plans/create_alpine.yaml +++ b/bolt_vm_automation/plans/create_alpine.yaml @@ -1,9 +1,13 @@ --- parameters: - target: + target_host: type: String description: "Target host to create the VM on" default: "vortex" + target_vm: + type: String + description: "Target VM for post-installation tasks" + default: $vm_name iso_path: type: String description: "Path to the ISO file" @@ -88,7 +92,7 @@ parameters: steps: - name: create_vm task: bolt_vm_automation::create_alpine - targets: $target + targets: $target_host parameters: iso_path: $iso_path vm_name: $vm_name @@ -116,6 +120,13 @@ steps: parameters: staging_ip: $staging_ip + - name: install_zabbix + description: Install Zabbix on the VM + task: bolt_vm_automation::install_zabbix_alpine + targets: localhost + parameters: + staging_ip: $staging_ip + - name: install_docker description: Install Docker on the VM task: bolt_vm_automation::install_docker_alpine diff --git a/bolt_vm_automation/plans/create_ubuntu.yaml b/bolt_vm_automation/plans/create_ubuntu.yaml index 8884e35..a5d81ab 100644 --- a/bolt_vm_automation/plans/create_ubuntu.yaml +++ b/bolt_vm_automation/plans/create_ubuntu.yaml @@ -1,13 +1,13 @@ --- parameters: - target: + target_host: type: String description: "Target host to create the VM on" default: "vortex" - vm_target: + staging_ip: type: String - description: "Target VM for post-installation tasks" - default: "vm-template-public" + description: "IP address of the target VM for post-installation tasks" + default: "public" iso_path: type: String description: "Path to the ISO file" @@ -52,9 +52,9 @@ parameters: type: Boolean description: "Enable DHCP on the VM" default: false - gateway: + gateway_ip: type: String - description: "Gateway for the VM" + description: "Gateway IP for the VM" default: "100.40.223.1" nameserver1: type: String @@ -79,7 +79,7 @@ steps: - name: create_vm task: bolt_vm_automation::create_ubuntu - targets: $target + targets: $target_host parameters: iso_path: $iso_path vm_name: $vm_name @@ -90,19 +90,24 @@ steps: network: $network os_variant: $os_variant + - name: install_zabbix + description: Install Zabbix on the VM + task: bolt_vm_automation::install_zabbix_ubuntu + targets: $staging_ip + - name: install_docker description: Install Docker on the VM task: bolt_vm_automation::install_docker_ubuntu - targets: $vm_target + targets: $staging_ip - name: system_setup task: bolt_vm_automation::system_setup_ubuntu - targets: $vm_target + targets: $staging_ip parameters: ip_with_cidr: $ip_with_cidr hostname: $hostname dhcp: $dhcp - gateway: $gateway + gateway_ip: $gateway_ip nameserver1: $nameserver1 nameserver2: $nameserver2 nameserver3: $nameserver3 diff --git a/bolt_vm_automation/tasks/install_zabbix_alpine.sh b/bolt_vm_automation/tasks/install_zabbix_alpine.sh new file mode 100644 index 0000000..50ffb0f --- /dev/null +++ b/bolt_vm_automation/tasks/install_zabbix_alpine.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Input Variables +STAGING_IP="${PT_staging_ip}" + +# Install zabbix-agent2 +ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "apk add zabbix-agent2" + +# Configure zabbix-agent2 +ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "sed -i -e 's/^Server=127\.0\.0\.1/# Server=127.0.0.1/' -e 's/^ServerActive=127\.0\.0\.1/ServerActive=10.44.0.5,zabbix.moeny.ai/' /etc/zabbix/zabbix_agent2.conf" + +# Add zabbix-agent2 to default runlevel +ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "rc-update add zabbix-agent2 default" + +# Start zabbix-agent2 +ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "rc-service zabbix-agent2 start" + +# Verify installation +status_output=$(ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "rc-service zabbix-agent2 status") +if echo "$status_output" | grep -q "status: started"; then + echo '{"status": "success", "message": "Zabbix agent installed and running", "output": "'"$status_output"'"}' + exit 0 +else + echo '{"status": "failure", "message": "Zabbix agent installation failed", "output": "'"$status_output"'"}' + exit 1 +fi \ No newline at end of file diff --git a/bolt_vm_automation/tasks/install_zabbix_ubuntu.sh b/bolt_vm_automation/tasks/install_zabbix_ubuntu.sh new file mode 100644 index 0000000..245ec92 --- /dev/null +++ b/bolt_vm_automation/tasks/install_zabbix_ubuntu.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Download the Zabbix release package +sudo wget -O /tmp/zabbix-release.deb https://repo.zabbix.com/zabbix/7.2/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.2+ubuntu22.04_all.deb + +# install the zabbix release package +sudo dpkg -i /tmp/zabbix-release.deb + +# Update the package list +sudo apt update + +# Install the Zabbix agent +sudo apt install -y zabbix-agent2 + +# Configure the Zabbix agent +sudo sed -i -e 's/^Server=127\.0\.0\.1/# Server=127.0.0.1/' -e 's/^ServerActive=127\.0\.0\.1/ServerActive=10.44.0.5,zabbix.moeny.ai/' -e 's/^LogFileSize=0/LogFileSize=1/' -e 's/^Hostname=Zabbix server/# Hostname=Zabbix server/' -e 's/^# HostnameItem=system\.hostname/HostnameItem=system.hostname/' /etc/zabbix/zabbix_agent2.conf + +# Enable the Zabbix agent +sudo systemctl enable zabbix-agent2 + +# Start the Zabbix agent +sudo systemctl start zabbix-agent2 + +# Verify installation +if sudo systemctl is-active --quiet zabbix-agent2; then + echo "Zabbix agent installed and running successfully" + exit 0 +else + echo "Zabbix agent installation failed or service is not running" + exit 1 +fi \ No newline at end of file diff --git a/bolt_vm_automation/tasks/system_setup_alpine.sh b/bolt_vm_automation/tasks/system_setup_alpine.sh index 758c209..4843795 100644 --- a/bolt_vm_automation/tasks/system_setup_alpine.sh +++ b/bolt_vm_automation/tasks/system_setup_alpine.sh @@ -21,7 +21,6 @@ ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "apk add --no-cache iptables" # Configure iptables rules ssh -o StrictHostKeyChecking=no root@${STAGING_IP} "iptables -A INPUT -p tcp --dport 22 -s 100.40.223.128/26 -j ACCEPT && \ - iptables -A INPUT -p tcp --dport 22 -s 173.62.109.73/32 -j ACCEPT && \ iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT && \ iptables -A INPUT -p tcp --dport 22 -j DROP" diff --git a/bolt_vm_automation/tasks/system_setup_ubuntu.json b/bolt_vm_automation/tasks/system_setup_ubuntu.json index 3700ed7..1d2fc75 100644 --- a/bolt_vm_automation/tasks/system_setup_ubuntu.json +++ b/bolt_vm_automation/tasks/system_setup_ubuntu.json @@ -15,7 +15,7 @@ "description": "Whether to use DHCP for network configuration", "default": false }, - "gateway": { + "gateway_ip": { "type": "String", "description": "Gateway IP address", "default": "100.40.223.1" diff --git a/bolt_vm_automation/tasks/system_setup_ubuntu.sh b/bolt_vm_automation/tasks/system_setup_ubuntu.sh index 457e2f2..7afd31b 100644 --- a/bolt_vm_automation/tasks/system_setup_ubuntu.sh +++ b/bolt_vm_automation/tasks/system_setup_ubuntu.sh @@ -4,7 +4,7 @@ IP="${PT_ip_with_cidr}" HOSTNAME="${PT_hostname}" DHCP="${PT_dhcp}" -GATEWAY="${PT_gateway}" +GATEWAY="${PT_gateway_ip}" NAMESERVER1="${PT_nameserver1}" NAMESERVER2="${PT_nameserver2}" NAMESERVER3="${PT_nameserver3}"