Пример #1
0
    def _search_all_repository(self, url, version=1, q=""):
        """ 搜索私有仓所有镜像 """

        if url:
            ReqUrl = url.strip(
                "/") + "/v1/search" if version == 1 else url.strip(
                    "/") + "/v2/_catalog"
            logger.info("_search_all_repository for url {}".format(ReqUrl))
            try:
                Images = requests.get(ReqUrl,
                                      timeout=self.timeout,
                                      verify=self.verify,
                                      params={
                                          "q": q
                                      }).json()
            except Exception, e:
                logger.error(e, exc_info=True)
            else:
                if version == 1:
                    return Images["results"]
                else:
                    return [{
                        "name": _,
                        "description": None
                    } for _ in Images["repositories"] if q in _]
Пример #2
0
    def _get_imageId(self, ImageName, tag="latest"):
        """ 查询某个镜像tag的imageId/digest """

        ReqUrl = self._baseUrl + "/repositories/{}/tags/{}".format(
            ImageName, tag
        ) if self.version == 1 else self._baseUrl + "/{}/manifests/{}".format(
            ImageName, tag)
        logger.info("_get_imageId for url {}".format(ReqUrl))
        try:
            if self.version == 1:
                r = requests.get(ReqUrl,
                                 timeout=self.timeout,
                                 verify=self.verify)
            else:
                r = requests.head(
                    ReqUrl,
                    timeout=self.timeout,
                    verify=self.verify,
                    allow_redirects=True,
                    headers={
                        "Content-Type":
                        "application/vnd.docker.distribution.manifest.v2+json"
                    })
        except Exception, e:
            logger.error(e, exc_info=True)
            return False
Пример #3
0
    def DELETE(self, serviceFlag):
        #delete a service

        res = {"msg": None, "code": 0}
        logger.info(serviceFlag)

        if not self.leader:
            res.update(msg="No active swarm", code=-1000)
            logger.info(res)
            return res

        if not serviceFlag:
            res.update(msg="no service id or name<%s>" % serviceFlag,
                       code=50100)
            logger.info(res)
            return res

        logger.info("delete service, check parameters pass")
        try:
            SwarmEngineServiceDeleteUrl = Splice(netloc=self.leader,
                                                 port=self.port,
                                                 path="/services/%s" %
                                                 serviceFlag).geturl
            SwarmEngineServiceDeleteRes = requests.delete(
                SwarmEngineServiceDeleteUrl,
                timeout=self.timeout,
                verify=self.verify)
            SwarmEngineServiceDeleteCode = SwarmEngineServiceDeleteRes.status_code
        except Exception, e:
            logger.error(e, exc_info=True)
            res.update(success=False,
                       code=50200,
                       msg="delete service<%s> fail" % serviceFlag)
Пример #4
0
 def _pickleActive(self, data):
     """ 序列化活跃仓库数据写入存储 """
     try:
         with open(self._dir1, "w") as f:
             json.dump(data, f)
     except Exception, e:
         logger.error(e, exc_info=True)
         res = False
Пример #5
0
    def status(self):
        """ 返回私有仓状态 """

        ReqUrl = self._baseUrl + "/_ping" if self.version == 1 else self._baseUrl
        try:
            r = requests.head(ReqUrl, timeout=self.timeout, verify=self.verify)
        except Exception, e:
            logger.error(e, exc_info=True)
Пример #6
0
    def POST(self, name, addr, version=1, auth=None):
        """ 创建 """

        res = {"msg": None, "code": 0}
        try:
            version = int(version)
        except Exception, e:
            logger.error(e, exc_info=True)
            res.update(msg="params error", code=-10002)
            logger.info(res)
            return res
Пример #7
0
    def _checkSwarmNodeinfo(self, ip):
        """ 查询节点信息 """

        try:
            NodeUrl = Splice(netloc=ip, port=self.port, path="/info").geturl
            NodeInfo = requests.get(NodeUrl,
                                    timeout=self.timeout,
                                    verify=self.verify).json()
        except Exception, e:
            logger.error(e, exc_info=True)
            return {}
Пример #8
0
    def _list_imageId_ancestry(self, ImageId):
        """ 列出某个镜像所有父镜像 """

        ReqUrl = self._baseUrl + "/images/{}/ancestry".format(ImageId)
        logger.info("_list_imageId_ancestry for url {}".format(ReqUrl))
        try:
            ImageIds = requests.get(ReqUrl,
                                    timeout=self.timeout,
                                    verify=self.verify).json()
        except Exception, e:
            logger.error(e, exc_info=True)
            return False
