java 虽然重,对各种数据结构处理的工具也很丰富,stream hutool 之类的, terraform 对 list 这样基础的数据结构支持很有限(也可能是自己刚入门摸不到路 QAQ~)
顺便也请教下各位大佬们都是怎样从其他语言切换到 terraform 的,以及怎样度过语言切换的阵痛期~ 目前我跟着 terraform 官网文档摸索着写,英文文档还是有点吃力
1
tilv37 2023-02-23 17:22:58 +08:00
硬着头皮来,各种 google
其实 pulumi 更友好一些,python 语法 |
2
lambdaq 2023-02-23 17:26:24 +08:00
terraform 都撤出大陆了。。。国外也很多公司觉得太贵了。。
|
4
assassins1234567 2023-02-23 17:58:25 +08:00 via iPhone
你这个需求的目的是什么呢?
|
5
easterfan OP @lambdaq 啊? terraform 还要花钱啊,我是 terraform 写的阿里云,目前还没给 terraform 付过费,请教大佬,企业上用 terraform 落地一套设施,方便透露下费用范围大概多少吗 贵的离谱的话 我可能就不用转岗了 😅
|
7
easterfan OP @assassins1234567 感谢评论!
这个 datasource 是阿里云资源管理产品产品下的,返回的是 2 个目录,我先拿到这两个目录,然后分别在 2 个目录下建账号; 建账号时需要传目录 ID ,我是通过 list[0] 下标的方式取目录的; 但是由于这个 datasource 返回的目录是无序的,加上我又通过下标取目录,经常出现把 B 账号一会建到 A 目录下,一会建到 B 目录下; 为了解决这个问题,我想对 datasource 的返回值根据目录名排序,这样就能保证 list[0] 取到的永远是确定的目录; 在官网上有看到 datasource 有 filter 字段,但就是没有 sort 字段; 然后我就不会排序了,一想到 java 里 3 秒钟就能实现的功能,搞了 3 小时没搞出来,就很痛苦🤧 |
8
egen 2023-02-23 21:05:14 +08:00
你这用法不对,如果要对多个目录建帐号应该用 for_each 做循环
https://lonegunmanb.github.io/introduction-terraform/ 可以看看这个教程 terraform 的思路是配置式 + 少量循环 /判断,不能用传统流程的编程思路 |
9
Procumbens 2023-02-23 21:11:37 +08:00
|
10
egen 2023-02-23 21:14:17 +08:00
@lambdaq #2
退出的是 hashicorp 的商业产品,但是 terraform 作为一个开源产品是可以用的,而且 terraform 已经成为事实上的行业标准,国内的云厂商迟早都要跟上 |
12
Tyran 2023-02-23 22:28:32 +08:00 via Android
terraform 就是个简单的脚本语言,思路就是简单,清晰。不用想整整太多花活,虽然硬整也能整,但是得不偿失,越陷越深。最后出来的东西创建资源没问题,修改资源配置就出问题。
所以单一项目的话就写一个描述性的脚本最好,就跟写个 html 是的,需要什么写什么,可以多写 module 。 多个项目需要入参各种判断的话没啥好办法。我们最后的方案是写很多单一资源的 module ,再用 python 写了个小程序,入参直接进小程序,然后自动组装出来一个单个项目的 terraform 脚本。 |
13
lonegunmanb 2023-03-25 21:42:31 +08:00
我是 [https://lonegunmanb.github.io/introduction-terraform/]( https://lonegunmanb.github.io/introduction-terraform/) 的作者。
具体不知道你的需求,但你这个直接的要求也不难做到,需要两个 `locals` 的帮助。 ```hcl terraform { required_providers { alicloud = { source = "aliyun/alicloud" version = "1.201.2" } } } provider "alicloud" { # Configuration options } data "alicloud_resource_manager_folders" "CoreFolder" { output_file = "" } locals { folder_names = sort(data.alicloud_resource_manager_folders.CoreFolder.folders[*].folder_name) folder_map = { for folder in data.alicloud_resource_manager_folders.CoreFolder.folders : folder.folder_name => folder } folders = [ for folder_name in local.folder_names : local.folder_map[folder_name] ] } ``` 顺便说一下,这里的 `locals` 表达式我基本只是简单题试了一下,Github Copilot 就帮我写出来了。 |