Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Chu Peng 楚鹏
minikube
提交
706d02b9
M
minikube
项目概览
Chu Peng 楚鹏
/
minikube
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
minikube
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
706d02b9
编写于
2月 27, 2017
作者:
S
Steve Sloka
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix go-client / Refactor k8s util code
上级
60d9d1e1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
71 addition
and
202 deletion
+71
-202
cmd/minikube/cmd/config/util.go
cmd/minikube/cmd/config/util.go
+5
-4
pkg/minikube/cluster/cluster.go
pkg/minikube/cluster/cluster.go
+0
-198
pkg/minikube/service/service.go
pkg/minikube/service/service.go
+66
-0
未找到文件。
cmd/minikube/cmd/config/util.go
浏览文件 @
706d02b9
...
...
@@ -29,6 +29,7 @@ import (
"k8s.io/minikube/pkg/minikube/cluster"
"k8s.io/minikube/pkg/minikube/config"
"k8s.io/minikube/pkg/minikube/machine"
"k8s.io/minikube/pkg/minikube/service"
"k8s.io/minikube/pkg/minikube/sshutil"
)
...
...
@@ -132,7 +133,7 @@ func EnableOrDisableAddon(name string, val string) error {
}
// Create ECR Secret
err
=
cluster
.
CreateSecret
(
err
=
service
.
CreateSecret
(
"kube-system"
,
"registry-creds-ecr"
,
map
[
string
]
string
{
...
...
@@ -152,7 +153,7 @@ func EnableOrDisableAddon(name string, val string) error {
}
// Create GCR Secret
err
=
cluster
.
CreateSecret
(
err
=
service
.
CreateSecret
(
"kube-system"
,
"registry-creds-gcr"
,
map
[
string
]
string
{
...
...
@@ -172,8 +173,8 @@ func EnableOrDisableAddon(name string, val string) error {
}
}
else
{
// Cleanup existing secrets
cluster
.
DeleteSecret
(
"kube-system"
,
"registry-creds-ecr"
)
cluster
.
DeleteSecret
(
"kube-system"
,
"registry-creds-gcr"
)
service
.
DeleteSecret
(
"kube-system"
,
"registry-creds-ecr"
)
service
.
DeleteSecret
(
"kube-system"
,
"registry-creds-gcr"
)
}
//TODO(r2d4): config package should not reference API, pull this out
...
...
pkg/minikube/cluster/cluster.go
浏览文件 @
706d02b9
...
...
@@ -20,7 +20,6 @@ import (
"encoding/json"
"flag"
"fmt"
"html/template"
"net"
"os"
"path/filepath"
...
...
@@ -34,11 +33,8 @@ import (
"github.com/docker/machine/libmachine/host"
"github.com/docker/machine/libmachine/state"
"github.com/golang/glog"
"github.com/pkg/browser"
"github.com/pkg/errors"
"k8s.io/client-go/pkg/api/v1"
"k8s.io/client-go/pkg/labels"
"k8s.io/minikube/pkg/minikube/assets"
"k8s.io/minikube/pkg/minikube/constants"
"k8s.io/minikube/pkg/minikube/sshutil"
...
...
@@ -453,197 +449,3 @@ func EnsureMinikubeRunningOrExit(api libmachine.API, exitStatus int) {
os
.
Exit
(
exitStatus
)
}
}
type
ServiceURL
struct
{
Namespace
string
Name
string
URLs
[]
string
}
type
ServiceURLs
[]
ServiceURL
func
GetServiceURLs
(
api
libmachine
.
API
,
namespace
string
,
t
*
template
.
Template
)
(
ServiceURLs
,
error
)
{
host
,
err
:=
CheckIfApiExistsAndLoad
(
api
)
if
err
!=
nil
{
return
nil
,
err
}
ip
,
err
:=
host
.
Driver
.
GetIP
()
if
err
!=
nil
{
return
nil
,
err
}
client
,
err
:=
GetKubernetesClient
()
if
err
!=
nil
{
return
nil
,
err
}
getter
:=
client
.
Services
(
namespace
)
svcs
,
err
:=
getter
.
List
(
kubeapi
.
ListOptions
{})
if
err
!=
nil
{
return
nil
,
err
}
var
serviceURLs
[]
ServiceURL
for
_
,
svc
:=
range
svcs
.
Items
{
urls
,
err
:=
getServiceURLsWithClient
(
client
,
ip
,
svc
.
Namespace
,
svc
.
Name
,
t
)
if
err
!=
nil
{
if
_
,
ok
:=
err
.
(
MissingNodePortError
);
ok
{
serviceURLs
=
append
(
serviceURLs
,
ServiceURL
{
Namespace
:
svc
.
Namespace
,
Name
:
svc
.
Name
})
continue
}
return
nil
,
err
}
serviceURLs
=
append
(
serviceURLs
,
ServiceURL
{
Namespace
:
svc
.
Namespace
,
Name
:
svc
.
Name
,
URLs
:
urls
})
}
return
serviceURLs
,
nil
}
// CheckService waits for the specified service to be ready by returning an error until the service is up
// The check is done by polling the endpoint associated with the service and when the endpoint exists, returning no error->service-online
func
CheckService
(
namespace
string
,
service
string
)
error
{
client
,
err
:=
GetKubernetesClient
()
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
endpoints
:=
client
.
Endpoints
(
namespace
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
endpoint
,
err
:=
endpoints
.
Get
(
service
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
return
checkEndpointReady
(
endpoint
)
}
func
checkEndpointReady
(
endpoint
*
v1
.
Endpoints
)
error
{
const
notReadyMsg
=
"Waiting, endpoint for service is not ready yet...
\n
"
if
len
(
endpoint
.
Subsets
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
notReadyMsg
)
return
&
util
.
RetriableError
{
Err
:
errors
.
New
(
"Endpoint for service is not ready yet"
)}
}
for
_
,
subset
:=
range
endpoint
.
Subsets
{
if
len
(
subset
.
Addresses
)
==
0
{
fmt
.
Fprintf
(
os
.
Stderr
,
notReadyMsg
)
return
&
util
.
RetriableError
{
Err
:
errors
.
New
(
"No endpoints for service are ready yet"
)}
}
}
return
nil
}
func
WaitAndMaybeOpenService
(
api
libmachine
.
API
,
namespace
string
,
service
string
,
urlTemplate
*
template
.
Template
,
urlMode
bool
,
https
bool
)
{
if
err
:=
util
.
RetryAfter
(
20
,
func
()
error
{
return
CheckService
(
namespace
,
service
)
},
6
*
time
.
Second
);
err
!=
nil
{
fmt
.
Fprintf
(
os
.
Stderr
,
"Could not find finalized endpoint being pointed to by %s: %s
\n
"
,
service
,
err
)
os
.
Exit
(
1
)
}
urls
,
err
:=
GetServiceURLsForService
(
api
,
namespace
,
service
,
urlTemplate
)
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
fmt
.
Fprintln
(
os
.
Stderr
,
"Check that minikube is running and that you have specified the correct namespace (-n flag)."
)
os
.
Exit
(
1
)
}
for
_
,
url
:=
range
urls
{
if
https
{
url
=
strings
.
Replace
(
url
,
"http"
,
"https"
,
1
)
}
if
urlMode
||
!
strings
.
HasPrefix
(
url
,
"http"
)
{
fmt
.
Fprintln
(
os
.
Stdout
,
url
)
}
else
{
fmt
.
Fprintln
(
os
.
Stdout
,
"Opening kubernetes service "
+
namespace
+
"/"
+
service
+
" in default browser..."
)
browser
.
OpenURL
(
url
)
}
}
}
func
GetServiceListByLabel
(
namespace
string
,
key
string
,
value
string
)
(
*
v1
.
ServiceList
,
error
)
{
client
,
err
:=
GetKubernetesClient
()
if
err
!=
nil
{
return
&
v1
.
ServiceList
{},
&
util
.
RetriableError
{
Err
:
err
}
}
services
:=
client
.
Services
(
namespace
)
if
err
!=
nil
{
return
&
v1
.
ServiceList
{},
&
util
.
RetriableError
{
Err
:
err
}
}
return
getServiceListFromServicesByLabel
(
services
,
key
,
value
)
}
func
getServiceListFromServicesByLabel
(
services
corev1
.
ServiceInterface
,
key
string
,
value
string
)
(
*
v1
.
ServiceList
,
error
)
{
selector
:=
labels
.
SelectorFromSet
(
labels
.
Set
(
map
[
string
]
string
{
key
:
value
}))
serviceList
,
err
:=
services
.
List
(
kubeapi
.
ListOptions
{
LabelSelector
:
selector
})
if
err
!=
nil
{
return
&
v1
.
ServiceList
{},
&
util
.
RetriableError
{
Err
:
err
}
}
return
serviceList
,
nil
}
// CreateSecret creates or modifies secrets
func
CreateSecret
(
namespace
,
name
string
,
dataValues
map
[
string
]
string
,
labels
map
[
string
]
string
)
error
{
client
,
err
:=
GetKubernetesClient
()
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
secrets
:=
client
.
Secrets
(
namespace
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
secret
,
_
:=
secrets
.
Get
(
name
)
// Delete existing secret
if
len
(
secret
.
Name
)
>
0
{
err
=
DeleteSecret
(
namespace
,
name
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
}
// convert strings to data secrets
data
:=
map
[
string
][]
byte
{}
for
key
,
value
:=
range
dataValues
{
data
[
key
]
=
[]
byte
(
value
)
}
// Create Secret
secretObj
:=
&
v1
.
Secret
{
ObjectMeta
:
v1
.
ObjectMeta
{
Name
:
name
,
Labels
:
labels
,
},
Data
:
data
,
Type
:
v1
.
SecretTypeOpaque
,
}
_
,
err
=
secrets
.
Create
(
secretObj
)
if
err
!=
nil
{
fmt
.
Println
(
"err: "
,
err
)
return
&
util
.
RetriableError
{
Err
:
err
}
}
return
nil
}
// DeleteSecret deletes a secret from a namespace
func
DeleteSecret
(
namespace
,
name
string
)
error
{
client
,
err
:=
GetKubernetesClient
()
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
secrets
:=
client
.
Secrets
(
namespace
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
err
=
secrets
.
Delete
(
name
,
&
kubeapi
.
DeleteOptions
{})
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
return
nil
}
pkg/minikube/service/service.go
浏览文件 @
706d02b9
...
...
@@ -261,3 +261,69 @@ func getServiceListFromServicesByLabel(services corev1.ServiceInterface, key str
return
serviceList
,
nil
}
// CreateSecret creates or modifies secrets
func
CreateSecret
(
namespace
,
name
string
,
dataValues
map
[
string
]
string
,
labels
map
[
string
]
string
)
error
{
client
,
err
:=
k8s
.
GetCoreClient
()
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
secrets
:=
client
.
Secrets
(
namespace
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
secret
,
_
:=
secrets
.
Get
(
name
)
// Delete existing secret
if
len
(
secret
.
Name
)
>
0
{
err
=
DeleteSecret
(
namespace
,
name
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
}
// convert strings to data secrets
data
:=
map
[
string
][]
byte
{}
for
key
,
value
:=
range
dataValues
{
data
[
key
]
=
[]
byte
(
value
)
}
// Create Secret
secretObj
:=
&
v1
.
Secret
{
ObjectMeta
:
v1
.
ObjectMeta
{
Name
:
name
,
Labels
:
labels
,
},
Data
:
data
,
Type
:
v1
.
SecretTypeOpaque
,
}
_
,
err
=
secrets
.
Create
(
secretObj
)
if
err
!=
nil
{
fmt
.
Println
(
"err: "
,
err
)
return
&
util
.
RetriableError
{
Err
:
err
}
}
return
nil
}
// DeleteSecret deletes a secret from a namespace
func
DeleteSecret
(
namespace
,
name
string
)
error
{
client
,
err
:=
k8s
.
GetCoreClient
()
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
secrets
:=
client
.
Secrets
(
namespace
)
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
err
=
secrets
.
Delete
(
name
,
&
kubeapi
.
DeleteOptions
{})
if
err
!=
nil
{
return
&
util
.
RetriableError
{
Err
:
err
}
}
return
nil
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录