> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/vi/module-8-nha-phat-trien-and-devops/lab.md).

# Thực hành: Tự động hóa hạ tầng

## Mục tiêu

Tự động hóa các thao tác vận hành hạ tầng VergeOS bằng REST API, Terraform provider và các công cụ scripting (pyvergeos hoặc PowerShell). Đến cuối bài lab này, bạn sẽ đã cấp phát VM và tenant theo chương trình và hiểu cách tích hợp VergeOS vào các quy trình CI/CD và tự động hóa.

## Yêu cầu tiên quyết

* Đã hoàn thành Module 1: Kiến thức nền tảng về kiến trúc
* Đã hoàn thành Mô-đun 6: Máy ảo
* Đã hoàn thành Mô-đun 7: Multi-Tenancy
* Đã hoàn thành phần đọc của Mô-đun 8 (REST API, Terraform, Python/PowerShell, Cloud-Init)
* Một cụm VergeOS đang chạy với quyền truy cập API được bật
* Terraform được cài đặt cục bộ (v1.5+)
* Python 3.9+ hoặc PowerShell 7+ được cài đặt cục bộ
* Quyền truy cập vào [vergeos-terraform-playground](https://github.com/verge-io/vergeos-terraform-playground) kho lưu trữ

## Độ khó

**Trung cấp** -- Yêu cầu quen thuộc với REST API, các khái niệm hạ tầng dưới dạng mã và scripting cơ bản

## Thời gian ước tính

**2 giờ**

## Các bước

### Phần 1: Khám phá REST API

Xác thực với VergeOS API và thực hiện các thao tác cơ bản.

1. Lấy một API key từ VergeOS UI (System > Users > \[người dùng của bạn] > API Keys)
2. Sử dụng `curl` hoặc một REST client để xác thực:

   ```bash
   curl -X GET https://<your-vergeos-host>/api/v4/vms \
     -H "Authorization: Bearer <your-api-key>"
   ```
3. Liệt kê tất cả VM bằng `/api/v4/vms` endpoint
4. Tạo một VM mới qua API:
   * POST tới `/api/v4/vms` với nội dung JSON chỉ định tên, CPU, bộ nhớ và đĩa
5. Khởi động và tắt VM bằng API
6. Xóa VM qua API
7. Khám phá các endpoint bổ sung: mạng (`/api/v4/vnets` — bảng có tên là `vnets` trong khi tên UI/đối tượng là "Networks"), tenant (`/api/v4/tenants`)

### Phần 2: Terraform Provider

Sử dụng VergeOS Terraform provider để quản lý hạ tầng theo cách khai báo.

1. Clone kho lưu trữ vergeos-terraform-playground:

   ```bash
   git clone https://github.com/verge-io/vergeos-terraform-playground.git
   cd vergeos-terraform-playground
   ```
2. Xem lại cấu hình provider trong `main.tf`
3. Sao chép và tùy chỉnh một file ví dụ `.tfvars` cho môi trường của bạn
4. Chạy `terraform init` để tải VergeOS provider
5. Chạy `terraform plan` để xem trước các thay đổi hạ tầng
6. Chạy `terraform apply` để cấp phát tài nguyên
7. Xác minh các tài nguyên đã tạo trong VergeOS UI
8. Sửa đổi một tài nguyên trong cấu hình Terraform và áp dụng lại
9. Chạy `terraform destroy` để dọn dẹp

### Phần 3: Tự động hóa bằng scripting

Tự động hóa một quy trình làm việc bằng pyvergeos (Python) hoặc mô-đun PowerShell.

1. Cài đặt pyvergeos:

   ```bash
   pip install pyvergeos
   ```
2. Viết một script mà:
   * Kết nối tới cụm VergeOS của bạn
   * Liệt kê tất cả VM và trạng thái hiện tại của chúng
   * Tạo một VM mới từ recipe/template
   * Chờ cho đến khi VM đang chạy
   * Xuất địa chỉ IP của VM và thông tin kết nối
3. Mở rộng script để:
   * Tạo một tenant với phân bổ tài nguyên được xác định trước
   * Triển khai một VM bên trong tenant
   * Xác minh cô lập tenant bằng cách kiểm tra kết nối mạng

### Phần 4: Cloud-Init

Cấu hình cấp phát VM không cần can thiệp bằng cloud-init.

1. Tạo một file cấu hình cloud-init với:
   * Hostname và cài đặt mạng
   * Tài khoản người dùng và SSH keys
   * Các lệnh cài đặt gói
   * Các script sau khi khởi động
2. Đính kèm cấu hình cloud-init vào một VM mới qua API hoặc UI
3. Khởi động VM và xác minh rằng cấu hình cloud-init đã được áp dụng:
   * Kiểm tra hostname và cài đặt mạng
   * Xác minh các tài khoản người dùng tồn tại
   * Xác nhận các gói đã được cài đặt

## Xác minh

Bài lab tự động hóa hạ tầng của bạn hoàn tất khi bạn có thể trả lời **có** cho tất cả các mục sau:

* [ ] Đã xác thực thành công với VergeOS REST API và thực hiện các thao tác CRUD trên VM
* [ ] Đã cấp phát hạ tầng bằng Terraform provider từ kho lưu trữ playground
* [ ] Đã sửa đổi và áp dụng lại cấu hình Terraform, quan sát các thay đổi tăng dần
* [ ] Đã tạo một script (Python hoặc PowerShell) tự động hóa việc cấp phát VM và/hoặc tenant
* [ ] Đã cấu hình VM với cloud-init để thiết lập không cần can thiệp và xác minh rằng cấu hình đã được áp dụng
* [ ] Đã dọn dẹp tất cả tài nguyên của bài lab (VM, tenant, trạng thái Terraform)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/vi/module-8-nha-phat-trien-and-devops/lab.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
