Merge remote-tracking branch 'origin/master'

This commit is contained in:
Anago GCB 2021-07-08 13:48:35 +00:00
commit e1f971d5c2
27 changed files with 6203 additions and 6120 deletions

View File

@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# This script updates `translations/kubectl/template.pot` for
# `pkg/kubectl/cmd/*.go pkg/kubectl/cmd/*/*.go`.
# This script updates `staging/src/k8s.io/kubectl/pkg/util/i18n/translations/kubectl/template.pot` and
# generates/fixes .po and .mo files.
# Usage: `update-translations.sh`.
KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
@ -98,15 +98,15 @@ fi
if [[ "${fix_translations}" == "true" ]]; then
echo "Fixing .po files"
kube::util::ensure-temp-dir
for PO_FILE in translations/kubectl/*/LC_MESSAGES/k8s.po; do
for PO_FILE in "${TRANSLATIONS}"/kubectl/*/LC_MESSAGES/k8s.po; do
TMP="${KUBE_TEMP}/fix.po"
if [[ "${PO_FILE}" =~ .*/default/.* || "${PO_FILE}" =~ .*/en_US/.* ]]; then
# mark obsolete, and set default values for english translations
msgen translations/kubectl/template.pot | \
msgen "${TRANSLATIONS}/kubectl/template.pot" | \
msgmerge -s --no-fuzzy-matching "${PO_FILE}" - > "${TMP}"
else
# mark obsolete, but do not add untranslated messages
msgmerge -s --no-fuzzy-matching "${PO_FILE}" translations/kubectl/template.pot | msgattrib --translated - > "${TMP}"
msgmerge -s --no-fuzzy-matching "${PO_FILE}" "${TRANSLATIONS}/kubectl/template.pot" | msgattrib --translated - > "${TMP}"
fi
mv "${TMP}" "${PO_FILE}"
done

View File

@ -155,6 +155,13 @@ func SetInternalTrafficPolicy(policy api.ServiceInternalTrafficPolicyType) Tweak
}
}
// SetExternalTrafficPolicy sets the externalTrafficPolicy field for a Service.
func SetExternalTrafficPolicy(policy api.ServiceExternalTrafficPolicyType) Tweak {
return func(svc *api.Service) {
svc.Spec.ExternalTrafficPolicy = policy
}
}
// SetAllocateLoadBalancerNodePorts sets the allocate LB node port field.
func SetAllocateLoadBalancerNodePorts(val bool) Tweak {
return func(svc *api.Service) {

View File

@ -621,6 +621,99 @@ func TestServiceRegistryUpdate(t *testing.T) {
}
}
func TestServiceRegistryUpdateUnspecifiedAllocations(t *testing.T) {
testCases := []struct {
name string
svc *api.Service // Need a clusterIP, NodePort, and HealthCheckNodePort allocated
tweak func(*api.Service)
}{{
name: "single-port",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal)),
tweak: nil,
}, {
name: "multi-port",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetPorts(
svctest.MakeServicePort("p", 80, intstr.FromInt(80), api.ProtocolTCP),
svctest.MakeServicePort("q", 443, intstr.FromInt(443), api.ProtocolTCP))),
tweak: nil,
}, {
name: "shuffle-ports",
svc: svctest.MakeService("foo",
svctest.SetTypeLoadBalancer,
svctest.SetExternalTrafficPolicy(api.ServiceExternalTrafficPolicyTypeLocal),
svctest.SetPorts(
svctest.MakeServicePort("p", 80, intstr.FromInt(80), api.ProtocolTCP),
svctest.MakeServicePort("q", 443, intstr.FromInt(443), api.ProtocolTCP))),
tweak: func(s *api.Service) {
s.Spec.Ports[0], s.Spec.Ports[1] = s.Spec.Ports[1], s.Spec.Ports[0]
},
}}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
ctx := genericapirequest.NewDefaultContext()
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t)
svc := tc.svc.DeepCopy()
obj, err := storage.Create(ctx, svc.DeepCopy(), rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if err != nil {
t.Fatalf("Expected no error: %v", err)
}
createdSvc := obj.(*api.Service)
if createdSvc.Spec.ClusterIP == "" {
t.Fatalf("expected ClusterIP to be set")
}
if len(createdSvc.Spec.ClusterIPs) == 0 {
t.Fatalf("expected ClusterIPs to be set")
}
for i := range createdSvc.Spec.Ports {
if createdSvc.Spec.Ports[i].NodePort == 0 {
t.Fatalf("expected NodePort[%d] to be set", i)
}
}
if createdSvc.Spec.HealthCheckNodePort == 0 {
t.Fatalf("expected HealthCheckNodePort to be set")
}
// Update from the original object - just change the selector.
svc.Spec.Selector = map[string]string{"bar": "baz2"}
svc.ResourceVersion = createdSvc.ResourceVersion
obj, _, err = storage.Update(ctx, svc.Name, rest.DefaultUpdatedObjectInfo(svc.DeepCopy()), rest.ValidateAllObjectFunc, rest.ValidateAllObjectUpdateFunc, false, &metav1.UpdateOptions{})
if err != nil {
t.Fatalf("Expected no error: %v", err)
}
updatedSvc := obj.(*api.Service)
if want, got := createdSvc.Spec.ClusterIP, updatedSvc.Spec.ClusterIP; want != got {
t.Errorf("expected ClusterIP to not change: wanted %v, got %v", want, got)
}
if want, got := createdSvc.Spec.ClusterIPs, updatedSvc.Spec.ClusterIPs; !reflect.DeepEqual(want, got) {
t.Errorf("expected ClusterIPs to not change: wanted %v, got %v", want, got)
}
portmap := func(s *api.Service) map[string]int32 {
ret := map[string]int32{}
for _, p := range s.Spec.Ports {
ret[p.Name] = p.NodePort
}
return ret
}
if want, got := portmap(createdSvc), portmap(updatedSvc); !reflect.DeepEqual(want, got) {
t.Errorf("expected NodePort to not change: wanted %v, got %v", want, got)
}
if want, got := createdSvc.Spec.HealthCheckNodePort, updatedSvc.Spec.HealthCheckNodePort; want != got {
t.Errorf("expected HealthCheckNodePort to not change: wanted %v, got %v", want, got)
}
})
}
}
func TestServiceRegistryUpdateDryRun(t *testing.T) {
ctx := genericapirequest.NewDefaultContext()
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})

