API调用之ZStack

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要用线上的地址,选一个方法接收 r e q u e s t > g e t C o n t e n t ( ) ; 使 j s o n d e c o d e ( request->getContent();里的内容,存入库中,要使用的时候 转换成数组用两次json_decode( 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是没有出路的
我的主管送我一句话:”程序员写好代码,不是最快,而是没有漏洞“。
不要浮躁,多沉心。

猜你喜欢

转载自blog.csdn.net/weixin_43023551/article/details/86528892
今日推荐