3 Star 2 Fork 4

Gitee 极速下载 / prometheus-operator

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/coreos/prometheus-operator
克隆/下载
helpers.go 4.09 KB
一键复制 编辑 原始数据 按行查看 历史
// Copyright 2017 The prometheus-operator Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package framework
import (
"fmt"
"net/http"
"os"
"path/filepath"
"time"
"k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"github.com/coreos/prometheus-operator/pkg/k8sutil"
"github.com/pkg/errors"
)
func PathToOSFile(relativPath string) (*os.File, error) {
path, err := filepath.Abs(relativPath)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("failed generate absolut file path of %s", relativPath))
}
manifest, err := os.Open(path)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("failed to open file %s", path))
}
return manifest, nil
}
// WaitForPodsReady waits for a selection of Pods to be running and each
// container to pass its readiness check.
func WaitForPodsReady(kubeClient kubernetes.Interface, namespace string, timeout time.Duration, expectedReplicas int, opts metav1.ListOptions) error {
return wait.Poll(time.Second, timeout, func() (bool, error) {
pl, err := kubeClient.Core().Pods(namespace).List(opts)
if err != nil {
return false, err
}
runningAndReady := 0
for _, p := range pl.Items {
isRunningAndReady, err := k8sutil.PodRunningAndReady(p)
if err != nil {
return false, err
}
if isRunningAndReady {
runningAndReady++
}
}
if runningAndReady == expectedReplicas {
return true, nil
}
return false, nil
})
}
func WaitForPodsRunImage(kubeClient kubernetes.Interface, namespace string, expectedReplicas int, image string, opts metav1.ListOptions) error {
return wait.Poll(time.Second, time.Minute*5, func() (bool, error) {
pl, err := kubeClient.Core().Pods(namespace).List(opts)
if err != nil {
return false, err
}
runningImage := 0
for _, p := range pl.Items {
if podRunsImage(p, image) {
runningImage++
}
}
if runningImage == expectedReplicas {
return true, nil
}
return false, nil
})
}
func WaitForHTTPSuccessStatusCode(timeout time.Duration, url string) error {
var resp *http.Response
err := wait.Poll(time.Second, timeout, func() (bool, error) {
var err error
resp, err = http.Get(url)
if err == nil && resp.StatusCode == 200 {
return true, nil
}
return false, nil
})
return errors.Wrap(err, fmt.Sprintf(
"waiting for %v to return a successfull status code timed out. Last response from server was: %v",
url,
resp,
))
}
func podRunsImage(p v1.Pod, image string) bool {
for _, c := range p.Spec.Containers {
if image == c.Image {
return true
}
}
return false
}
func GetLogs(kubeClient kubernetes.Interface, namespace string, podName, containerName string) (string, error) {
logs, err := kubeClient.Core().RESTClient().Get().
Resource("pods").
Namespace(namespace).
Name(podName).SubResource("log").
Param("container", containerName).
Do().
Raw()
if err != nil {
return "", err
}
return string(logs), err
}
func (f *Framework) Poll(timeout, pollInterval time.Duration, pollFunc func() (bool, error)) error {
t := time.After(timeout)
ticker := time.NewTicker(pollInterval)
defer ticker.Stop()
for {
select {
case <-t:
return fmt.Errorf("timed out")
case <-ticker.C:
b, err := pollFunc()
if err != nil {
return err
}
if b {
return nil
}
}
}
}
func ProxyGetPod(kubeClient kubernetes.Interface, namespace string, podName string, port string, path string) *rest.Request {
return kubeClient.CoreV1().RESTClient().Get().Prefix("proxy").Namespace(namespace).Resource("pods").Name(podName + ":" + port).Suffix(path)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors/prometheus-operator.git
git@gitee.com:mirrors/prometheus-operator.git
mirrors
prometheus-operator
prometheus-operator
v0.18.0

搜索帮助

344bd9b3 5694891 D2dac590 5694891