name: Handle VM Deployment Issue on: issues: types: [opened, reopened] jobs: process-issue: if: contains(github.event.issue.labels.*.name, 'opentofu') runs-on: docker steps: - name: Checkout repository uses: actions/checkout@v4 - name: Extract Issue Details id: extract run: | echo "Extracting issue details..." ISSUE_BODY="${{ github.event.issue.body }}" echo "ISSUE_BODY=$ISSUE_BODY" # Check if 'VM Name' is in the body echo "$ISSUE_BODY" | grep 'VM Name' # This should print the line with 'VM Name' # Extract the value for VM_NAME VM_NAME=$(echo "$ISSUE_BODY" | grep -A 1 'VM Name' | tail -n 1 | xargs) echo "Extracted VM_NAME: '$VM_NAME'" # Debugging extracted value if [ -z "$VM_NAME" ]; then echo "Error: VM_NAME is empty. Check the formatting of the input." else echo "VM_NAME=$VM_NAME" # Display the value if extracted correctly fi VM_ID=$(echo "$ISSUE_BODY" | grep 'VM ID:' | cut -d':' -f2 | xargs) RAM=$(echo "$ISSUE_BODY" | grep 'RAM:' | cut -d':' -f2 | xargs) CPUS=$(echo "$ISSUE_BODY" | grep 'CPU Cores:' | cut -d':' -f2 | xargs) SCPU_TYPE=$(echo "$ISSUE_BODY" | grep 'CPU Type:' | cut -d':' -f2 | xargs) NODE_NAME=$(echo "$ISSUE_BODY" | grep 'Node Name:' | cut -d':' -f2 | xargs) VLAN_ID=$(echo "$ISSUE_BODY" | grep 'VLAN ID:' | cut -d':' -f2 | xargs) DATASTORE=$(echo "$ISSUE_BODY" | grep 'Datastore ID:' | cut -d':' -f2 | xargs) DISK_SIZE=$(echo "$ISSUE_BODY" | grep 'Disk Size:' | cut -d':' -f2 | xargs) CLONE_VM_ID=$(echo "$ISSUE_BODY" | grep 'Clone VM ID:' | cut -d':' -f2 | xargs) echo "NODE_NAME=$NODE_NAME" # Determine user_data_file_id if [ "$NODE_NAME" == "prox" ]; then USER_DATA_FILE_ID="proxmox_virtual_environment_file.cloud_config.id" else USER_DATA_FILE_ID="proxmox_virtual_environment_file.cloud_config2.id" fi echo "VM_NAME=$VM_NAME" >> $GITHUB_ENV echo "VM_ID=$VM_ID" >> $GITHUB_ENV echo "RAM=$RAM" >> $GITHUB_ENV echo "CPUS=$CPUS" >> $GITHUB_ENV echo "SCPU_TYPE=$SCPU_TYPE" >> $GITHUB_ENV echo "NODE_NAME=$NODE_NAME" >> $GITHUB_ENV echo "VLAN_ID=$VLAN_ID" >> $GITHUB_ENV echo "IP_METHOD=$IP_METHOD" >> $GITHUB_ENV echo "DATASTORE=$DATASTORE" >> $GITHUB_ENV echo "DISK_SIZE=$DISK_SIZE" >> $GITHUB_ENV echo "CLONE_VM_ID=$CLONE_VM_ID" >> $GITHUB_ENV echo "USER_DATA_FILE_ID=$USER_DATA_FILE_ID" >> $GITHUB_ENV - name: Generate Terraform File run: | cat < terraform/proxmox/$VM_ID.tf resource "proxmox_virtual_environment_vm" "$VM_NAME" { node_name = "${{ env.NODE_NAME }}" vm_id = "${{ env.VM_ID }}" name = "${{ env.VM_NAME }}" description = "${{ env.VM_NAME }}" cpu { cores = "${{ env.CPUS }}" type = "${{ env.SCPU_TYPE }}" } memory { dedicated = "${{ env.RAM }}" } network_device { bridge = "vmbr0" vlan_id = "${{ env.VLAN_ID }}" } disk { datastore_id = "${{ env.DATASTORE }}" size = "${{ env.DISK_SIZE }}" } clone { vm_id = "${{ env.CLONE_VM_ID }}" } initialization { ip_config { ipv4 { address = "dhcp" } } user_data_file_id = ${{ env.USER_DATA_FILE_ID }} } } EOF - name: Commit and Push Terraform File run: | git config user.name "GitHub Actions" git config user.email "actions@github.com" git add terraform/proxmox/$VM_ID.tf git commit -m "Add VM $VM_NAME configuration" git push - name: Trigger Terraform Apply Workflow uses: https://github.com/actions/github-script@v6 with: script: | github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: "tofu.yml", ref: "main" })