$npx -y skills add agentscope-ai/QwenPaw --skill terraform-cli-setupTerraform CLI 安装与初始化技能。当用户本地未安装 Terraform 时自动完成安装,确保 terraform 命令可用并能执行 init/validate。不负责 Provider 凭证配置,凭证在实际使用时由 terraform-skill 引导。
| 1 | Category: setup |
| 2 | |
| 3 | # Terraform CLI 安装与初始化 |
| 4 | |
| 5 | ## 目标 |
| 6 | |
| 7 | - 检测本地是否已安装 `terraform`,未安装则自动安装 |
| 8 | - 确保 `terraform version` 正常输出 |
| 9 | - 引导完成 `terraform init` 初始化工作区 |
| 10 | - 处理 Provider 下载、镜像配置等基础环境问题 |
| 11 | |
| 12 | > **关于 Provider 凭证配置**:各云厂商的凭证配置(AWS/Azure/GCP/阿里云等)不在本技能范围内。Provider 凭证在实际使用 Terraform 时按需配置,请参考 **terraform-skill** 中的 Provider 凭证配置引导。 |
| 13 | |
| 14 | ## 何时触发此技能 |
| 15 | |
| 16 | - 用户首次使用 Terraform 相关功能 |
| 17 | - 执行 `terraform` 命令报错 `command not found` |
| 18 | - `terraform init` 报 Provider 下载失败(网络/镜像问题) |
| 19 | - 用户主动要求安装或重新安装 Terraform |
| 20 | - 其他 Terraform 技能(terraform-skill)的前置依赖检查 |
| 21 | |
| 22 | ## 完整流程 |
| 23 | |
| 24 | ### 第 1 步:检测安装状态 |
| 25 | |
| 26 | ```bash |
| 27 | which terraform 2>/dev/null || echo "NOT_INSTALLED" |
| 28 | ``` |
| 29 | |
| 30 | 如果未安装,进入安装流程。如果已安装,跳到第 3 步。 |
| 31 | |
| 32 | ### 第 2 步:安装 Terraform |
| 33 | |
| 34 | #### macOS (Homebrew — 推荐) |
| 35 | |
| 36 | ```bash |
| 37 | brew tap hashicorp/tap |
| 38 | brew install hashicorp/tap/terraform |
| 39 | ``` |
| 40 | |
| 41 | #### macOS (手动下载) |
| 42 | |
| 43 | ```bash |
| 44 | ARCH=$(uname -m) |
| 45 | case "$ARCH" in |
| 46 | x86_64|amd64) ARCH="amd64" ;; |
| 47 | arm64|aarch64) ARCH="arm64" ;; |
| 48 | esac |
| 49 | curl -fsSL "https://releases.hashicorp.com/terraform/1.14.6/terraform_1.14.6_darwin_${ARCH}.zip" -o /tmp/terraform.zip |
| 50 | mkdir -p ~/.local/bin |
| 51 | unzip -o /tmp/terraform.zip -d ~/.local/bin/ |
| 52 | chmod +x ~/.local/bin/terraform |
| 53 | export PATH="$HOME/.local/bin:$PATH" |
| 54 | ``` |
| 55 | |
| 56 | #### Linux (手动下载) |
| 57 | |
| 58 | ```bash |
| 59 | ARCH=$(uname -m) |
| 60 | case "$ARCH" in |
| 61 | x86_64|amd64) ARCH="amd64" ;; |
| 62 | arm64|aarch64) ARCH="arm64" ;; |
| 63 | esac |
| 64 | curl -fsSL "https://releases.hashicorp.com/terraform/1.14.6/terraform_1.14.6_linux_${ARCH}.zip" -o /tmp/terraform.zip |
| 65 | mkdir -p ~/.local/bin |
| 66 | unzip -o /tmp/terraform.zip -d ~/.local/bin/ |
| 67 | chmod +x ~/.local/bin/terraform |
| 68 | export PATH="$HOME/.local/bin:$PATH" |
| 69 | ``` |
| 70 | |
| 71 | #### Linux (APT — Debian/Ubuntu) |
| 72 | |
| 73 | ```bash |
| 74 | sudo apt-get update && sudo apt-get install -y gnupg software-properties-common |
| 75 | wget -O- https://apt.releases.hashicorp.com/gpg | \ |
| 76 | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null |
| 77 | echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ |
| 78 | https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \ |
| 79 | sudo tee /etc/apt/sources.list.d/hashicorp.list |
| 80 | sudo apt-get update && sudo apt-get install terraform |
| 81 | ``` |
| 82 | |
| 83 | #### Linux (YUM — RHEL/CentOS/Fedora) |
| 84 | |
| 85 | ```bash |
| 86 | sudo yum install -y yum-utils |
| 87 | sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo |
| 88 | sudo yum -y install terraform |
| 89 | ``` |
| 90 | |
| 91 | 安装后验证: |
| 92 | |
| 93 | ```bash |
| 94 | terraform version |
| 95 | ``` |
| 96 | |
| 97 | ### 第 3 步:初始化 Terraform 工作区 |
| 98 | |
| 99 | 在有 `.tf` 文件的目录中执行: |
| 100 | |
| 101 | ```bash |
| 102 | terraform init |
| 103 | ``` |
| 104 | |
| 105 | `terraform init` 会执行: |
| 106 | |
| 107 | 1. **初始化 Backend** — 配置状态存储(默认为本地) |
| 108 | 2. **安装 Provider 插件** — 下载 `.tf` 中声明的 Provider |
| 109 | 3. **下载模块** — 获取引用的远程模块 |
| 110 | 4. **创建锁文件** — 生成 `.terraform.lock.hcl` 锁定版本 |
| 111 | |
| 112 | 常见 init 选项: |
| 113 | |
| 114 | ```bash |
| 115 | # 升级 Provider 和模块到约束范围内的最新版本 |
| 116 | terraform init -upgrade |
| 117 | |
| 118 | # 重新配置 Backend |
| 119 | terraform init -reconfigure |
| 120 | |
| 121 | # 迁移 State 到新 Backend |
| 122 | terraform init -migrate-state |
| 123 | ``` |
| 124 | |
| 125 | ### 第 4 步:验证安装与初始化 |
| 126 | |
| 127 | ```bash |
| 128 | # 检查版本 |
| 129 | terraform version |
| 130 | |
| 131 | # 检查配置文件语法(需要先 init) |
| 132 | terraform validate |
| 133 | |
| 134 | # 格式化代码 |
| 135 | terraform fmt -check |
| 136 | ``` |
| 137 | |
| 138 | 验证结果判断: |
| 139 | |
| 140 | | 输出 | 含义 | 处理方式 | |
| 141 | |------|------|----------| |
| 142 | | `Terraform vX.Y.Z` | 版本正常 | 安装成功 | |
| 143 | | `Success! The configuration is valid.` | validate 通过 | 初始化完成 | |
| 144 | | `Error: Failed to query available provider packages` | Provider 下载失败 | 检查网络或配置镜像 | |
| 145 | | `Error: Inconsistent dependency lock file` | 锁文件不一致 | 执行 `terraform init -upgrade` | |
| 146 | | `Error: Module not installed` | 模块未下载 | 执行 `terraform init` | |
| 147 | | `Error: No valid credential sources found` | Provider 凭证缺失 | 参考 **terraform-skill** 配置凭证 | |
| 148 | |
| 149 | ## 自动化脚本 |
| 150 | |
| 151 | 本技能提供 `scripts/setup_terraform.py`,用于一键检测+安装(从本技能目录执行): |
| 152 | |
| 153 | ```bash |
| 154 | python scripts/setup_terraform.py |
| 155 | ``` |
| 156 | |
| 157 | 该脚本会: |
| 158 | |
| 159 | 1. 检测 `terraform` 是否已安装 |
| 160 | 2. 未安装则根据 OS/Arch 自动下载安装(macOS 优先用 Homebrew) |
| 161 | 3. 输出版本信息确认安装成功 |
| 162 | |
| 163 | ## Agent 决策指南 |
| 164 | |
| 165 | 当你(AI Agent)执行此技能时,按以下决策树操作: |
| 166 | |
| 167 | ``` |
| 168 | 开始 |
| 169 | │ |
| 170 | ├── which terraform → 未找到? |
| 171 | │ └── 根据操作系统自动选择最佳安装方式(无需询问用户) |
| 172 | │ ├── macOS → 优先 brew install,brew 不可用则手动下载 |
| 173 | │ └── Linux → 优先手动下载 zip,检测到 apt/yum 则用包管理器 |
| 174 | │ |
| 175 | ├── terraform version → 正常输出? |
| 176 | │ └── 是 → ✅ Terraform 已就绪 |
| 177 | │ |
| 178 | ├── 当前目录有 .tf 文件? |
| 179 | │ ├── 是 → terraform init |
| 180 | │ │ ├── 成功 → terraform validate |
| 181 | │ │ │ ├── 成功 → ✅ 初始化完成 |
| 182 | │ │ │ └── 失败 → 根据错误信息自动判断修复方案并执行 |
| 183 | │ │ └── Provider 下载失败 → 自动配置阿里云镜像源并重试 |
| 184 | │ └── 否 → ✅ 安装完成,等用户创建 .tf 文件后再 init |
| 185 | │ |
| 186 | └── 遇到 Provider 凭证错误? |
| 187 | └── 引导用户参考 terraform-skill 进行凭证配置 |
| 188 | ``` |
| 189 | |
| 190 | ### 自动决策原则 |
| 191 | |
| 192 | **重要**:在执行本技能时,Agent 应当**自动判断并选择最合适的方案和配置**,无需询问用户,直接执行。 |
| 193 | |
| 194 | #### 安装方式自动选择逻辑 |
| 195 | |
| 196 | | 操作系统 | 判断条件 | 自动选择 | |
| 197 | |----------|----------|----------| |
| 198 | | macOS | `which brew` 存在 | `brew install hashicorp/tap/terraform` | |
| 199 | | macOS | brew 不可用 | 手动下载对应架构的 zip 安装到 `~/.local/bin` | |
| 200 | | Linux (Debian/Ubuntu) | `which apt-get` 存在 | APT 安装 | |
| 201 | | Linux (RHEL/CentOS) | `which yum` 存在 | YUM 安装 | |
| 202 | | Linux (其他) | 无包管理器 | 手动下载 zip 安装 | |
| 203 | |
| 204 | #### Provider 下载失败自动处理 |
| 205 | |
| 206 | 当 `terraform init` 因 Provider 下载失败时,**自动配置阿里云镜像**并重试: |
| 207 | |
| 208 | ```bash |
| 209 | cat > ~/.terraformrc << 'EOF' |
| 210 | provider_installation { |
| 211 | network_mirror { |
| 212 | url = "https://mirrors.aliyun.com/terraform/" |
| 213 | } |
| 214 | } |
| 215 | EOF |
| 216 | terraform |