首页 > 解决方案 > 使用 AWS Go 开发工具包的动态清单

问题描述

如此处所述,如果您使用的是云提供商,则不应在静态文件中管理您的库存。而是使用动态库存


Ansible 文档仅将 python boto sdk 提供为动态库存,如此处所示

     ansible -i ec2.py -u ubuntu us-east-1d -m ping

ansible 是否允许(-i)执行使用 AWS Go sdk 编写的动态清单?而不是 python boto sdk。

标签: amazon-web-servicesgoansibleaws-sdkaws-sdk-go

解决方案


是的,ansible 将使用任何可以产生必要的 JSON 输出的命令,包括一个 shell 脚本,如精美手册所指定:

在以前的版本中,您必须创建一个脚本或程序,以便在使用正确的参数调用时以正确的格式输出 JSON。您仍然可以使用和编写清单脚本,因为我们通过脚本清单插件确保了向后兼容性,并且对使用的编程语言没有限制。

作为一个具体的 golang 示例:

package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    i := map[string]interface{}{
        "_meta": map[string]interface{}{
            "hostvars": map[string]interface{}{
                "example.host": map[string]interface{}{
                    "ansible_host": "127.0.0.1",
                    "ansible_user": "ubuntu",
                },
            },
        },
        "all": map[string]interface{}{
            "children": []string{"ungrouped"},
        },
        "ungrouped": map[string]interface{}{
            "hosts": []string{"example.host"},
        },
    }
    ba, err := json.Marshal(i)
    if err != nil { panic(err) }
    fmt.Println(string(ba))
}

通过通常的机制调用:

go build -o sample-inv ./main.go
ansible -i ./sample-inv -m ping all

推荐阅读