Да, ansible будет использовать любую команду, которая может выдать необходимый вывод JSON, включая только сценарий оболочки, как указано подробным руководством :
В предыдущих версиях вам приходилось создавать скрипт или программу, которая может выводить 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