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( request>getContent();使jsondecode(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是没有出路的
我的主管送我一句话:”程序员写好代码,不是最快,而是没有漏洞“。
不要浮躁,多沉心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值