Пример #9
0
    def _delete_repository(self, ImageName):
        """ 删除一个镜像 """

        ReqUrl = self._baseUrl + "/repositories/{}/".format(ImageName)
        logger.info("_delete_repository for url {}".format(ReqUrl))
        try:
            delete_repo_result = requests.delete(ReqUrl,
                                                 timeout=self.timeout,
                                                 verify=self.verify).json()
        except Exception, e:
            logger.error(e, exc_info=True)
            return False
Пример #10
0
    def _list_repository_tag(self, ImageName):
        """ 列出某个镜像所有标签 """

        ReqUrl = self._baseUrl + "/repositories/{}/tags".format(
            ImageName
        ) if self.version == 1 else self._baseUrl + "/{}/tags/list".format(
            ImageName)
        logger.info("_list_repository_tag for url {}".format(ReqUrl))
        try:
            Tags = requests.get(ReqUrl,
                                timeout=self.timeout,
                                verify=self.verify).json()
        except Exception, e:
            logger.error(e, exc_info=True)
            return {}
Пример #11
0
    def _search_all_repository(self, q):
        """ 搜索私有仓所有镜像 """

        ReqUrl = self._baseUrl + "/search" if self.version == 1 else self._baseUrl + "/_catalog"
        logger.info("_search_all_repository for url {}".format(ReqUrl))
        try:
            Images = requests.get(ReqUrl,
                                  timeout=self.timeout,
                                  verify=self.verify,
                                  params={
                                      "q": q
                                  }).json()
        except Exception, e:
            logger.error(e, exc_info=True)
            return []
Пример #12
0
    def _delete_image(self, ImageName, url, version=1):
        """ 删除一个镜像 """

        if url:
            ReqUrl = url.strip("/") + "/v1/repositories/{}/".format(
                ImageName) if version == 1 else url.strip(
                    "/") + "/v2/{}/xxx".format(ImageName)
            logger.info("_delete_repository for url {}".format(ReqUrl))
            try:
                delete_repo_result = requests.delete(
                    ReqUrl, timeout=self.timeout, verify=self.verify).json()
            except Exception, e:
                logger.error(e, exc_info=True)
            else:
                return delete_repo_result
Пример #13
0
    def _checkStatus(self, url, version=1):
        """ 返回私有仓状态 """

        if url:
            url = url.strip("/") + "/v1/_ping" if version == 1 else url.strip(
                "/") + "/v2/"
            try:
                req = requests.head(url,
                                    timeout=self.timeout,
                                    verify=self.verify)
            except Exception, e:
                logger.error(e, exc_info=True)
            else:
                logger.info(req.status_code)
                return req.ok
Пример #14
0
    def _get_imageId_info(self, ImageId, url, version=1):
        """ 查询某个镜像的信息 """

        if url:
            ReqUrl = url.strip("/") + "/v1/images/{}/json".format(
                ImageId) if version == 1 else url.strip(
                    "/") + "/v2/{}/tags/xxx".format(ImageName)
            logger.info("_get_imageId_info for url {}".format(ReqUrl))
            try:
                ImageInfo = requests.get(ReqUrl,
                                         timeout=self.timeout,
                                         verify=self.verify).json()
            except Exception, e:
                logger.error(e, exc_info=True)
            else:
                return ImageInfo
Пример #15
0
    def _image_tag(self, ImageName, tag, url, version=1):
        """ 查询某个镜像tag的imageId, 删除tag """

        if url:
            ReqUrl = url.strip("/") + "/v1/repositories/{}/tags/{}".format(
                ImageName, tag) if version == 1 else url.strip(
                    "/") + "/v2/{}/tags/list".format(ImageName)
            logger.info("_get_imageId for url {}".format(ReqUrl))
            try:
                ImageId = requests.get(ReqUrl,
                                       timeout=self.timeout,
                                       verify=self.verify).json()
                #result = requests.delete(ReqUrl, timeout=self.timeout, verify=self.verify).json()
            except Exception, e:
                logger.error(e, exc_info=True)
            else:
                return ImageId
Пример #16
0
def ApiComments():
    res = {"code": 0, "data": [], "msg": None}
    args = dict(short_name=g.plugins['DuoshuoComment']['shortName'],
                range="all",
                num_items=request.args.get("limit", 10))
    try:
        data = requests.get("http://api.duoshuo.com/sites/listTopThreads.json",
                            params=args,
                            timeout=5,
                            headers={
                                "User-Agent": "Interest.blog/www.saintic.com"
                            }).json()
        blog = [
            _ for _ in data.get("response")
            if _.get("comments") != 0 and _.update(
                created_at=timeChange(_['created_at'])) == None
        ]
    except Exception, e:
        logger.error(e, exc_info=True)
