mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
e1f971d5c2
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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})
|
||||
|
@ -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) {
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -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"
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -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"
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user