vagrant/ext/go-plugin/config.go

98 lines
2.3 KiB
Go

package main
import (
"C"
"encoding/json"
"errors"
"github.com/hashicorp/vagrant/ext/go-plugin/vagrant"
"github.com/hashicorp/vagrant/ext/go-plugin/vagrant/plugin"
)
//export ConfigLoad
func ConfigLoad(pluginName, pluginType, data *C.char) *C.char {
r := &Response{}
i, err := Plugins.PluginLookup(to_gs(pluginName), to_gs(pluginType))
if err != nil {
r.Error = err
return r.Dump()
}
p, ok := i.(plugin.Config)
if !ok {
r.Error = errors.New("failed to load requested plugin")
return r.Dump()
}
var cdata map[string]interface{}
r.Error = json.Unmarshal([]byte(to_gs(data)), &cdata)
if r.Error != nil {
return r.Dump()
}
r.Result, r.Error = p.ConfigLoad(cdata)
return r.Dump()
}
//export ConfigAttributes
func ConfigAttributes(pluginName, pluginType *C.char) *C.char {
r := &Response{}
i, err := Plugins.PluginLookup(to_gs(pluginName), to_gs(pluginType))
if err != nil {
r.Error = err
return r.Dump()
}
p, ok := i.(plugin.Config)
if !ok {
r.Error = errors.New("failed to load requested plugin")
return r.Dump()
}
r.Result, r.Error = p.ConfigAttributes()
return r.Dump()
}
//export ConfigValidate
func ConfigValidate(pluginName, pluginType, data, machData *C.char) *C.char {
var m *vagrant.Machine
r := &Response{}
i, err := Plugins.PluginLookup(to_gs(pluginName), to_gs(pluginType))
if err != nil {
r.Error = err
return r.Dump()
}
p, ok := i.(plugin.Config)
if !ok {
r.Error = errors.New("failed to load requested plugin")
return r.Dump()
}
var cdata map[string]interface{}
r.Error = json.Unmarshal([]byte(to_gs(data)), &cdata)
if r.Error != nil {
return r.Dump()
}
m, r.Error = vagrant.LoadMachine(to_gs(machData), nil)
if r.Error != nil {
return r.Dump()
}
r.Result, r.Error = p.ConfigValidate(cdata, m)
return r.Dump()
}
//export ConfigFinalize
func ConfigFinalize(pluginName, pluginType, data *C.char) *C.char {
r := &Response{}
i, err := Plugins.PluginLookup(to_gs(pluginName), to_gs(pluginType))
if err != nil {
r.Error = err
return r.Dump()
}
p, ok := i.(plugin.Config)
if !ok {
r.Error = errors.New("failed to load requested plugin")
return r.Dump()
}
var cdata map[string]interface{}
r.Error = json.Unmarshal([]byte(to_gs(data)), &cdata)
if r.Error == nil {
r.Result, r.Error = p.ConfigFinalize(cdata)
}
return r.Dump()
}