{"id":31034768,"url":"https://github.com/pepryan/libvirt-terraform-generator","last_synced_at":"2026-04-17T01:01:55.278Z","repository":{"id":306022605,"uuid":"1023317108","full_name":"Pepryan/libvirt-terraform-generator","owner":"Pepryan","description":"A powerful and user-friendly tool for automating the creation of Virtual Machines (VMs) using KVM/QEMU with Terraform and cloud-init. This tool supports the deployment of single VMs or multiple VMs at once with easy-to-understand YAML configurations.","archived":false,"fork":false,"pushed_at":"2025-07-28T04:22:18.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-14T02:50:09.448Z","etag":null,"topics":["kvm","libvirt","libvirt-provider","terraform"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Pepryan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-21T01:26:21.000Z","updated_at":"2025-07-28T04:22:22.000Z","dependencies_parsed_at":"2025-07-23T08:39:14.298Z","dependency_job_id":"aa50fd3c-77ef-45a6-92b4-fda5c3cbf33a","html_url":"https://github.com/Pepryan/libvirt-terraform-generator","commit_stats":null,"previous_names":["pepryan/libvirt-terraform-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Pepryan/libvirt-terraform-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pepryan%2Flibvirt-terraform-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pepryan%2Flibvirt-terraform-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pepryan%2Flibvirt-terraform-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pepryan%2Flibvirt-terraform-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pepryan","download_url":"https://codeload.github.com/Pepryan/libvirt-terraform-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pepryan%2Flibvirt-terraform-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31910585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"ssl_error","status_checked_at":"2026-04-16T18:21:47.142Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kvm","libvirt","libvirt-provider","terraform"],"created_at":"2025-09-14T02:47:09.097Z","updated_at":"2026-04-17T01:01:55.189Z","avatar_url":"https://github.com/Pepryan.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VM Generator untuk KVM dengan Terraform\n\nSebuah tool powerful dan user-friendly untuk mengotomatisasi pembuatan Virtual Machine (VM) menggunakan KVM/QEMU dengan Terraform dan cloud-init. Tool ini mendukung deployment single VM maupun multiple VM sekaligus dengan konfigurasi YAML yang mudah dipahami.\n\n## 🚀 Fitur Utama\n\n- ✅ **Multiple VM Deployment**: Deploy beberapa VM sekaligus dengan satu konfigurasi\n- ✅ **YAML Configuration**: Konfigurasi yang mudah dibaca dan dipahami\n- ✅ **Cloud-init Integration**: Otomatis setup user, SSH keys, packages, dan custom commands\n- ✅ **Smart Networking**: Static IP tanpa DHCP waiting, DHCP dengan proper lease handling\n- ✅ **Base Volume Architecture**: Efisiensi storage dengan Copy-on-Write, base image aman\n- ✅ **Storage Pool Support**: Terintegrasi dengan virsh storage pools\n- ✅ **Interactive Mode**: Mode interaktif untuk VM tunggal\n- ✅ **Auto SSH Key Detection**: Otomatis deteksi SSH public key\n- ✅ **Makefile Integration**: Command shortcuts untuk workflow Terraform\n- ✅ **Deployment Isolation**: Setiap deployment dibuat dalam folder terpisah\n- ✅ **Error Handling**: Validasi konfigurasi dan error handling yang robust\n- ✅ **Overwrite Protection**: Perlindungan terhadap deployment folder yang sudah ada\n- ✅ **Example Template Generation**: Generate template konfigurasi YAML dengan mudah\n\n## 📋 Prerequisites\n\n### Sistem Requirements\n- Ubuntu/Debian Linux\n- KVM/QEMU terinstall dan berjalan\n- libvirt terinstall dan dikonfigurasi\n- Terraform \u003e= 0.13\n- Akses sudo untuk mengelola VM\n\n### Dependencies\n```bash\n# Install KVM/QEMU dan libvirt\nsudo apt update\nsudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils\n\n# Install Terraform\ncurl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -\nsudo apt-add-repository \"deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main\"\nsudo apt update \u0026\u0026 sudo apt install terraform\n\n# Install yq (optional, untuk parsing YAML yang lebih akurat)\nsudo apt install yq\n\n# Tambahkan user ke grup libvirt\nsudo usermod -a -G libvirt $USER\n```\n\n### Setup Storage Pools\n```bash\n# Buat storage pools jika belum ada\nvirsh pool-define-as --name images --type dir --target /var/lib/libvirt/images\nvirsh pool-define-as --name vms --type dir --target /var/lib/libvirt/vms\nvirsh pool-start images\nvirsh pool-start vms\nvirsh pool-autostart images\nvirsh pool-autostart vms\n```\n\n### Download Cloud Images\n```bash\n# Download Ubuntu cloud image\ncd /var/lib/libvirt/images\nsudo wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\nsudo wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\n```\n\n## 🛠️ Instalasi\n\n```bash\n# Clone atau download project\ngit clone \u003crepository-url\u003e\ncd vm-generator\n\n# Atau download manual\nchmod +x vm-generator.sh\n```\n\n## 📖 Penggunaan\n\n### 1. Mode YAML (Multiple VMs)\n\n#### Buat Konfigurasi YAML\n```bash\n# Generate example config\n./vm-generator.sh --example\n\n# Edit sesuai kebutuhan\nnano vms-config.yaml\n```\n\n#### Generate dan Deploy\n```bash\n# Generate Terraform files (akan dibuat di deployment-vms-config/)\n./vm-generator.sh vms-config.yaml\n\n# Masuk ke deployment directory dan deploy VMs\ncd deployment-vms-config\nmake init\nmake plan\nmake apply\n```\n\n### 2. Mode Interactive (Single VM)\n```bash\n# Jalankan mode interactive\n./vm-generator.sh\n\n# Ikuti prompt untuk konfigurasi\n# Deploy VM (masuk ke deployment folder yang dibuat)\ncd deployment-\u003cvm-name\u003e\nmake init \u0026\u0026 make apply\n```\n\n## 📝 Konfigurasi YAML\n\n### Struktur Konfigurasi\n```yaml\n# Global settings\nglobal:\n  image_pool: \"images\"           # Pool untuk cloud images\n  vm_pool: \"vms\"                # Pool untuk VM disks\n  cloud_image: \"jammy-server-cloudimg-amd64.img\"\n  network_name: \"default\"       # Network name\n  domain: \"local\"\n  \n  # User configuration\n  ssh_user: \"ubuntu\"\n  ssh_password: \"ubuntu\"\n  ssh_password_auth: false\n  timezone: \"Asia/Jakarta\"\n  ssh_public_key: \"\"            # Auto-detect jika kosong\n  \n  # Global packages\n  packages:\n    - qemu-guest-agent\n    - curl\n    - vim\n\n# VM definitions\nvms:\n  - name: \"web-server\"\n    cpu: 2\n    ram_gb: 4\n    disk_gb: 20\n    network_type: \"static\"       # static atau dhcp\n    ip: \"192.168.122.10\"\n    gateway: \"192.168.122.1\"\n    netmask: \"24\"\n    dns: [\"8.8.8.8\", \"8.8.4.4\"]\n    packages:                    # Additional packages\n      - nginx\n      - mysql-server\n    commands:                    # Custom commands\n      - \"systemctl enable nginx\"\n      - \"ufw allow 80,443/tcp\"\n```\n\n### Contoh Konfigurasi Complete\n```yaml\nglobal:\n  image_pool: \"images\"\n  vm_pool: \"vms\" \n  cloud_image: \"jammy-server-cloudimg-amd64.img\"\n  network_name: \"default\"\n  domain: \"local\"\n  ssh_user: \"ubuntu\"\n  ssh_password: \"ubuntu\"\n  ssh_password_auth: false\n  timezone: \"Asia/Jakarta\"\n  packages:\n    - qemu-guest-agent\n    - curl\n    - wget\n    - vim\n    - htop\n\nvms:\n  # Web Server dengan static IP\n  - name: \"web-01\"\n    cpu: 2\n    ram_gb: 4\n    disk_gb: 20\n    network_type: \"static\"\n    ip: \"192.168.122.10\"\n    gateway: \"192.168.122.1\"\n    netmask: \"24\"\n    dns: [\"8.8.8.8\", \"8.8.4.4\"]\n    packages:\n      - nginx\n    commands:\n      - \"systemctl enable nginx\"\n      \n  # Database Server\n  - name: \"db-01\"\n    cpu: 4\n    ram_gb: 8\n    disk_gb: 50\n    network_type: \"static\"\n    ip: \"192.168.122.20\"\n    gateway: \"192.168.122.1\"\n    netmask: \"24\"\n    dns: [\"8.8.8.8\"]\n    packages:\n      - postgresql\n      - postgresql-contrib\n    commands:\n      - \"systemctl enable postgresql\"\n      \n  # App Server dengan DHCP\n  - name: \"app-01\"\n    cpu: 2\n    ram_gb: 6\n    disk_gb: 30\n    network_type: \"dhcp\"\n    packages:\n      - docker.io\n      - docker-compose\n    commands:\n      - \"systemctl enable docker\"\n      - \"usermod -aG docker ubuntu\"\n```\n\n## 🎯 Makefile Commands\n\nSetelah generate files dengan `./vm-generator.sh`, masuk ke deployment directory dan gunakan commands berikut:\n\n```bash\n# Masuk ke deployment directory\ncd deployment-\u003cnama-config\u003e\n# atau untuk interactive mode:\ncd deployment-\u003cvm-name\u003e\n\n# Terraform workflow\nmake init          # Initialize Terraform\nmake plan          # Show deployment plan\nmake apply         # Deploy VMs\nmake destroy       # Destroy all VMs\n\n# Utility commands\nmake validate      # Validate Terraform files\nmake fmt           # Format Terraform files\nmake output        # Show all outputs\nmake ips           # Show VM IP addresses only\nmake clean         # Clean temporary files\n\n# SSH commands (auto-generated)\nmake ssh-web-01    # SSH to web-01 VM\nmake ssh-db-01     # SSH to db-01 VM\nmake ssh-app-01    # SSH to app-01 VM\n\n# Complete workflow\nmake all           # init + plan + apply\n\n# Help\nmake help          # Show available commands\n```\n\n## 🔧 Advanced Configuration\n\n### Custom Networks\n```bash\n# Buat custom network\nvirsh net-define-as mynet 192.168.100.0/24\nvirsh net-start mynet\nvirsh net-autostart mynet\n\n# Update YAML config\nnetwork_name: \"mynet\"\n```\n\n### Multiple Storage Pools\n```bash\n# Setup custom storage pools\nvirsh pool-define-as ssd-pool dir /mnt/ssd/vms\nvirsh pool-start ssd-pool\n\n# Update YAML\nvm_pool: \"ssd-pool\"\n```\n\n### SSH Key Management\n```bash\n# Generate SSH key jika belum ada\nssh-keygen -t rsa -b 4096 -C \"your_email@example.com\"\n\n# Script akan auto-detect key dari ~/.ssh/id_rsa.pub\n# Atau specify manual di YAML:\nssh_public_key: \"ssh-rsa AAAAB3NzaC1yc2E...\"\n```\n\n## 🔄 Base Volume Architecture\n\n### Konsep Base Volume\nScript ini menggunakan **base volume architecture** yang memberikan keuntungan signifikan:\n\n- ✅ **Efisiensi Storage**: VM disk dibuat sebagai copy-on-write dari base image\n- ✅ **Keamanan Data**: Base image tidak pernah dimodifikasi atau terhapus\n- ✅ **Fast Deployment**: Tidak perlu copy full image, hanya membuat reference\n- ✅ **Safe Destroy**: `terraform destroy` hanya menghapus VM disk, bukan base image\n\n### Terraform Volume Configuration\n```hcl\n# Generated volume configuration\nresource \"libvirt_volume\" \"vm_disk\" {\n  name               = \"vm-name-disk.qcow2\"\n  pool               = \"vms\"                    # Target pool untuk VM disk\n  base_volume_name   = \"noble-server-cloudimg-amd64.img\"\n  base_volume_pool   = \"isos\"                  # Source pool untuk base image\n  size               = 20000000000             # 20GB\n  format             = \"qcow2\"\n}\n```\n\n### Network Configuration\nScript secara otomatis mengatur network interface berdasarkan tipe yang dipilih:\n\n#### Static IP Configuration\n```hcl\nnetwork_interface {\n  network_name   = \"net-192.168.100\"\n  wait_for_lease = false                # Tidak menunggu DHCP lease\n  addresses      = [\"192.168.100.88\"]  # Set IP address langsung\n}\n```\n**Keuntungan**:\n- Deployment lebih cepat (tidak ada DHCP waiting time)\n- IP address predictable dan konsisten\n- Cocok untuk production dan services\n\n#### DHCP Configuration  \n```hcl\nnetwork_interface {\n  network_name   = \"default\"\n  wait_for_lease = true    # Menunggu DHCP server assign IP\n}\n```\n**Keuntungan**:\n- Setup mudah, tidak perlu planning IP\n- Automatic network configuration\n- Cocok untuk development dan testing\n\n### Keuntungan Architecture Ini\n1. **Base Image Preservation**: File asli cloud images tetap aman\n2. **Fast Provisioning**: VM baru menggunakan CoW (Copy-on-Write)\n3. **Storage Efficiency**: Multiple VM share base image\n4. **Safe Cleanup**: Destroy VM tidak affect base image\n\n## 📁 Deployment Folder Management\n\n### Konsep Deployment Isolation\nScript ini menggunakan konsep **deployment isolation** dimana setiap deployment dibuat dalam folder terpisah. Ini memberikan beberapa keuntungan:\n\n- ✅ **Isolasi Deployment**: Setiap konfigurasi VM terpisah satu sama lain\n- ✅ **Parallel Development**: Bisa mengembangkan multiple environment bersamaan\n- ✅ **Version Control**: Mudah untuk track dan backup deployment\n- ✅ **Clean Management**: Mudah untuk menghapus seluruh deployment\n\n### Naming Convention\n```bash\n# YAML mode: deployment-{config-filename}\n./vm-generator.sh web-servers.yaml\n# Creates: deployment-web-servers/\n\n# Interactive mode: deployment-{vm-name}\n# VM Name: \"my-app\"\n# Creates: deployment-my-app/\n```\n\n### Overwrite Protection\nScript memberikan perlindungan jika deployment folder sudah ada:\n\n```bash\n[WARNING] Deployment directory 'deployment-web-servers' already exists!\nDo you want to overwrite? (y/N): \n```\n\n- **N (default)**: Membatalkan deployment untuk mencegah overwrite\n- **Y**: Menghapus folder lama dan membuat yang baru\n\n### Multiple Deployment Management\n```bash\n# Buat multiple deployment\n./vm-generator.sh web-servers.yaml    # -\u003e deployment-web-servers/\n./vm-generator.sh db-cluster.yaml     # -\u003e deployment-db-cluster/\n./vm-generator.sh monitoring.yaml     # -\u003e deployment-monitoring/\n\n# Manage setiap deployment independen\ncd deployment-web-servers \u0026\u0026 make apply\ncd deployment-db-cluster \u0026\u0026 make apply\ncd deployment-monitoring \u0026\u0026 make apply\n\n# Cleanup specific deployment\ncd deployment-web-servers \u0026\u0026 make destroy\nrm -rf deployment-web-servers/\n```\n\n### Best Practices\n1. **Naming**: Gunakan nama deskriptif untuk config file (e.g., `production-web.yaml`)\n2. **Documentation**: Simpan notes di deployment folder untuk referensi\n3. **Backup**: Backup deployment folder sebelum major changes\n4. **Cleanup**: Hapus deployment folder yang tidak digunakan\n\n```bash\n# Backup deployment\ntar -czf deployment-web-servers-backup.tar.gz deployment-web-servers/\n\n# List semua deployment\nls -d deployment-*/\n\n# Cleanup unused deployment\ncd deployment-old-test \u0026\u0026 make destroy\ncd .. \u0026\u0026 rm -rf deployment-old-test/\n```\n\n## 🚨 Troubleshooting\n\n### Common Issues\n\n#### 1. Permission Denied\n```bash\n# Pastikan user ada di grup libvirt\nsudo usermod -a -G libvirt $USER\n# Logout dan login kembali\n```\n\n#### 2. Cloud Image Not Found\n```bash\n# Check available images in pool\nvirsh vol-list images\n\n# Download missing images\ncd /var/lib/libvirt/images\nsudo wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\n```\n\n#### 3. Network Issues\n```bash\n# Check available networks\nvirsh net-list --all\n\n# Start default network if stopped\nvirsh net-start default\nvirsh net-autostart default\n```\n\n#### 4. Terraform Provider Issues\n```bash\n# Clean dan reinitialize\nmake clean\nmake init\n```\n\n#### 5. VM tidak dapat SSH\n- Pastikan cloud-init selesai (tunggu 2-3 menit)\n- Check console: `virsh console vm-name`\n- Verify SSH service: `systemctl status ssh`\n\n### Debug Mode\n```bash\n# Enable verbose output\nexport TF_LOG=DEBUG\nmake apply\n\n# Check cloud-init logs di VM\nsudo tail -f /var/log/cloud-init-output.log\n```\n\n## 📁 Struktur File\n\n```\nvm-generator/\n├── vm-generator.sh              # Main script\n├── vms-config.yaml             # VM configuration template\n├── README.md                   # Documentation\n├── LICENSE                     # License file\n└── deployment-\u003cconfig-name\u003e/   # Generated deployment folder\n    ├── vms-config.yaml         # Copy of config file\n    ├── main.tf                 # Generated Terraform file\n    ├── Makefile                # Build commands\n    ├── cloudinit_*.cfg        # Cloud-init configs per VM\n    └── network_*.cfg          # Network configs per VM\n```\n\n## 🔄 Workflow Example\n\n```bash\n# 1. Setup\n./vm-generator.sh --example\nnano vms-config.yaml  # Edit configuration\n\n# 2. Generate (creates deployment-vms-config/)\n./vm-generator.sh vms-config.yaml\n\n# 3. Deploy\ncd deployment-vms-config\nterraform init\nterraform plan     # Review plan\nterraform apply    # Deploy\n\n# 4. Verify\nmake ips      # Get VM IPs\nmake ssh-n8n-server  # SSH to VM\n\n# 5. Manage\nvirsh list    # List running VMs\nmake destroy  # Clean up when done\n```\n\n## 🛡️ Security Notes\n\n- Script menggunakan SSH key authentication secara default\n- Password authentication dapat diaktifkan tapi tidak direkomendasikan untuk production\n- VM menggunakan user dengan sudo access\n- Firewall dikonfigurasi sesuai commands di YAML\n- Cloud-init dijalankan dengan privilege root\n\n## 📊 Resource Management\n\n### Estimasi Resource Usage\n```\nPer VM Base:\n- RAM: Minimum 1GB, Recommended 2GB+\n- Disk: Minimum 10GB, Recommended 20GB+\n- CPU: Minimum 1 vCPU, Recommended 2+\n\nHost Requirements:\n- RAM: (Total VM RAM) + 2GB untuk host\n- Disk: (Total VM Disk) + space untuk images\n- CPU: Total vCPU tidak boleh \u003e Physical CPU cores\n```\n\n## 🔄 Updates dan Maintenance\n\n### Update Cloud Images\n```bash\n# Download latest Ubuntu images\ncd /var/lib/libvirt/images\nsudo wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\nsudo wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\n\n# Update YAML config dengan image name yang baru\n```\n\n### Backup VMs\n```bash\n# Backup VM disk\nvirsh dumpxml vm-name \u003e vm-name.xml\ncp /var/lib/libvirt/vms/vm-name-disk.qcow2 /backup/\n\n# Restore\nvirsh define vm-name.xml\n```\n\n## 🤝 Contributing\n\n1. Fork repository\n2. Buat feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit changes (`git commit -m 'Add amazing feature'`)\n4. Push ke branch (`git push origin feature/amazing-feature`)\n5. Buat Pull Request\n\n## 📞 Support\n\nJika mengalami issues atau membutuhkan bantuan:\n1. Check troubleshooting section di atas\n2. Buat issue di GitHub repository\n3. Sertakan output error dan konfigurasi YAML\n\n## 📝 Changelog\n\n### v1.2.0 (Latest)\n- ✅ **NEW**: Base volume architecture untuk efisiensi dan keamanan storage\n- ✅ **NEW**: Smart static IP handling (tidak menunggu DHCP lease)\n- ✅ **IMPROVED**: Volume configuration menggunakan `base_volume_name` dan `base_volume_pool`\n- ✅ **IMPROVED**: Network interface conditional generation berdasarkan tipe network\n- ✅ **FIXED**: Safe destroy - base images tidak terhapus saat `terraform destroy`\n- ✅ **FIXED**: Duplicate disk blocks di interactive mode\n- ✅ **ENHANCED**: Deployment lebih cepat untuk static IP VMs\n\n### v1.1.0\n- ✅ **NEW**: Deployment folder isolation\n- ✅ **NEW**: Overwrite protection untuk deployment\n- ✅ **NEW**: Auto-copy config ke deployment folder\n- ✅ **IMPROVED**: Better path management\n- ✅ **IMPROVED**: Enhanced error handling\n\n### v1.0.0\n- ✅ Initial release\n- ✅ Multiple VM support\n- ✅ YAML configuration\n- ✅ Cloud-init integration\n- ✅ Interactive mode\n- ✅ Makefile automation\n- ✅ Storage pool support\n- ✅ Auto SSH key detection\n- ✅ Error handling dan validation\n\n## 📄 License\n\nProject ini dilisensikan under MIT License - lihat file [LICENSE](LICENSE) untuk detail lengkap.\n\n## 👨‍💻 Author\n\n**Febryan Ramadhan**\n- Email: [febryanramadhan@gmail.com]\n- GitHub: [github.com/pepryan]\n\n---\n\n⭐ **Jika project ini berguna, jangan lupa berikan star di GitHub!** ⭐\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpepryan%2Flibvirt-terraform-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpepryan%2Flibvirt-terraform-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpepryan%2Flibvirt-terraform-generator/lists"}