Пример #17
0
    def _list_image_tags(self, ImageName, url, version=1):
        """ 列出某个镜像所有标签 """

        if url:
            ReqUrl = url.strip("/") + "/v1/repositories/{}/tags".format(
                ImageName) if version == 1 else url.strip(
                    "/") + "/v2/{}/tags/list".format(ImageName)
            logger.info("_list_image_tag for url {}".format(ReqUrl))
            try:
                Tags = requests.get(ReqUrl,
                                    timeout=self.timeout,
                                    verify=self.verify).json()
            except Exception, e:
                logger.error(e, exc_info=True)
            else:
                if version == 1:
                    return Tags
                else:
                    return {_: "digest" for _ in Tags.get('tags', [])}
Пример #18
0
    def _get_imageId_info(self, ImageId, ImageName=None):
        """
        查询某个镜像的信息
        v1: ImageId
        v2: ImageName + Tag(ImageId)
        """

        ReqUrl = self._baseUrl + "/images/{}/json".format(
            ImageId
        ) if self.version == 1 else self._baseUrl + "/{}/manifests/{}".format(
            ImageName, ImageId)
        logger.info("_get_imageId_info for url {}".format(ReqUrl))
        try:
            ImageInfo = requests.get(ReqUrl,
                                     timeout=self.timeout,
                                     verify=self.verify).json()
        except Exception, e:
            logger.error(e, exc_info=True)
            return False
Пример #19
0
def UploadImage():
    f = request.files.get("WriteBlogImage")
    if f and allowed_file(f.filename):
        filename = secure_filename(f.filename)  #随机命名
        logger.info("get allowed file %s, its name is %s" % (f, filename))
        filedir = os.path.join(upload_page.root_path, UPLOAD_FOLDER)
        if not os.path.exists(filedir): os.makedirs(filedir)
        f.save(os.path.join(filedir, filename))
        imgUrl = request.url_root + IMAGE_UPLOAD_DIR + filename
        logger.info("file saved in %s, its url is %s" % (filedir, imgUrl))
        res = Response(imgUrl)
        res.headers["ContentType"] = "text/html"
        res.headers["Charset"] = "utf-8"
        return res
    else:
        result = r"error|未成功获取文件,上传失败"
        logger.error(result)
        res = Response(result)
        res.headers["ContentType"] = "text/html"
        res.headers["Charset"] = "utf-8"
        return res
Пример #20
0
    def GET(self, node=None):
        """ 查询所有可用的节点群,并组织返回节点信息 """

        res = {"code": 0, "msg": None, "data": []}
        if self.leader:
            #format (host, id, role, status, availability, reachability, containers, cpu, mem, label, UpdatedAt, DockerVersion).
            req_data  = self._checkSwarmNode(self.leader, node)
            req_data  = req_data if isinstance(req_data, (list, tuple)) else (req_data,)
            node_data = []
            for i in req_data:
                try:
                    node_id            = i['ID']
                    node_role          = 'Leader' if i.get('ManagerStatus', {}).get('Leader') else i['Spec'].get('Role')
                    node_host          = i.get('ManagerStatus', {}).get('Addr', '').split(':')[0] or i['Spec'].get('Labels', {}).get('ipaddr', i['Description']['Hostname'])
                    node_status        = i['Status']['State']
                    node_availability  = i['Spec'].get('Availability')
                    node_reachability  = i.get('ManagerStatus', {}).get('Reachability')
                    node_containers    = self._checkSwarmNodeinfo(node_host).get("ContainersRunning") if ip_check(node_host) and node_status == "ready" and node_availability == "active" else 'Unknown'
                    node_cpu           = int(i['Description']['Resources']['NanoCPUs'] / 1e9)
                    node_mem           = int(i['Description']['Resources']['MemoryBytes'] / 1e6 / 1024) #bytes to G
                    node_label         = i['Spec'].get('Labels')
                    if isinstance(node_label, dict):
                        _node_label = ''
                        for k,v in node_label.iteritems():
                            _node_label += '%s=%s, ' %(k, v)
                        node_label = _node_label.strip(' ,')
                    node_CreatedAt     = timeChange(i['CreatedAt'])
                    node_UpdatedAt     = timeChange(i['UpdatedAt'])
                    node_dockerVersion = i['Description']['Engine']['EngineVersion']
                    node_indexVersion  = i.get("Version",  {}).get("Index")

                except Exception,e:
                    logger.error(e, exc_info=True)
                    logger.debug(i)
                    node_host = i.get('ManagerStatus', {}).get('Addr', '').split(':')[0] or i['Spec'].get('Labels', {}).get('ipaddr', i['Description']['Hostname'])
                    node_data.append((node_host, i.get("ID")))
                else:
                    node_data.append((node_host, node_id, node_role, node_status, node_availability, node_reachability, node_containers, node_cpu, node_mem, node_label, node_CreatedAt, node_UpdatedAt, node_dockerVersion))
            res.update(data=node_data)