in runtimes/runtimes.go [98:162]
func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
opURL := apiHost
_, err = url.ParseRequestURI(opURL)
if err != nil {
opURL = HTTPS + opURL
}
req, _ := http.NewRequest("GET", opURL, nil)
req.Header.Set(HTTP_CONTENT_TYPE_KEY, HTTP_CONTENT_TYPE_VALUE)
tlsConfig := &tls.Config{
InsecureSkipVerify: true,
}
var netTransport = &http.Transport{
TLSClientConfig: tlsConfig,
}
var netClient = &http.Client{
Timeout: time.Second * utils.DEFAULT_HTTP_TIMEOUT,
Transport: netTransport,
}
res, err := netClient.Do(req)
if err != nil {
// TODO() create an error
errString := wski18n.T(wski18n.ID_ERR_RUNTIMES_GET_X_err_X,
map[string]interface{}{"err": err.Error()})
whisk.Debug(whisk.DbgWarn, errString)
if utils.Flags.Strict {
errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_PARSER_ERROR,
map[string]interface{}{wski18n.KEY_ERR: err.Error()})
err = wskderrors.NewRuntimeParserError(errMessage)
return
}
}
if res != nil {
defer res.Body.Close()
}
// Local openwhisk deployment sometimes only returns "application/json" as the content type
if err != nil || !strings.Contains(HTTP_CONTENT_TYPE_VALUE, res.Header.Get(HTTP_CONTENT_TYPE_KEY)) {
stdout := wski18n.T(wski18n.ID_MSG_UNMARSHAL_LOCAL)
wskprint.PrintOpenWhiskVerbose(utils.Flags.Verbose, stdout)
err = json.Unmarshal(RUNTIME_DETAILS, &op)
if err != nil {
errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_PARSER_ERROR,
map[string]interface{}{wski18n.KEY_ERR: err.Error()})
err = wskderrors.NewRuntimeParserError(errMessage)
}
} else {
b, _ := ioutil.ReadAll(res.Body)
if b != nil && len(b) > 0 {
stdout := wski18n.T(wski18n.ID_MSG_UNMARSHAL_NETWORK_X_url_X,
map[string]interface{}{"url": opURL})
wskprint.PrintOpenWhiskVerbose(utils.Flags.Verbose, stdout)
err = json.Unmarshal(b, &op)
if err != nil {
errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_PARSER_ERROR,
map[string]interface{}{wski18n.KEY_ERR: err.Error()})
err = wskderrors.NewRuntimeParserError(errMessage)
}
}
}
return
}