尝试进行API调用,该调用需要URL中的node.chef_environment
我无法让require 'net/http'
require 'json'
response = Net::HTTP.get URI('http://1.1.1.1:81/terra/v2/terraform/get/%{node.chef_environment}')
octocat = JSON.parse response
octocat.keys
ip = octocat['terraform']['modules'][0]['outputs']['public_ip_address']['value'][0]
log ip
部分在我的厨师食谱中工作,有什么帮助吗?
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$dir = '/home/kevinpirnie/www';
$GLOBALS['I'] = 0; // root folder given index 0
function dirToArray( $dir , $parent) {
$result = array();
$cdir = scandir($dir);
foreach ($cdir as $key => $value) {
if (!in_array($value, array(".", ".."))) {
if (is_dir($dir . DIRECTORY_SEPARATOR . $value)){
$result[$value] = [++$GLOBALS['I']]; // add folder index
$result[$value][] = $parent; // add parent folder index
$result[$value][] = dirToArray($dir . DIRECTORY_SEPARATOR . $value, $GLOBALS['I']);
} else {
$result[] = $value;
}
}
}
return $result;
}
$res = dirToArray($dir, $GLOBALS['I']);
echo '<hr />';
echo '<pre>';
print_r($res);
echo '</pre>';
echo '</pre>';
任何帮助或建议都会很棒
问候
答案 0 :(得分:1)
好的,所以有一些事情,首先是字符串。 Ruby使用#{}
进行字符串插值,但它必须在双引号内,而不是单引号。 %{}
格式化也是一个东西,但它用于Ruby版本的printf的一些时髦的东西,并不是你想要的。所以我们一起得到"http://1.1.1.1:81/terra/v2/terraform/get/#{node.chef_environment}"
字符串。
其次,Chef包含一个HTTP客户端,您通常应使用而不是来自Chef代码中的Net::HTTP
。在这种情况下:
octocat = Chef::HTTP::SimpleJSON('http://1.1.1.1:81/').get("/terra/v2/terraform/get/#{node.chef_environment}")
使用更快的JSON库Chef(ffi-yajl)来处理重定向,瞬态失败和JSON解码等问题。
答案 1 :(得分:-2)
简单如
response = Net :: HTTP.get URI(&#34; http://1.1.1.1:81/terra/v2/terraform/get/&#34; + node.chef_environment)