test:1
This commit is contained in:
35
cloud-init.tpl
Normal file
35
cloud-init.tpl
Normal file
@@ -0,0 +1,35 @@
|
||||
#cloud-config
|
||||
hostname: ${hostname}
|
||||
manage_etc_hosts: true
|
||||
users:
|
||||
- name: ubuntu
|
||||
passwd: $6$X9ichNs1seliRKSE$z2ci5fBlG8karm40.JAO607XmZn5fm0wncHBiIMzXYNuvphVBfJNowNUA55fITPN8.JbtCMRR3o8NjmPWni/S/
|
||||
lock_passwd: false
|
||||
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
||||
groups: [adm, audio, cdrom, dialout, floppy, video, plugdev, dip, netdev]
|
||||
shell: /bin/bash
|
||||
ssh-authorized-keys:
|
||||
- "${ssh_key}"
|
||||
|
||||
write_files:
|
||||
- path: /etc/netplan/50-cloud-init.yaml
|
||||
content: |
|
||||
network:
|
||||
version: 2
|
||||
ethernets:
|
||||
ens192:
|
||||
dhcp4: no
|
||||
addresses:
|
||||
- ${ip_addr}/24
|
||||
routes:
|
||||
- to: default
|
||||
via: ${gateway}
|
||||
nameservers:
|
||||
addresses:
|
||||
- ${dns1}
|
||||
- ${dns2}
|
||||
owner: root:root
|
||||
permissions: '0600'
|
||||
|
||||
runcmd:
|
||||
- netplan apply
|
||||
53
main.tf
Normal file
53
main.tf
Normal file
@@ -0,0 +1,53 @@
|
||||
terraform {
|
||||
required_version = ">= 1.12.2"
|
||||
|
||||
required_providers {
|
||||
vsphere = {
|
||||
source = "hashicorp/vsphere"
|
||||
version = "2.12.0"
|
||||
}
|
||||
}
|
||||
|
||||
backend "s3" {
|
||||
bucket = "terraform-tfstate-file"
|
||||
key = "61/test2/terraform.tfstate"
|
||||
region = "cn-east-1"
|
||||
skip_credentials_validation = true
|
||||
skip_metadata_api_check = true
|
||||
skip_region_validation = true
|
||||
skip_requesting_account_id = true
|
||||
use_path_style = true
|
||||
}
|
||||
}
|
||||
|
||||
provider "vsphere" {
|
||||
user = var.vsphere_user
|
||||
password = var.vsphere_password
|
||||
vsphere_server = var.vsphere_server
|
||||
allow_unverified_ssl = true
|
||||
api_timeout = 10
|
||||
}
|
||||
|
||||
data "vsphere_datacenter" "datacenter" {
|
||||
name = "Datacenter"
|
||||
}
|
||||
|
||||
data "vsphere_datastore" "datastore" {
|
||||
name = "datastore2-NVMe"
|
||||
datacenter_id = data.vsphere_datacenter.datacenter.id
|
||||
}
|
||||
data "vsphere_compute_cluster" "cluster" {
|
||||
name = "test-vm"
|
||||
datacenter_id = data.vsphere_datacenter.datacenter.id
|
||||
}
|
||||
|
||||
data "vsphere_network" "network" {
|
||||
name = "VM Network"
|
||||
datacenter_id = data.vsphere_datacenter.datacenter.id
|
||||
}
|
||||
|
||||
data "vsphere_virtual_machine" "template" {
|
||||
name = "ubuntu-noble-24.04-cloudimg"
|
||||
datacenter_id = data.vsphere_datacenter.datacenter.id
|
||||
}
|
||||
|
||||
82
scripts/setup.sh
Normal file
82
scripts/setup.sh
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
# 备份原来的 sources.list
|
||||
cp /etc/apt/sources.list /etc/apt/sources.list.bak
|
||||
|
||||
# 使用国内源(这里以阿里云为例,你也可以选择其他源)
|
||||
cat > /etc/apt/sources.list <<EOF
|
||||
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
|
||||
deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
|
||||
deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
|
||||
deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
|
||||
EOF
|
||||
|
||||
# 更新系统并安装基础工具
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
curl \
|
||||
git \
|
||||
vim \
|
||||
htop \
|
||||
tree \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
lsb-release\
|
||||
net-tools\
|
||||
lrzsz \
|
||||
chrony
|
||||
|
||||
|
||||
install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
|
||||
chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
|
||||
apt-get update
|
||||
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
|
||||
|
||||
mkdir -p /etc/docker
|
||||
cat > /etc/docker/daemon.json <<EOF
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://hub-mirror.c.163.com",
|
||||
"https://mirror.baidubce.com",
|
||||
"https://registry.docker-cn.com",
|
||||
"https://docker.mirrors.ustc.edu.cn"
|
||||
],
|
||||
"exec-opts": ["native.cgroupdriver=systemd"]
|
||||
}
|
||||
EOF
|
||||
|
||||
systemctl enable --now docker
|
||||
systemctl restart docker
|
||||
usermod -aG docker ubuntu
|
||||
docker --version
|
||||
|
||||
|
||||
# 设置为中国时区
|
||||
timedatectl set-timezone Asia/Shanghai
|
||||
|
||||
# 使用阿里云 NTP 源
|
||||
sed -i '/^pool /d' /etc/chrony/chrony.conf
|
||||
cat >> /etc/chrony/chrony.conf <<EOF
|
||||
|
||||
server 192.168.100.105 iburst
|
||||
EOF
|
||||
|
||||
# 启动并同步时间
|
||||
systemctl enable --now chrony
|
||||
sleep 2
|
||||
chronyc makestep # 立即强制同步一次
|
||||
|
||||
# 查看时间同步状态
|
||||
timedatectl status
|
||||
chronyc sources -v
|
||||
|
||||
echo "✅ 系统时区和时间已校准完成。"
|
||||
65
test-starrocks-fe.tf
Normal file
65
test-starrocks-fe.tf
Normal file
@@ -0,0 +1,65 @@
|
||||
resource "vsphere_virtual_machine" "test-starrocks-fe-vm" {
|
||||
name = "test-starrocks-fe"
|
||||
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
|
||||
datastore_id = data.vsphere_datastore.datastore.id
|
||||
num_cpus = 2
|
||||
memory = 4096
|
||||
guest_id = "ubuntu64Guest"
|
||||
network_interface {
|
||||
network_id = "${data.vsphere_network.network.id}"
|
||||
adapter_type = "${data.vsphere_virtual_machine.template.network_interface_types[0]}"
|
||||
}
|
||||
|
||||
clone {
|
||||
template_uuid = data.vsphere_virtual_machine.template.id
|
||||
}
|
||||
|
||||
cdrom {
|
||||
client_device = true
|
||||
}
|
||||
|
||||
vapp {
|
||||
properties = {
|
||||
"user-data" = base64encode(templatefile("${path.module}/cloud-init.tpl", {
|
||||
ip_addr = "192.168.61.170"
|
||||
gateway = "192.168.61.1"
|
||||
dns1 = "192.168.61.1"
|
||||
dns2 = "114.114.114.114"
|
||||
hostname = "test-starrocks-fe"
|
||||
ssh_key = var.ssh_key
|
||||
}))
|
||||
}
|
||||
}
|
||||
connection {
|
||||
type = "ssh"
|
||||
user = "ubuntu"
|
||||
private_key = var.ssh_private_key_content
|
||||
host = "192.168.61.170"
|
||||
timeout = "2m"
|
||||
}
|
||||
|
||||
|
||||
provisioner "file" {
|
||||
source = "${path.module}/scripts/setup.sh"
|
||||
destination = "/home/ubuntu/setup.sh"
|
||||
}
|
||||
|
||||
|
||||
#在虚拟机里面运行脚本
|
||||
provisioner "remote-exec" {
|
||||
inline = [
|
||||
"sudo chmod +x /home/ubuntu/setup.sh",
|
||||
"sudo bash /home/ubuntu/setup.sh",
|
||||
|
||||
]
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
disk {
|
||||
label = "disk0"
|
||||
size = 50
|
||||
}
|
||||
}
|
||||
34
variables.tf
Normal file
34
variables.tf
Normal file
@@ -0,0 +1,34 @@
|
||||
#通过流水线创建的虚拟机都需要通过这份文件进行密钥管理
|
||||
variable "ssh_key" {
|
||||
description = "虚拟机SSH登录公钥"
|
||||
type = string
|
||||
default = "xxx" // 占位符,真实值从建木密钥获取
|
||||
}
|
||||
|
||||
variable "vsphere_user" {
|
||||
description = "vSphere/VCenter管理员登录用户名"
|
||||
type = string
|
||||
default = "xxx" // vcenter用户名
|
||||
sensitive = true // 标记为敏感信息,Terraform日志隐藏输出
|
||||
}
|
||||
|
||||
variable "vsphere_password" {
|
||||
description = "vSphere/VCenter管理员登录密码"
|
||||
type = string
|
||||
default = "xxx" // vcenter密码
|
||||
sensitive = true // 标记为敏感信息,Terraform日志隐藏输出
|
||||
}
|
||||
|
||||
variable "vsphere_server" {
|
||||
description = "vSphere地址"
|
||||
type = string
|
||||
default = "xxx" // 服务器地址
|
||||
}
|
||||
|
||||
|
||||
variable "ssh_private_key_content" {
|
||||
description = "SH私钥内容(用于Terraform远程连接虚拟机)"
|
||||
type = string
|
||||
default = "xxx" # 占位符,真实值从建木获取
|
||||
sensitive = true # 标记为敏感,Terraform 日志会隐藏,防止泄露
|
||||
}
|
||||
Reference in New Issue
Block a user