View File

@ -119,6 +119,7 @@ func (strategy svcStrategy) PrepareForUpdate(ctx context.Context, obj, old runti
oldService := old.(*api.Service)
newService.Status = oldService.Status
patchAllocatedValues(newService, oldService)
NormalizeClusterIPs(oldService, newService)
dropServiceDisabledFields(newService, oldService)
dropTypeDependentFields(newService, oldService)
@ -302,6 +303,43 @@ func (serviceStatusStrategy) WarningsOnUpdate(ctx context.Context, obj, old runt
return nil
}
// patchAllocatedValues allows clients to avoid a read-modify-write cycle while
// preserving values that we allocated on their behalf. For example, they
// might create a Service without specifying the ClusterIP, in which case we
// allocate one. If they resubmit that same YAML, we want it to succeed.
func patchAllocatedValues(newSvc, oldSvc *api.Service) {
if needsClusterIP(oldSvc) && needsClusterIP(newSvc) {
if newSvc.Spec.ClusterIP == "" {
newSvc.Spec.ClusterIP = oldSvc.Spec.ClusterIP
}
if len(newSvc.Spec.ClusterIPs) == 0 {
newSvc.Spec.ClusterIPs = oldSvc.Spec.ClusterIPs
}
}
if needsNodePort(oldSvc) && needsNodePort(newSvc) {
// Map NodePorts by name. The user may have changed other properties
// of the port, but we won't see that here.
np := map[string]int32{}
for i := range oldSvc.Spec.Ports {
p := &oldSvc.Spec.Ports[i]
np[p.Name] = p.NodePort
}
for i := range newSvc.Spec.Ports {
p := &newSvc.Spec.Ports[i]
if p.NodePort == 0 {
p.NodePort = np[p.Name]
}
}
}
if needsHCNodePort(oldSvc) && needsHCNodePort(newSvc) {
if newSvc.Spec.HealthCheckNodePort == 0 {
newSvc.Spec.HealthCheckNodePort = oldSvc.Spec.HealthCheckNodePort
}
}
}
// NormalizeClusterIPs adjust clusterIPs based on ClusterIP. This must not
// consider any other fields.
func NormalizeClusterIPs(oldSvc, newSvc *api.Service) {

View File

@ -514,12 +514,12 @@ func InstrumentHandlerFunc(verb, group, version, resource, subresource, scope, c
// CleanScope returns the scope of the request.
func CleanScope(requestInfo *request.RequestInfo) string {
if requestInfo.Namespace != "" {
return "namespace"
}
if requestInfo.Name != "" {
return "resource"
}
if requestInfo.Namespace != "" {
return "namespace"
}
if requestInfo.IsResourceRequest {
return "cluster"
}

View File

@ -20,6 +20,8 @@ import (
"net/http"
"net/url"
"testing"
"k8s.io/apiserver/pkg/endpoints/request"
)
func TestCleanVerb(t *testing.T) {
@ -109,3 +111,50 @@ func TestCleanVerb(t *testing.T) {
})
}
}
func TestCleanScope(t *testing.T) {
testCases := []struct {
name string
requestInfo *request.RequestInfo
expectedScope string
}{
{
name: "empty scope",
requestInfo: &request.RequestInfo{},
expectedScope: "",
},
{
name: "resource scope",
requestInfo: &request.RequestInfo{
Name: "my-resource",
Namespace: "my-namespace",
IsResourceRequest: false,
},
expectedScope: "resource",
},
{
name: "namespace scope",
requestInfo: &request.RequestInfo{
Namespace: "my-namespace",
IsResourceRequest: false,
},
expectedScope: "namespace",
},
{
name: "cluster scope",
requestInfo: &request.RequestInfo{
Namespace: "",
IsResourceRequest: true,
},
expectedScope: "cluster",
},
}
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
if CleanScope(test.requestInfo) != test.expectedScope {
t.Errorf("failed to clean scope: %v", test.requestInfo)
}
})
}
}

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gettext-go-examples-hello\n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2021-05-17 15:40+0200\n"
"POT-Creation-Date: 2021-07-07 20:15+0200\n"
"PO-Revision-Date: 2017-01-29 22:54-0800\n"
"Last-Translator: Brendan Burns <brendan.d.burns@gmail.com>\n"
"Language-Team: \n"
@ -19,21 +19,12 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/apply.go#L98
#: staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go:173
msgid "Apply a configuration to a resource by filename or stdin"
msgstr ""
"Appliquer une configuration à une ressource par nom de fichier ou depuis "
"stdin"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/delete_cluster.go#L38
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster.go:41
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster.go:42
msgid "Delete the specified cluster from the kubeconfig"
msgstr "Supprimer le cluster spécifié du kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/delete_context.go#L38
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context.go:41
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context.go:42
msgid "Delete the specified context from the kubeconfig"
msgstr "Supprimer le contexte spécifié du kubeconfig"
@ -55,50 +46,49 @@ msgstr ""
"Afficher les paramètres fusionnés de kubeconfig ou d'un fichier kubeconfig "
"spécifié"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/current_context.go#L48
#: staging/src/k8s.io/kubectl/pkg/cmd/config/current_context.go:51
msgid "Displays the current-context"
msgstr "Affiche le contexte actuel"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/config.go#L39
#: staging/src/k8s.io/kubectl/pkg/cmd/config/config.go:42
msgid "Modify kubeconfig files"
msgstr "Modifier des fichiers kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_cluster.go#L67
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_cluster.go:73
msgid "Sets a cluster entry in kubeconfig"
msgstr "Définit un cluster dans kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_context.go#L57
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_context.go:61
msgid "Sets a context entry in kubeconfig"
msgstr "Définit un contexte dans kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_authinfo.go#L103
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_authinfo.go:152
msgid "Sets a user entry in kubeconfig"
msgstr "Définit un utilisateur dans kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/set.go#L59
#: staging/src/k8s.io/kubectl/pkg/cmd/config/set.go:74
msgid "Sets an individual value in a kubeconfig file"
msgstr "Définit une valeur individuelle dans un fichier kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/use_context.go#L48
#: staging/src/k8s.io/kubectl/pkg/cmd/config/use_context.go:51
msgid "Sets the current-context in a kubeconfig file"
msgstr "Définit le contexte courant dans un fichier kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/unset.go#L47
#: staging/src/k8s.io/kubectl/pkg/cmd/config/unset.go:59
msgid "Unsets an individual value in a kubeconfig file"
msgstr "Supprime une valeur individuelle dans un fichier kubeconfig"
#: staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go:134
#: staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go:135
msgid "Update the annotations on a resource"
msgstr "Mettre à jour les annotations d'une ressource"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/apply.go#L98
#~ msgid "Apply a configuration to a resource by filename or stdin"
#~ msgstr ""
#~ "Appliquer une configuration à une ressource par nom de fichier ou depuis "
#~ "stdin"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/current_context.go#L48
#~ msgid "Displays the current-context"
#~ msgstr "Affiche le contexte actuel"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_cluster.go#L67
#~ msgid "Sets a cluster entry in kubeconfig"
#~ msgstr "Définit un cluster dans kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_context.go#L57
#~ msgid "Sets a context entry in kubeconfig"
#~ msgstr "Définit un contexte dans kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_authinfo.go#L103
#~ msgid "Sets a user entry in kubeconfig"
#~ msgstr "Définit un utilisateur dans kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/set.go#L59
#~ msgid "Sets an individual value in a kubeconfig file"
#~ msgstr "Définit une valeur individuelle dans un fichier kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/use_context.go#L48
#~ msgid "Sets the current-context in a kubeconfig file"
#~ msgstr "Définit le contexte courant dans un fichier kubeconfig"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/unset.go#L47
#~ msgid "Unsets an individual value in a kubeconfig file"
#~ msgstr "Supprime une valeur individuelle dans un fichier kubeconfig"
#~ msgid ""
#~ "watch is only supported on individual resources and resource collections "
#~ "- %d resources were found"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gettext-go-examples-hello\n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2021-05-17 15:40+0200\n"
"POT-Creation-Date: 2021-07-07 20:15+0200\n"
"PO-Revision-Date: 2018-04-03 06:05+0900\n"
"Last-Translator: Ian Y. Choi <ianyrchoi@gmail.com>\n"
"Language-Team: \n"
@ -19,19 +19,12 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"Plural-Forms: nplurals=1; plural=0;\n"
# https://github.com/kubernetes/kubernetes/blob/masterpkg/kubectl/cmd/apply.go#L98
#: staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go:173
msgid "Apply a configuration to a resource by filename or stdin"
msgstr "구성을 파일 이름 또는 stdin에 의한 자원에 적용합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/delete_cluster.go#L38
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster.go:41
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster.go:42
msgid "Delete the specified cluster from the kubeconfig"
msgstr "kubeconfig에서 지정된 클러스터를 삭제합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/delete_context.go#L38
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context.go:41
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context.go:42
msgid "Delete the specified context from the kubeconfig"
msgstr "kubeconfig에서 지정된 컨텍스트를 삭제합니다"
@ -51,50 +44,47 @@ msgstr "kubeconfig에 정의된 클러스터를 표시합니다"
msgid "Display merged kubeconfig settings or a specified kubeconfig file"
msgstr "병합된 kubeconfig 설정 또는 지정된 kubeconfig 파일을 표시합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/current_context.go#L48
#: staging/src/k8s.io/kubectl/pkg/cmd/config/current_context.go:51
msgid "Displays the current-context"
msgstr "현재-컨텍스트를 표시합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/config.go#L39
#: staging/src/k8s.io/kubectl/pkg/cmd/config/config.go:42
msgid "Modify kubeconfig files"
msgstr "kubeconfig 파일을 수정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_cluster.go#L67
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_cluster.go:73
msgid "Sets a cluster entry in kubeconfig"
msgstr "kubeconfig에서 클러스터 항목을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_context.go#L57
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_context.go:61
msgid "Sets a context entry in kubeconfig"
msgstr "kubeconfig에서 컨텍스트 항목을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_authinfo.go#L103
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_authinfo.go:152
msgid "Sets a user entry in kubeconfig"
msgstr "kubeconfig에서 사용자 항목을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/set.go#L59
#: staging/src/k8s.io/kubectl/pkg/cmd/config/set.go:74
msgid "Sets an individual value in a kubeconfig file"
msgstr "kubeconfig 파일에서 단일값을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/use_context.go#L48
#: staging/src/k8s.io/kubectl/pkg/cmd/config/use_context.go:51
msgid "Sets the current-context in a kubeconfig file"
msgstr "kubeconfig 파일에서 현재-컨텍스트를 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/unset.go#L47
#: staging/src/k8s.io/kubectl/pkg/cmd/config/unset.go:59
msgid "Unsets an individual value in a kubeconfig file"
msgstr "kubeconfig 파일에서 단일값 설정을 해제합니다"
#: staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go:134
#: staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go:135
msgid "Update the annotations on a resource"
msgstr "자원에 대한 주석을 업데이트합니다"
# https://github.com/kubernetes/kubernetes/blob/masterpkg/kubectl/cmd/apply.go#L98
#~ msgid "Apply a configuration to a resource by filename or stdin"
#~ msgstr "구성을 파일 이름 또는 stdin에 의한 자원에 적용합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/current_context.go#L48
#~ msgid "Displays the current-context"
#~ msgstr "현재-컨텍스트를 표시합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_cluster.go#L67
#~ msgid "Sets a cluster entry in kubeconfig"
#~ msgstr "kubeconfig에서 클러스터 항목을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_context.go#L57
#~ msgid "Sets a context entry in kubeconfig"
#~ msgstr "kubeconfig에서 컨텍스트 항목을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/create_authinfo.go#L103
#~ msgid "Sets a user entry in kubeconfig"
#~ msgstr "kubeconfig에서 사용자 항목을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/set.go#L59
#~ msgid "Sets an individual value in a kubeconfig file"
#~ msgstr "kubeconfig 파일에서 단일값을 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/use_context.go#L48
#~ msgid "Sets the current-context in a kubeconfig file"
#~ msgstr "kubeconfig 파일에서 현재-컨텍스트를 설정합니다"
# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/config/unset.go#L47
#~ msgid "Unsets an individual value in a kubeconfig file"
#~ msgstr "kubeconfig 파일에서 단일값 설정을 해제합니다"
#~ msgid ""
#~ "watch is only supported on individual resources and resource collections "
#~ "- %d resources were found"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: hello-world\n"
"Report-Msgid-Bugs-To: EMAIL\n"
"POT-Creation-Date: 2021-05-17 15:40+0200\n"
"POT-Creation-Date: 2021-07-07 20:15+0200\n"
"PO-Revision-Date: 2017-06-02 09:13+0800\n"
"Last-Translator: William Chang <warmchang@outlook.com>\n"
"Language-Team: \n"
@ -19,16 +19,10 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go:173
msgid "Apply a configuration to a resource by filename or stdin"
msgstr "通過檔案名或標準輸入流(stdin)對資源進行配置"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster.go:41
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_cluster.go:42
msgid "Delete the specified cluster from the kubeconfig"
msgstr "刪除 kubeconfig 檔案中指定的叢集(cluster)"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context.go:41
#: staging/src/k8s.io/kubectl/pkg/cmd/config/delete_context.go:42
msgid "Delete the specified context from the kubeconfig"
msgstr "刪除 kubeconfig 檔案中指定的 context"
@ -45,42 +39,38 @@ msgstr "顯示 kubeconfig 檔案中定義的叢集(cluster)"
msgid "Display merged kubeconfig settings or a specified kubeconfig file"
msgstr "顯示合併的 kubeconfig 配置或一個指定的 kubeconfig 檔案"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/current_context.go:51
msgid "Displays the current-context"
msgstr "顯示目前的 context"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/config.go:42
msgid "Modify kubeconfig files"
msgstr "修改 kubeconfig 檔案"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_cluster.go:73
msgid "Sets a cluster entry in kubeconfig"
msgstr "設置 kubeconfig 檔案中的一個叢集(cluster)條目"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_context.go:61
msgid "Sets a context entry in kubeconfig"
msgstr "設置 kubeconfig 檔案中的一個 context 條目"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/create_authinfo.go:152
msgid "Sets a user entry in kubeconfig"
msgstr "設置 kubeconfig 檔案中的一個使用者條目"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/set.go:74
msgid "Sets an individual value in a kubeconfig file"
msgstr "設置 kubeconfig 檔案中的一個值"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/use_context.go:51
msgid "Sets the current-context in a kubeconfig file"
msgstr "設置 kubeconfig 檔案中的目前 context"
#: staging/src/k8s.io/kubectl/pkg/cmd/config/unset.go:59
msgid "Unsets an individual value in a kubeconfig file"
msgstr "取消設置 kubeconfig 檔案中的一個值"
#: staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go:134
#: staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go:135
msgid "Update the annotations on a resource"
msgstr "更新一個資源的注解(annotations)"
#~ msgid "Apply a configuration to a resource by filename or stdin"
#~ msgstr "通過檔案名或標準輸入流(stdin)對資源進行配置"
#~ msgid "Displays the current-context"
#~ msgstr "顯示目前的 context"
#~ msgid "Sets a cluster entry in kubeconfig"
#~ msgstr "設置 kubeconfig 檔案中的一個叢集(cluster)條目"
#~ msgid "Sets a context entry in kubeconfig"
#~ msgstr "設置 kubeconfig 檔案中的一個 context 條目"
#~ msgid "Sets a user entry in kubeconfig"
#~ msgstr "設置 kubeconfig 檔案中的一個使用者條目"
#~ msgid "Sets an individual value in a kubeconfig file"
#~ msgstr "設置 kubeconfig 檔案中的一個值"
#~ msgid "Sets the current-context in a kubeconfig file"
#~ msgstr "設置 kubeconfig 檔案中的目前 context"
#~ msgid "Unsets an individual value in a kubeconfig file"
#~ msgstr "取消設置 kubeconfig 檔案中的一個值"
#~ msgid ""
#~ "watch is only supported on individual resources and resource collections "
#~ "- %d resources were found"