phper API调用之ZStack
公司刚好给一个编写ZStack虚拟机启动的任务, 材料就只有一个开发文档 ,附上官网地址:https://www.zstack.io/.
一开始也是没听过 ,不过之前有做过docker项目的API开发,所以也没有那么担心,不过查询了百度上众多文章 ,对宇如何使用的步骤很少,都是一些介绍理论的知识,由于精力不够,所以也没有深刻研读,只是暂时想学会使用的方法,
我所用的框架是基于Symfony核心开发的eudsoho的框架,作为一个tper,实在初次体验,感觉坑很多,不在这里深谈。
在ZStack里我们要有几个概念
1.Authorization: OAuth 会话UU(Session UUID)
可以设置会话超时时间 ,一般不设置默认10分钟过期,最高30天
2.多看手册,讲的还是很清楚的。废话不多写
有个Webhook功能 很重要 ,但是文档上就是一笔带过,给我造成了不小得麻烦。
这里的
/**
* 创建虚拟机
*
* @param array()
* @return \think\Response
*/
public function createVm($config){
$curl = new Curl();
$curl->setTimeout(0);
$curl->setHeader('Content-Type','application/json');
$curl->setHeader('Authorization','OAuth'.$this->thesessionid);
// $curl->setHeader('X-Job-UUID','6b4899e137624f73adbcfe29195d3d98');
$curl->setHeader('X-Web-Hook',"http://192.168.1.221:8077/course/lesson/callstack");
$data = $curl->post($this->controllerIp."zstack/v1/vm-instances",$config);
if ($curl -> error && $curl -> errorCode != 409) {
$res = array('status'=>false,'msg' =>
'获取成功','data'=>$data);
} else {
$res = array('status'=>true,'msg' =>
'获取成功','data'=>$data);
}
return $res;
}
这个 $curl->setHeader(‘X-Job-UUID’,‘6b4899e137624f73adbcfe29195d3d98’);
我这里直接不用了,因为写死了非常不好用,我刚开始头疼怎么去获取页面上的信息,因为我试过file_get_content()或者curls去获取我们拿到的轮询地址的返回数据,不定死job地址直接给你返回null,定死job地址就是返回数据还没倒那个指定的地址,但我就要用了返回地址里的主机uuid,时间对不上,中间也是吃了不少的亏。这里的web-hook要用线上的地址,选一个方法接收 info,true)即可,
首先我们要创建一个service库 我就叫它ZStack,在相应的ZStackServiceImpl.php文件中 我写了一个登陆的API
//登陆
public function putlogin($config){
$curl = new Curl();
$curl->setTimeout(0);
$curl->setHeader('Content-Type','application/json');
$data = $curl->put($this->controllerIp."zstack/v1/accounts/login", $config);
if ($curl -> error && $curl -> errorCode != 409) {
$res = array('status'=>false,'msg' =>
'登陆失败','data'=>$data);
} else {
$res = array('status'=>true,'msg' =>
'登录成功','data'=>$data);
}
return $res;
}
在ZStack里 ,用户是很重要的,因为你所有的API操作都需要这个登陆接口返回给你的数据
类似于这样
"status" => true
"msg" => "登录成功"
"data" => "{"inventory":{"uuid":"0bacc13897754c569b8ad0abbf892137","accountUuid":"36c27e8ff05c4780bf6d2fa65700f22e","userUuid":"36c27e8ff05c4780bf6d2fa65700f22e","expiredD ▶"
]
手册里说了 :使用API的第一步是登录以获取一个Session UUID,以供后续API调用使用
在data里 我们拿到了一个json字符串,是返回给我们的你的暂时的session-uuid;
然后创建虚拟机
咱们要组装数据
$img=[
"params" =>[
"name" =>"controll".$coursename,
"description" =>"this is a controller",
"instanceOfferingUuid" => "754e7e8396fc4744b1fa4c185bdf4b3e",
"imageUuid" =>$data['scenecontroller'],
"l3NetworkUuids" =>[
$l3uuid
],
"defaultL3NetworkUuid"=> $l3uuid,
"dataDiskOfferingUuids" => [],
"systemTags" =>[
"usbRedirect::false",
"cleanTraffic::undefined"
],
"strategy" => "InstantStart",
],
];
}
然后就可以创建虚拟机了
还有一些属于业务内容就不多赘述
js ,linux,都是要会的,只会php是没有出路的
我的主管送我一句话:”程序员写好代码,不是最快,而是没有漏洞“。
不要浮躁,多沉心。