mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
preferences page -- part 2
Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
parent
24f754697b
commit
6fd9b7cf76
@ -112,6 +112,22 @@ msgstr "Add cluster"
|
||||
msgid "Add field"
|
||||
msgstr "Add field"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:123
|
||||
#~ msgid "Added repos"
|
||||
#~ msgstr "Added repos"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:149
|
||||
msgid "Added repos:"
|
||||
msgstr "Added repos:"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:108
|
||||
msgid "Adding helm branch <0>{0}</0> has failed: {1}"
|
||||
msgstr "Adding helm branch <0>{0}</0> has failed: {1}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:108
|
||||
#~ msgid "Adding repo <0>{0}</0> has failed: {1}"
|
||||
#~ msgstr "Adding repo <0>{0}</0> has failed: {1}"
|
||||
|
||||
#: src/renderer/components/+custom-resources/crd-details.tsx:78
|
||||
msgid "Additional Printer Columns"
|
||||
msgstr "Additional Printer Columns"
|
||||
@ -186,11 +202,11 @@ msgstr "Allocatable"
|
||||
msgid "Allow Privilege Escalation"
|
||||
msgstr "Allow Privilege Escalation"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:76
|
||||
#: src/renderer/components/+preferences/preferences.tsx:177
|
||||
msgid "Allow telemetry & usage tracking"
|
||||
msgstr "Allow telemetry & usage tracking"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:68
|
||||
#: src/renderer/components/+preferences/preferences.tsx:169
|
||||
msgid "Allow untrusted Certificate Authorities"
|
||||
msgstr "Allow untrusted Certificate Authorities"
|
||||
|
||||
@ -385,7 +401,7 @@ msgstr "Cancel"
|
||||
msgid "Capacity"
|
||||
msgstr "Capacity"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:67
|
||||
#: src/renderer/components/+preferences/preferences.tsx:168
|
||||
msgid "Certificate Trust"
|
||||
msgstr "Certificate Trust"
|
||||
|
||||
@ -452,7 +468,7 @@ msgstr "Cluster IP"
|
||||
msgid "Cluster Issuers"
|
||||
msgstr "Cluster Issuers"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:50
|
||||
#: src/renderer/components/+preferences/preferences.tsx:139
|
||||
msgid "Color Theme"
|
||||
msgstr "Color Theme"
|
||||
|
||||
@ -701,7 +717,7 @@ msgstr "Daemon Sets"
|
||||
msgid "DaemonSets"
|
||||
msgstr "DaemonSets"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:22
|
||||
#: src/renderer/components/+preferences/preferences.tsx:40
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
|
||||
@ -764,7 +780,7 @@ msgstr "Disk"
|
||||
msgid "Disk:"
|
||||
msgstr "Disk:"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:72
|
||||
#: src/renderer/components/+preferences/preferences.tsx:173
|
||||
msgid "Does not affect cluster communications!"
|
||||
msgstr "Does not affect cluster communications!"
|
||||
|
||||
@ -772,7 +788,7 @@ msgstr "Does not affect cluster communications!"
|
||||
msgid "Domains"
|
||||
msgstr "Domains"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:53
|
||||
#: src/renderer/components/+preferences/preferences.tsx:142
|
||||
msgid "Download Mirror"
|
||||
msgstr "Download Mirror"
|
||||
|
||||
@ -780,7 +796,7 @@ msgstr "Download Mirror"
|
||||
msgid "Download file"
|
||||
msgstr "Download file"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:54
|
||||
#: src/renderer/components/+preferences/preferences.tsx:143
|
||||
msgid "Download mirror for kubectl"
|
||||
msgstr "Download mirror for kubectl"
|
||||
|
||||
@ -951,7 +967,7 @@ msgstr "Groups"
|
||||
msgid "HPA"
|
||||
msgstr "HPA"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
#: src/renderer/components/+preferences/preferences.tsx:162
|
||||
msgid "HTTP Proxy"
|
||||
msgstr "HTTP Proxy"
|
||||
|
||||
@ -959,7 +975,7 @@ msgstr "HTTP Proxy"
|
||||
msgid "HTTP Proxy server. Used for communicating with Kubernetes API."
|
||||
msgstr "HTTP Proxy server. Used for communicating with Kubernetes API."
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:56
|
||||
#: src/renderer/components/+preferences/preferences.tsx:145
|
||||
msgid "Helm"
|
||||
msgstr "Helm"
|
||||
|
||||
@ -971,10 +987,18 @@ msgstr "Helm Chart Install"
|
||||
msgid "Helm Install: {repo}/{name}"
|
||||
msgstr "Helm Install: {repo}/{name}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
#~ msgid "Helm Repository <0>{0}</0> already in use."
|
||||
#~ msgstr "Helm Repository <0>{0}</0> already in use."
|
||||
|
||||
#: src/renderer/components/dock/upgrade-chart.store.ts:114
|
||||
msgid "Helm Upgrade: {0}"
|
||||
msgstr "Helm Upgrade: {0}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
msgid "Helm branch <0>{0}</0> already in use"
|
||||
msgstr "Helm branch <0>{0}</0> already in use"
|
||||
|
||||
#: src/renderer/components/+config-secrets/secret-details.tsx:93
|
||||
#: src/renderer/components/+workloads-pods/pod-logs-dialog.tsx:215
|
||||
#: src/renderer/components/drawer/drawer-param-toggler.tsx:19
|
||||
@ -1185,7 +1209,7 @@ msgstr "Last seen"
|
||||
msgid "Last transition time: {lastTransitionTime}"
|
||||
msgstr "Last transition time: {lastTransitionTime}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:42
|
||||
#: src/renderer/components/+preferences/preferences.tsx:131
|
||||
msgid "Lens Global Settings"
|
||||
msgstr "Lens Global Settings"
|
||||
|
||||
@ -1193,7 +1217,7 @@ msgstr "Lens Global Settings"
|
||||
msgid "Level"
|
||||
msgstr "Level"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:23
|
||||
#: src/renderer/components/+preferences/preferences.tsx:41
|
||||
msgid "Light"
|
||||
msgstr "Light"
|
||||
|
||||
@ -1461,7 +1485,7 @@ msgstr "Namespaces"
|
||||
msgid "Namespaces: {0}"
|
||||
msgstr "Namespaces: {0}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:71
|
||||
#: src/renderer/components/+preferences/preferences.tsx:172
|
||||
msgid "Needed with some corporate proxies that do certificate re-writing."
|
||||
msgstr "Needed with some corporate proxies that do certificate re-writing."
|
||||
|
||||
@ -1731,7 +1755,7 @@ msgstr "Port"
|
||||
msgid "Ports"
|
||||
msgstr "Ports"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:37
|
||||
#: src/renderer/components/+preferences/preferences.tsx:126
|
||||
msgid "Preferences"
|
||||
msgstr "Preferences"
|
||||
|
||||
@ -1753,7 +1777,7 @@ msgstr "Privileged"
|
||||
msgid "Provisioner"
|
||||
msgstr "Provisioner"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:64
|
||||
#: src/renderer/components/+preferences/preferences.tsx:165
|
||||
msgid "Proxy is used only for non-cluster communication."
|
||||
msgstr "Proxy is used only for non-cluster communication."
|
||||
|
||||
@ -1837,6 +1861,7 @@ msgstr "Release: {0}"
|
||||
msgid "Releases"
|
||||
msgstr "Releases"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:156
|
||||
#: src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx:60
|
||||
#: src/renderer/components/cluster-manager/clusters-menu.tsx:60
|
||||
#: src/renderer/components/cluster-manager/clusters-menu.tsx:64
|
||||
@ -1878,6 +1903,14 @@ msgstr "Remove selected items ({0})"
|
||||
msgid "Remove {resourceKind} <0>{resourceName}</0>?"
|
||||
msgstr "Remove {resourceKind} <0>{resourceName}</0>?"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:119
|
||||
msgid "Removing helm branch <0>{0}</0> has failed: {1}"
|
||||
msgstr "Removing helm branch <0>{0}</0> has failed: {1}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:119
|
||||
#~ msgid "Removing repo <0>{0}</0> has failed: {1}"
|
||||
#~ msgstr "Removing repo <0>{0}</0> has failed: {1}"
|
||||
|
||||
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:62
|
||||
msgid "Renew Before"
|
||||
msgstr "Renew Before"
|
||||
@ -1894,6 +1927,10 @@ msgstr "Replicas"
|
||||
msgid "Repo/Name"
|
||||
msgstr "Repo/Name"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:146
|
||||
msgid "Repositories"
|
||||
msgstr "Repositories"
|
||||
|
||||
#: src/renderer/components/+apps-helm-charts/helm-charts.tsx:68
|
||||
msgid "Repository"
|
||||
msgstr "Repository"
|
||||
@ -2136,6 +2173,10 @@ msgstr "Select a quota.."
|
||||
msgid "Select kubeconfig"
|
||||
msgstr "Select kubeconfig"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:88
|
||||
#~ msgid "Select repository"
|
||||
#~ msgstr "Select repository"
|
||||
|
||||
#: src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx:188
|
||||
msgid "Select role.."
|
||||
msgstr "Select role.."
|
||||
@ -2337,11 +2378,11 @@ msgstr "TLS"
|
||||
msgid "Taints"
|
||||
msgstr "Taints"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:75
|
||||
#: src/renderer/components/+preferences/preferences.tsx:176
|
||||
msgid "Telemetry & Usage Tracking"
|
||||
msgstr "Telemetry & Usage Tracking"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:78
|
||||
#: src/renderer/components/+preferences/preferences.tsx:179
|
||||
msgid "Telemetry & usage data is collected to continuously improve the Lens experience."
|
||||
msgstr "Telemetry & usage data is collected to continuously improve the Lens experience."
|
||||
|
||||
@ -2373,7 +2414,7 @@ msgstr "This field must contain only lowercase latin characters, numbers and das
|
||||
msgid "This is the quick launch menu."
|
||||
msgstr "This is the quick launch menu."
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:70
|
||||
#: src/renderer/components/+preferences/preferences.tsx:171
|
||||
msgid "This will make Lens to trust ANY certificate authority without any validations."
|
||||
msgstr "This will make Lens to trust ANY certificate authority without any validations."
|
||||
|
||||
@ -2416,7 +2457,7 @@ msgstr "Transmit"
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:62
|
||||
#: src/renderer/components/+preferences/preferences.tsx:163
|
||||
msgid "Type HTTP proxy url (example: http://proxy.acme.org:8080)"
|
||||
msgstr "Type HTTP proxy url (example: http://proxy.acme.org:8080)"
|
||||
|
||||
@ -2609,7 +2650,7 @@ msgstr "ago"
|
||||
msgid "and <0>{tailCount}</0> more"
|
||||
msgstr "and <0>{tailCount}</0> more"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:42
|
||||
#: src/renderer/components/+preferences/preferences.tsx:131
|
||||
msgid "applicable to all clusters"
|
||||
msgstr "applicable to all clusters"
|
||||
|
||||
|
||||
@ -112,6 +112,22 @@ msgstr ""
|
||||
msgid "Add field"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:123
|
||||
#~ msgid "Added repos"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:149
|
||||
msgid "Added repos:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:108
|
||||
msgid "Adding helm branch <0>{0}</0> has failed: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:108
|
||||
#~ msgid "Adding repo <0>{0}</0> has failed: {1}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+custom-resources/crd-details.tsx:78
|
||||
msgid "Additional Printer Columns"
|
||||
msgstr ""
|
||||
@ -186,11 +202,11 @@ msgstr ""
|
||||
msgid "Allow Privilege Escalation"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:76
|
||||
#: src/renderer/components/+preferences/preferences.tsx:177
|
||||
msgid "Allow telemetry & usage tracking"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:68
|
||||
#: src/renderer/components/+preferences/preferences.tsx:169
|
||||
msgid "Allow untrusted Certificate Authorities"
|
||||
msgstr ""
|
||||
|
||||
@ -385,7 +401,7 @@ msgstr ""
|
||||
msgid "Capacity"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:67
|
||||
#: src/renderer/components/+preferences/preferences.tsx:168
|
||||
msgid "Certificate Trust"
|
||||
msgstr ""
|
||||
|
||||
@ -448,7 +464,7 @@ msgstr ""
|
||||
msgid "Cluster Issuers"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:50
|
||||
#: src/renderer/components/+preferences/preferences.tsx:139
|
||||
msgid "Color Theme"
|
||||
msgstr ""
|
||||
|
||||
@ -697,7 +713,7 @@ msgstr ""
|
||||
msgid "DaemonSets"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:22
|
||||
#: src/renderer/components/+preferences/preferences.tsx:40
|
||||
msgid "Dark"
|
||||
msgstr ""
|
||||
|
||||
@ -760,7 +776,7 @@ msgstr ""
|
||||
msgid "Disk:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:72
|
||||
#: src/renderer/components/+preferences/preferences.tsx:173
|
||||
msgid "Does not affect cluster communications!"
|
||||
msgstr ""
|
||||
|
||||
@ -768,7 +784,7 @@ msgstr ""
|
||||
msgid "Domains"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:53
|
||||
#: src/renderer/components/+preferences/preferences.tsx:142
|
||||
msgid "Download Mirror"
|
||||
msgstr ""
|
||||
|
||||
@ -776,7 +792,7 @@ msgstr ""
|
||||
msgid "Download file"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:54
|
||||
#: src/renderer/components/+preferences/preferences.tsx:143
|
||||
msgid "Download mirror for kubectl"
|
||||
msgstr ""
|
||||
|
||||
@ -942,7 +958,7 @@ msgstr ""
|
||||
msgid "HPA"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
#: src/renderer/components/+preferences/preferences.tsx:162
|
||||
msgid "HTTP Proxy"
|
||||
msgstr ""
|
||||
|
||||
@ -950,7 +966,7 @@ msgstr ""
|
||||
msgid "HTTP Proxy server. Used for communicating with Kubernetes API."
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:56
|
||||
#: src/renderer/components/+preferences/preferences.tsx:145
|
||||
msgid "Helm"
|
||||
msgstr ""
|
||||
|
||||
@ -962,10 +978,18 @@ msgstr ""
|
||||
msgid "Helm Install: {repo}/{name}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
#~ msgid "Helm Repository <0>{0}</0> already in use."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/dock/upgrade-chart.store.ts:114
|
||||
msgid "Helm Upgrade: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
msgid "Helm branch <0>{0}</0> already in use"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+config-secrets/secret-details.tsx:93
|
||||
#: src/renderer/components/+workloads-pods/pod-logs-dialog.tsx:215
|
||||
#: src/renderer/components/drawer/drawer-param-toggler.tsx:19
|
||||
@ -1176,7 +1200,7 @@ msgstr ""
|
||||
msgid "Last transition time: {lastTransitionTime}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:42
|
||||
#: src/renderer/components/+preferences/preferences.tsx:131
|
||||
msgid "Lens Global Settings"
|
||||
msgstr ""
|
||||
|
||||
@ -1184,7 +1208,7 @@ msgstr ""
|
||||
msgid "Level"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:23
|
||||
#: src/renderer/components/+preferences/preferences.tsx:41
|
||||
msgid "Light"
|
||||
msgstr ""
|
||||
|
||||
@ -1452,7 +1476,7 @@ msgstr ""
|
||||
msgid "Namespaces: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:71
|
||||
#: src/renderer/components/+preferences/preferences.tsx:172
|
||||
msgid "Needed with some corporate proxies that do certificate re-writing."
|
||||
msgstr ""
|
||||
|
||||
@ -1714,7 +1738,7 @@ msgstr ""
|
||||
msgid "Ports"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:37
|
||||
#: src/renderer/components/+preferences/preferences.tsx:126
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
@ -1736,7 +1760,7 @@ msgstr ""
|
||||
msgid "Provisioner"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:64
|
||||
#: src/renderer/components/+preferences/preferences.tsx:165
|
||||
msgid "Proxy is used only for non-cluster communication."
|
||||
msgstr ""
|
||||
|
||||
@ -1820,6 +1844,7 @@ msgstr ""
|
||||
msgid "Releases"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:156
|
||||
#: src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx:60
|
||||
#: src/renderer/components/cluster-manager/clusters-menu.tsx:60
|
||||
#: src/renderer/components/cluster-manager/clusters-menu.tsx:64
|
||||
@ -1861,6 +1886,14 @@ msgstr ""
|
||||
msgid "Remove {resourceKind} <0>{resourceName}</0>?"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:119
|
||||
msgid "Removing helm branch <0>{0}</0> has failed: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:119
|
||||
#~ msgid "Removing repo <0>{0}</0> has failed: {1}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:62
|
||||
msgid "Renew Before"
|
||||
msgstr ""
|
||||
@ -1877,6 +1910,10 @@ msgstr ""
|
||||
msgid "Repo/Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:146
|
||||
msgid "Repositories"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+apps-helm-charts/helm-charts.tsx:68
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
@ -2119,6 +2156,10 @@ msgstr ""
|
||||
msgid "Select kubeconfig"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:88
|
||||
#~ msgid "Select repository"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx:188
|
||||
msgid "Select role.."
|
||||
msgstr ""
|
||||
@ -2320,11 +2361,11 @@ msgstr ""
|
||||
msgid "Taints"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:75
|
||||
#: src/renderer/components/+preferences/preferences.tsx:176
|
||||
msgid "Telemetry & Usage Tracking"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:78
|
||||
#: src/renderer/components/+preferences/preferences.tsx:179
|
||||
msgid "Telemetry & usage data is collected to continuously improve the Lens experience."
|
||||
msgstr ""
|
||||
|
||||
@ -2356,7 +2397,7 @@ msgstr ""
|
||||
msgid "This is the quick launch menu."
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:70
|
||||
#: src/renderer/components/+preferences/preferences.tsx:171
|
||||
msgid "This will make Lens to trust ANY certificate authority without any validations."
|
||||
msgstr ""
|
||||
|
||||
@ -2399,7 +2440,7 @@ msgstr ""
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:62
|
||||
#: src/renderer/components/+preferences/preferences.tsx:163
|
||||
msgid "Type HTTP proxy url (example: http://proxy.acme.org:8080)"
|
||||
msgstr ""
|
||||
|
||||
@ -2592,7 +2633,7 @@ msgstr ""
|
||||
msgid "and <0>{tailCount}</0> more"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:42
|
||||
#: src/renderer/components/+preferences/preferences.tsx:131
|
||||
msgid "applicable to all clusters"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@ -113,6 +113,22 @@ msgstr ""
|
||||
msgid "Add field"
|
||||
msgstr "Добавить поле"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:123
|
||||
#~ msgid "Added repos"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:149
|
||||
msgid "Added repos:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:108
|
||||
msgid "Adding helm branch <0>{0}</0> has failed: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:108
|
||||
#~ msgid "Adding repo <0>{0}</0> has failed: {1}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+custom-resources/crd-details.tsx:78
|
||||
msgid "Additional Printer Columns"
|
||||
msgstr ""
|
||||
@ -187,11 +203,11 @@ msgstr ""
|
||||
msgid "Allow Privilege Escalation"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:76
|
||||
#: src/renderer/components/+preferences/preferences.tsx:177
|
||||
msgid "Allow telemetry & usage tracking"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:68
|
||||
#: src/renderer/components/+preferences/preferences.tsx:169
|
||||
msgid "Allow untrusted Certificate Authorities"
|
||||
msgstr ""
|
||||
|
||||
@ -386,7 +402,7 @@ msgstr "Отмена"
|
||||
msgid "Capacity"
|
||||
msgstr "Емкость"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:67
|
||||
#: src/renderer/components/+preferences/preferences.tsx:168
|
||||
msgid "Certificate Trust"
|
||||
msgstr ""
|
||||
|
||||
@ -453,7 +469,7 @@ msgstr "IP-адрес кластера"
|
||||
msgid "Cluster Issuers"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:50
|
||||
#: src/renderer/components/+preferences/preferences.tsx:139
|
||||
msgid "Color Theme"
|
||||
msgstr ""
|
||||
|
||||
@ -702,7 +718,7 @@ msgstr ""
|
||||
msgid "DaemonSets"
|
||||
msgstr "DaemonSets"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:22
|
||||
#: src/renderer/components/+preferences/preferences.tsx:40
|
||||
msgid "Dark"
|
||||
msgstr ""
|
||||
|
||||
@ -765,7 +781,7 @@ msgstr "Диск"
|
||||
msgid "Disk:"
|
||||
msgstr "Диск:"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:72
|
||||
#: src/renderer/components/+preferences/preferences.tsx:173
|
||||
msgid "Does not affect cluster communications!"
|
||||
msgstr ""
|
||||
|
||||
@ -773,7 +789,7 @@ msgstr ""
|
||||
msgid "Domains"
|
||||
msgstr "Домены"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:53
|
||||
#: src/renderer/components/+preferences/preferences.tsx:142
|
||||
msgid "Download Mirror"
|
||||
msgstr ""
|
||||
|
||||
@ -781,7 +797,7 @@ msgstr ""
|
||||
msgid "Download file"
|
||||
msgstr "Скачать файл"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:54
|
||||
#: src/renderer/components/+preferences/preferences.tsx:143
|
||||
msgid "Download mirror for kubectl"
|
||||
msgstr ""
|
||||
|
||||
@ -952,7 +968,7 @@ msgstr "Группы"
|
||||
msgid "HPA"
|
||||
msgstr "HPA"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
#: src/renderer/components/+preferences/preferences.tsx:162
|
||||
msgid "HTTP Proxy"
|
||||
msgstr ""
|
||||
|
||||
@ -960,7 +976,7 @@ msgstr ""
|
||||
msgid "HTTP Proxy server. Used for communicating with Kubernetes API."
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:56
|
||||
#: src/renderer/components/+preferences/preferences.tsx:145
|
||||
msgid "Helm"
|
||||
msgstr ""
|
||||
|
||||
@ -972,10 +988,18 @@ msgstr "Установка Helm чарта"
|
||||
msgid "Helm Install: {repo}/{name}"
|
||||
msgstr "Helm установка: {repo}/{name}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
#~ msgid "Helm Repository <0>{0}</0> already in use."
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/dock/upgrade-chart.store.ts:114
|
||||
msgid "Helm Upgrade: {0}"
|
||||
msgstr "Helm обновление: {0}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:61
|
||||
msgid "Helm branch <0>{0}</0> already in use"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+config-secrets/secret-details.tsx:93
|
||||
#: src/renderer/components/+workloads-pods/pod-logs-dialog.tsx:215
|
||||
#: src/renderer/components/drawer/drawer-param-toggler.tsx:19
|
||||
@ -1186,7 +1210,7 @@ msgstr "Увиденно в последний раз"
|
||||
msgid "Last transition time: {lastTransitionTime}"
|
||||
msgstr "Последнее изменение: {lastTransitionTime}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:42
|
||||
#: src/renderer/components/+preferences/preferences.tsx:131
|
||||
msgid "Lens Global Settings"
|
||||
msgstr ""
|
||||
|
||||
@ -1194,7 +1218,7 @@ msgstr ""
|
||||
msgid "Level"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:23
|
||||
#: src/renderer/components/+preferences/preferences.tsx:41
|
||||
msgid "Light"
|
||||
msgstr ""
|
||||
|
||||
@ -1462,7 +1486,7 @@ msgstr "Namespaces"
|
||||
msgid "Namespaces: {0}"
|
||||
msgstr "Namespaces: {0}"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:71
|
||||
#: src/renderer/components/+preferences/preferences.tsx:172
|
||||
msgid "Needed with some corporate proxies that do certificate re-writing."
|
||||
msgstr ""
|
||||
|
||||
@ -1732,7 +1756,7 @@ msgstr ""
|
||||
msgid "Ports"
|
||||
msgstr "Порты"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:37
|
||||
#: src/renderer/components/+preferences/preferences.tsx:126
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
@ -1754,7 +1778,7 @@ msgstr ""
|
||||
msgid "Provisioner"
|
||||
msgstr "Комиссия"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:64
|
||||
#: src/renderer/components/+preferences/preferences.tsx:165
|
||||
msgid "Proxy is used only for non-cluster communication."
|
||||
msgstr ""
|
||||
|
||||
@ -1838,6 +1862,7 @@ msgstr "Установка: {0}"
|
||||
msgid "Releases"
|
||||
msgstr "Релизы"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:156
|
||||
#: src/renderer/components/+user-management-roles-bindings/role-binding-details.tsx:60
|
||||
#: src/renderer/components/cluster-manager/clusters-menu.tsx:60
|
||||
#: src/renderer/components/cluster-manager/clusters-menu.tsx:64
|
||||
@ -1879,6 +1904,14 @@ msgstr "Удалить выбранные элементы ({0})"
|
||||
msgid "Remove {resourceKind} <0>{resourceName}</0>?"
|
||||
msgstr "Удалить {resourceKind} <0>{resourceName}</0>?"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:119
|
||||
msgid "Removing helm branch <0>{0}</0> has failed: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:119
|
||||
#~ msgid "Removing repo <0>{0}</0> has failed: {1}"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:62
|
||||
msgid "Renew Before"
|
||||
msgstr "Обновить до"
|
||||
@ -1895,6 +1928,10 @@ msgstr "Реплики"
|
||||
msgid "Repo/Name"
|
||||
msgstr "Репозиторий/Имя"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:146
|
||||
msgid "Repositories"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+apps-helm-charts/helm-charts.tsx:68
|
||||
msgid "Repository"
|
||||
msgstr "Репозиторий"
|
||||
@ -2137,6 +2174,10 @@ msgstr "Выберите квоту..."
|
||||
msgid "Select kubeconfig"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:88
|
||||
#~ msgid "Select repository"
|
||||
#~ msgstr ""
|
||||
|
||||
#: src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx:188
|
||||
msgid "Select role.."
|
||||
msgstr "Выбрать роль.."
|
||||
@ -2338,11 +2379,11 @@ msgstr "TLS"
|
||||
msgid "Taints"
|
||||
msgstr "Метки блокировки"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:75
|
||||
#: src/renderer/components/+preferences/preferences.tsx:176
|
||||
msgid "Telemetry & Usage Tracking"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:78
|
||||
#: src/renderer/components/+preferences/preferences.tsx:179
|
||||
msgid "Telemetry & usage data is collected to continuously improve the Lens experience."
|
||||
msgstr ""
|
||||
|
||||
@ -2374,7 +2415,7 @@ msgstr "Это поле может содержать только латинс
|
||||
msgid "This is the quick launch menu."
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:70
|
||||
#: src/renderer/components/+preferences/preferences.tsx:171
|
||||
msgid "This will make Lens to trust ANY certificate authority without any validations."
|
||||
msgstr ""
|
||||
|
||||
@ -2417,7 +2458,7 @@ msgstr "Транзит"
|
||||
msgid "Type"
|
||||
msgstr "Тип"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:62
|
||||
#: src/renderer/components/+preferences/preferences.tsx:163
|
||||
msgid "Type HTTP proxy url (example: http://proxy.acme.org:8080)"
|
||||
msgstr ""
|
||||
|
||||
@ -2610,7 +2651,7 @@ msgstr "тому назад"
|
||||
msgid "and <0>{tailCount}</0> more"
|
||||
msgstr "и <0>{tailCount}</0> ещё"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:42
|
||||
#: src/renderer/components/+preferences/preferences.tsx:131
|
||||
msgid "applicable to all clusters"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@ -1,11 +1,28 @@
|
||||
import request from "request"
|
||||
import requestPromise from "request-promise-native"
|
||||
import { userStore } from "./user-store"
|
||||
|
||||
export function globalRequestOpts(requestOpts: request.Options) {
|
||||
// todo: get rid of "request" (deprecated)
|
||||
// https://github.com/lensapp/lens/issues/459
|
||||
|
||||
function getDefaultRequestOpts(): Partial<request.Options> {
|
||||
const { httpsProxy, allowUntrustedCAs } = userStore.preferences
|
||||
if (httpsProxy) {
|
||||
requestOpts.proxy = httpsProxy
|
||||
return {
|
||||
proxy: httpsProxy || undefined,
|
||||
rejectUnauthorized: !allowUntrustedCAs,
|
||||
}
|
||||
requestOpts.rejectUnauthorized = !allowUntrustedCAs;
|
||||
return requestOpts
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
export function customRequest(opts: request.Options) {
|
||||
return request.defaults(getDefaultRequestOpts())(opts)
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
export function customRequestPromise(opts: requestPromise.Options) {
|
||||
return requestPromise.defaults(getDefaultRequestOpts())(opts)
|
||||
}
|
||||
|
||||
@ -13,6 +13,12 @@ export enum ThemeType {
|
||||
DARK = "dark",
|
||||
}
|
||||
|
||||
export interface Theme {
|
||||
name: string;
|
||||
type: ThemeType;
|
||||
colors?: Record<string, string>;
|
||||
}
|
||||
|
||||
export interface UserStoreModel {
|
||||
lastSeenAppVersion: string;
|
||||
seenContexts: string[];
|
||||
|
||||
@ -6,12 +6,13 @@ import { promiseExec } from "../promise-exec"
|
||||
import { helmCli } from "./helm-cli"
|
||||
|
||||
type CachedYaml = {
|
||||
entries: any;
|
||||
entries: any; // todo: types
|
||||
}
|
||||
|
||||
export class HelmChartManager {
|
||||
protected cache: any
|
||||
protected cache: any = {}
|
||||
protected repo: HelmRepo
|
||||
|
||||
constructor(repo: HelmRepo){
|
||||
this.cache = HelmRepoManager.cache
|
||||
this.repo = repo
|
||||
|
||||
@ -1,28 +1,51 @@
|
||||
import fs from "fs";
|
||||
import logger from "../logger";
|
||||
import * as yaml from "js-yaml";
|
||||
import yaml from "js-yaml";
|
||||
import { readFile } from "fs-extra";
|
||||
import { promiseExec } from "../promise-exec";
|
||||
import { helmCli } from "./helm-cli";
|
||||
import { Singleton } from "../../common/utils/singleton";
|
||||
import { customRequestPromise } from "../../common/request";
|
||||
import orderBy from "lodash/orderBy";
|
||||
import logger from "../logger";
|
||||
|
||||
export type HelmEnv = Record<string, string> & {
|
||||
HELM_REPOSITORY_CACHE?: string;
|
||||
HELM_REPOSITORY_CONFIG?: string;
|
||||
}
|
||||
|
||||
export type HelmRepo = {
|
||||
export interface HelmRepoConfig {
|
||||
repositories: HelmRepo[]
|
||||
}
|
||||
|
||||
export interface HelmRepo {
|
||||
name: string;
|
||||
url: string;
|
||||
cacheFilePath?: string;
|
||||
cacheFilePath?: string
|
||||
caFile?: string,
|
||||
certFile?: string,
|
||||
insecure_skip_tls_verify?: boolean,
|
||||
keyFile?: string,
|
||||
username?: string,
|
||||
password?: string,
|
||||
}
|
||||
|
||||
export class HelmRepoManager extends Singleton {
|
||||
static cache = {}
|
||||
static cache = {} // todo: remove implicit updates in helm-chart-manager.ts
|
||||
|
||||
protected repos: HelmRepo[];
|
||||
protected helmEnv: HelmEnv
|
||||
protected initialized: boolean
|
||||
|
||||
public async init() {
|
||||
async loadAvailableRepos(): Promise<HelmRepo[]> {
|
||||
const res = await customRequestPromise({
|
||||
uri: "https://hub.helm.sh/assets/js/repos.json",
|
||||
json: true,
|
||||
resolveWithFullResponse: true,
|
||||
timeout: 10000,
|
||||
});
|
||||
return orderBy<HelmRepo>(res.body.data, repo => repo.name);
|
||||
}
|
||||
|
||||
async init() {
|
||||
await helmCli.ensureBinary();
|
||||
if (!this.initialized) {
|
||||
this.helmEnv = await this.parseHelmEnv()
|
||||
@ -47,60 +70,57 @@ export class HelmRepoManager extends Singleton {
|
||||
return env
|
||||
}
|
||||
|
||||
public async repositories(): Promise<Array<HelmRepo>> {
|
||||
public async repositories(): Promise<HelmRepo[]> {
|
||||
if (!this.initialized) {
|
||||
await this.init()
|
||||
}
|
||||
const repositoryFilePath = this.helmEnv.HELM_REPOSITORY_CONFIG
|
||||
const repoFile = await fs.promises.readFile(repositoryFilePath, 'utf8').catch(async (error) => {
|
||||
return null
|
||||
})
|
||||
if (!repoFile) {
|
||||
await this.addRepo({ name: "stable", url: "https://kubernetes-charts.storage.googleapis.com/" })
|
||||
return await this.repositories()
|
||||
}
|
||||
try {
|
||||
const repositories = yaml.safeLoad(repoFile)
|
||||
const result = repositories['repositories'].map((repository: HelmRepo) => {
|
||||
return {
|
||||
name: repository.name,
|
||||
url: repository.url,
|
||||
cacheFilePath: `${this.helmEnv.HELM_REPOSITORY_CACHE}/${repository['name']}-index.yaml`
|
||||
}
|
||||
});
|
||||
if (result.length == 0) {
|
||||
await this.addRepo({ name: "stable", url: "https://kubernetes-charts.storage.googleapis.com/" })
|
||||
return await this.repositories()
|
||||
const repoConfigFile = this.helmEnv.HELM_REPOSITORY_CONFIG;
|
||||
const { repositories }: HelmRepoConfig = await readFile(repoConfigFile, 'utf8')
|
||||
.then((yamlContent: string) => yaml.safeLoad(yamlContent))
|
||||
.catch(() => ({
|
||||
repositories: []
|
||||
}));
|
||||
if (!repositories.length) {
|
||||
await this.addRepo({ name: "stable", url: "https://kubernetes-charts.storage.googleapis.com/" });
|
||||
return await this.repositories();
|
||||
}
|
||||
return result
|
||||
return repositories.map(repo => ({
|
||||
...repo,
|
||||
cacheFilePath: `${this.helmEnv.HELM_REPOSITORY_CACHE}/${repo.name}-index.yaml`
|
||||
}));
|
||||
} catch (error) {
|
||||
logger.debug(error)
|
||||
logger.error(`[HELM]: repositories listing error "${error}"`)
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
public async repository(name: string) {
|
||||
const repositories = await this.repositories()
|
||||
return repositories.find((repo: HelmRepo) => {
|
||||
return repo.name == name
|
||||
})
|
||||
return repositories.find(repo => repo.name == name);
|
||||
}
|
||||
|
||||
public async update() {
|
||||
const helm = await helmCli.binaryPath()
|
||||
logger.debug(`${helm} repo update`)
|
||||
|
||||
const { stdout } = await promiseExec(`"${helm}" repo update`).catch((error) => {
|
||||
return { stdout: error.stdout }
|
||||
})
|
||||
return stdout
|
||||
}
|
||||
|
||||
public async addRepo(repository: HelmRepo) {
|
||||
public async addRepo({ name, url }: HelmRepo) {
|
||||
logger.info(`[HELM]: adding repo "${name}" from ${url}`);
|
||||
const helm = await helmCli.binaryPath()
|
||||
logger.debug(`${helm} repo add ${repository.name} ${repository.url}`)
|
||||
const { stdout } = await promiseExec(`"${helm}" repo add ${name} ${url}`).catch((error) => {
|
||||
throw(error.stderr)
|
||||
})
|
||||
return stdout
|
||||
}
|
||||
|
||||
const { stdout } = await promiseExec(`"${helm}" repo add ${repository.name} ${repository.url}`).catch((error) => {
|
||||
public async removeRepo({ name, url }: HelmRepo): Promise<string> {
|
||||
logger.info(`[HELM]: removing repo "${name}" from ${url}`);
|
||||
const helm = await helmCli.binaryPath()
|
||||
const { stdout, stderr } = await promiseExec(`"${helm}" repo remove ${name}`).catch((error) => {
|
||||
throw(error.stderr)
|
||||
})
|
||||
return stdout
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
import { app, remote } from "electron"
|
||||
import path from "path"
|
||||
import fs from "fs"
|
||||
import request from "request"
|
||||
import { promiseExec} from "./promise-exec"
|
||||
import { promiseExec } from "./promise-exec"
|
||||
import logger from "./logger"
|
||||
import { ensureDir, pathExists } from "fs-extra"
|
||||
import { globalRequestOpts } from "../common/request"
|
||||
import * as lockFile from "proper-lockfile"
|
||||
import { helmCli } from "./helm/helm-cli"
|
||||
import { userStore } from "../common/user-store"
|
||||
import { getBundledKubectlVersion} from "../common/utils/app-version"
|
||||
import { customRequest } from "../common/request";
|
||||
import { getBundledKubectlVersion } from "../common/utils/app-version"
|
||||
import { isDevelopment, isWindows } from "../common/vars";
|
||||
|
||||
const bundledVersion = getBundledKubectlVersion()
|
||||
const kubectlMap: Map<string, string> = new Map([
|
||||
@ -32,18 +32,18 @@ const packageMirrors: Map<string, string> = new Map([
|
||||
["china", "https://mirror.azure.cn/kubernetes/kubectl"]
|
||||
])
|
||||
|
||||
let bundledPath: string
|
||||
const initScriptVersionString = "# lens-initscript v3\n"
|
||||
|
||||
const isDevelopment = process.env.NODE_ENV !== "production"
|
||||
let bundledPath: string = null
|
||||
|
||||
if(isDevelopment) {
|
||||
if (isDevelopment) {
|
||||
bundledPath = path.join(process.cwd(), "binaries", "client", process.platform, process.arch, "kubectl")
|
||||
} else {
|
||||
bundledPath = path.join(process.resourcesPath, process.arch, "kubectl")
|
||||
}
|
||||
|
||||
if(process.platform === "win32") bundledPath = `${bundledPath}.exe`
|
||||
if (isWindows) {
|
||||
bundledPath = `${bundledPath}.exe`
|
||||
}
|
||||
|
||||
export class Kubectl {
|
||||
public kubectlVersion: string
|
||||
@ -52,7 +52,7 @@ export class Kubectl {
|
||||
protected path: string
|
||||
protected dirname: string
|
||||
|
||||
static get kubectlDir(){
|
||||
static get kubectlDir() {
|
||||
return path.join((app || remote.app).getPath("userData"), "binaries", "kubectl")
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ export class Kubectl {
|
||||
|
||||
// Returns the single bundled Kubectl instance
|
||||
public static bundled() {
|
||||
if(!Kubectl.bundledInstance) Kubectl.bundledInstance = new Kubectl(Kubectl.bundledKubectlVersion)
|
||||
if (!Kubectl.bundledInstance) Kubectl.bundledInstance = new Kubectl(Kubectl.bundledKubectlVersion)
|
||||
return Kubectl.bundledInstance
|
||||
}
|
||||
|
||||
@ -71,7 +71,7 @@ export class Kubectl {
|
||||
const minorVersion = versionParts[1]
|
||||
/* minorVersion is the first two digits of kube server version
|
||||
if the version map includes that, use that version, if not, fallback to the exact x.y.z of kube version */
|
||||
if(kubectlMap.has(minorVersion)) {
|
||||
if (kubectlMap.has(minorVersion)) {
|
||||
this.kubectlVersion = kubectlMap.get(minorVersion)
|
||||
logger.debug("Set kubectl version " + this.kubectlVersion + " for cluster version " + clusterVersion + " using version map")
|
||||
} else {
|
||||
@ -81,16 +81,16 @@ export class Kubectl {
|
||||
|
||||
let arch = null
|
||||
|
||||
if(process.arch == "x64") {
|
||||
if (process.arch == "x64") {
|
||||
arch = "amd64"
|
||||
} else if(process.arch == "x86" || process.arch == "ia32") {
|
||||
} else if (process.arch == "x86" || process.arch == "ia32") {
|
||||
arch = "386"
|
||||
} else {
|
||||
arch = process.arch
|
||||
}
|
||||
|
||||
const platformName = process.platform === "win32" ? "windows" : process.platform
|
||||
const binaryName = process.platform === "win32" ? "kubectl.exe" : "kubectl"
|
||||
const platformName = isWindows ? "windows" : process.platform
|
||||
const binaryName = isWindows ? "kubectl.exe" : "kubectl"
|
||||
|
||||
this.url = `${this.getDownloadMirror()}/v${this.kubectlVersion}/bin/${platformName}/${arch}/${binaryName}`
|
||||
|
||||
@ -102,7 +102,7 @@ export class Kubectl {
|
||||
try {
|
||||
await this.ensureKubectl()
|
||||
return this.path
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
logger.error("Failed to ensure kubectl, fallback to the bundled version")
|
||||
logger.error(err)
|
||||
return Kubectl.bundledKubectlPath
|
||||
@ -113,7 +113,7 @@ export class Kubectl {
|
||||
try {
|
||||
await this.ensureKubectl()
|
||||
return this.dirname
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
logger.error(err)
|
||||
return ""
|
||||
}
|
||||
@ -138,8 +138,7 @@ export class Kubectl {
|
||||
return true
|
||||
}
|
||||
logger.error(`Local kubectl is version ${version}, expected ${this.kubectlVersion}, unlinking`)
|
||||
}
|
||||
catch(err) {
|
||||
} catch (err) {
|
||||
logger.error(`Local kubectl failed to run properly (${err.message}), unlinking`)
|
||||
}
|
||||
await fs.promises.unlink(this.path)
|
||||
@ -148,7 +147,7 @@ export class Kubectl {
|
||||
}
|
||||
|
||||
protected async checkBundled(): Promise<boolean> {
|
||||
if(this.kubectlVersion === Kubectl.bundledKubectlVersion) {
|
||||
if (this.kubectlVersion === Kubectl.bundledKubectlVersion) {
|
||||
try {
|
||||
const exist = await pathExists(this.path)
|
||||
if (!exist) {
|
||||
@ -156,7 +155,7 @@ export class Kubectl {
|
||||
await fs.promises.chmod(this.path, 0o755)
|
||||
}
|
||||
return true
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
logger.error("Could not copy the bundled kubectl to app-data: " + err)
|
||||
return false
|
||||
}
|
||||
@ -171,10 +170,15 @@ export class Kubectl {
|
||||
logger.debug(`Acquired a lock for ${this.kubectlVersion}`)
|
||||
const bundled = await this.checkBundled()
|
||||
const isValid = await this.checkBinary(!bundled)
|
||||
if(!isValid) {
|
||||
await this.downloadKubectl().catch((error) => { logger.error(error) });
|
||||
if (!isValid) {
|
||||
await this.downloadKubectl().catch((error) => {
|
||||
logger.error(error)
|
||||
});
|
||||
}
|
||||
await this.writeInitScripts().catch((error) => { logger.error("Failed to write init scripts"); logger.error(error) })
|
||||
await this.writeInitScripts().catch((error) => {
|
||||
logger.error("Failed to write init scripts");
|
||||
logger.error(error)
|
||||
})
|
||||
logger.debug(`Releasing lock for ${this.kubectlVersion}`)
|
||||
release()
|
||||
return true
|
||||
@ -190,10 +194,10 @@ export class Kubectl {
|
||||
|
||||
logger.info(`Downloading kubectl ${this.kubectlVersion} from ${this.url} to ${this.path}`)
|
||||
return new Promise((resolve, reject) => {
|
||||
const stream = request({
|
||||
const stream = customRequest({
|
||||
url: this.url,
|
||||
gzip: true,
|
||||
...this.getRequestOpts()
|
||||
})
|
||||
});
|
||||
const file = fs.createWriteStream(this.path)
|
||||
stream.on("complete", () => {
|
||||
logger.debug("kubectl binary download finished")
|
||||
@ -215,7 +219,7 @@ export class Kubectl {
|
||||
|
||||
protected async scriptIsLatest(scriptPath: string) {
|
||||
const scriptExists = await pathExists(scriptPath)
|
||||
if(!scriptExists) return false
|
||||
if (!scriptExists) return false
|
||||
|
||||
try {
|
||||
const filehandle = await fs.promises.open(scriptPath, 'r')
|
||||
@ -234,7 +238,7 @@ export class Kubectl {
|
||||
const fsPromises = fs.promises;
|
||||
const bashScriptPath = path.join(this.dirname, '.bash_set_path')
|
||||
const bashScriptIsLatest = await this.scriptIsLatest(bashScriptPath)
|
||||
if(!bashScriptIsLatest) {
|
||||
if (!bashScriptIsLatest) {
|
||||
let bashScript = "" + initScriptVersionString
|
||||
bashScript += "tempkubeconfig=\"$KUBECONFIG\"\n"
|
||||
bashScript += "test -f \"/etc/profile\" && . \"/etc/profile\"\n"
|
||||
@ -253,7 +257,7 @@ export class Kubectl {
|
||||
|
||||
const zshScriptPath = path.join(this.dirname, '.zlogin')
|
||||
const zshScriptIsLatest = await this.scriptIsLatest(zshScriptPath)
|
||||
if(!zshScriptIsLatest) {
|
||||
if (!zshScriptIsLatest) {
|
||||
let zshScript = "" + initScriptVersionString
|
||||
|
||||
zshScript += "tempkubeconfig=\"$KUBECONFIG\"\n"
|
||||
@ -280,12 +284,6 @@ export class Kubectl {
|
||||
}
|
||||
}
|
||||
|
||||
protected getRequestOpts() {
|
||||
return globalRequestOpts({
|
||||
url: this.url
|
||||
})
|
||||
}
|
||||
|
||||
protected getDownloadMirror() {
|
||||
const mirror = packageMirrors.get(userStore.preferences.downloadMirror)
|
||||
if (mirror) {
|
||||
|
||||
@ -1,259 +0,0 @@
|
||||
<template>
|
||||
<div class="content">
|
||||
<ClosePageButton />
|
||||
<div class="container-fluid lens-preferences">
|
||||
<div class="header sticky-top">
|
||||
<h2>Preferences</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-3" />
|
||||
<div ref="content" class="global-settings col-6">
|
||||
<h2>Color Theme</h2>
|
||||
|
||||
<b-form-group
|
||||
label="Cluster Color theme:"
|
||||
label-for="input-color-theme"
|
||||
>
|
||||
<b-form-select
|
||||
id="input-color-theme"
|
||||
v-model="preferences.colorTheme"
|
||||
@change="onSave"
|
||||
:options="colorThemeOptions"
|
||||
/>
|
||||
</b-form-group>
|
||||
</div>
|
||||
<div class="col-3" />
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-3" />
|
||||
<div ref="content" class="global-settings col-6">
|
||||
<h2>Download Mirror</h2>
|
||||
|
||||
<b-form-group
|
||||
label="Download mirror for kubectl:"
|
||||
label-for="input-download-mirror"
|
||||
>
|
||||
<b-form-select
|
||||
id="input-download-mirror"
|
||||
v-model="preferences.downloadMirror"
|
||||
@change="onSave"
|
||||
:options="downloadMirrorOptions"
|
||||
/>
|
||||
</b-form-group>
|
||||
</div>
|
||||
<div class="col-3" />
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-3" />
|
||||
<div ref="content" class="global-settings col-6">
|
||||
<h2>Helm</h2>
|
||||
|
||||
<b-form-group
|
||||
label="Repositories:"
|
||||
label-for="textarea-helm-repositories"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-select
|
||||
:options="hubRepositories"
|
||||
v-model="selectedHubRepo"
|
||||
>
|
||||
<template v-slot:first>
|
||||
<option value="">
|
||||
Select Helm repository
|
||||
</option>
|
||||
</template>
|
||||
</b-form-select>
|
||||
<b-input-group-append>
|
||||
<b-button :disabled="!selectedHubRepo" @click="addHubRepo" variant="primary">
|
||||
Add <b-spinner small v-if="isHelmProcessing" label="Small Spinner" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
<b-list-group>
|
||||
<b-list-group-item v-for="repo in helmRepos" :key="repo.name">
|
||||
<span v-b-tooltip.hover v-b-tooltip.right :title="repo.url">{{ repo.name }}</span>
|
||||
<button @click="removeRepo(repo)" :data-repo="repo.name" class="close">
|
||||
<i class="material-icons">delete</i>
|
||||
</button>
|
||||
</b-list-group-item>
|
||||
</b-list-group>
|
||||
</div>
|
||||
<div class="col-3" />
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-3" />
|
||||
<div ref="content" class="global-settings col-6">
|
||||
<h2>HTTP Proxy</h2>
|
||||
|
||||
<b-form-group
|
||||
label="Proxy URL:"
|
||||
label-for="input-https-proxy"
|
||||
description="Proxy is used only for non-cluster communication."
|
||||
>
|
||||
<b-form-input
|
||||
id="input-https-proxy"
|
||||
v-model="preferences.httpsProxy"
|
||||
trim
|
||||
@blur="onSave"
|
||||
placeholder="Type HTTP proxy url (example: http://proxy.acme.org:8080)"
|
||||
/>
|
||||
</b-form-group>
|
||||
<h2>Certificate Trust</h2>
|
||||
<b-form-group
|
||||
label-for="checkbox-allow-untrusted-cas"
|
||||
description="This will make Lens to trust ANY certificate authority without any validations. Needed with some corporate proxies that do certificate re-writing. Does not affect cluster communications!"
|
||||
>
|
||||
<b-form-checkbox
|
||||
id="checkbox-allow-untrusted-cas"
|
||||
switch
|
||||
v-model="preferences.allowUntrustedCAs"
|
||||
@input="onSave"
|
||||
>
|
||||
Allow untrusted Certificate Authorities
|
||||
</b-form-checkbox>
|
||||
</b-form-group>
|
||||
<h2>Telemetry & Usage Tracking</h2>
|
||||
<b-form-group
|
||||
label-for="checkbox-allow-telemetry"
|
||||
description="Telemetry & usage data is collected to continuously improve the Lens experience."
|
||||
>
|
||||
<b-form-checkbox
|
||||
id="checkbox-allow-telemetry"
|
||||
switch
|
||||
v-model="preferences.allowTelemetry"
|
||||
@input="onSave"
|
||||
>
|
||||
Allow telemetry & usage tracking
|
||||
</b-form-checkbox>
|
||||
</b-form-group>
|
||||
</div>
|
||||
<div class="col-3" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import request from 'request-promise-native'
|
||||
import { globalRequestOpts } from "../../../common/request"
|
||||
import ClosePageButton from "@/_vue/components/common/ClosePageButton";
|
||||
|
||||
export default {
|
||||
name: 'PreferencesPage',
|
||||
components: {
|
||||
ClosePageButton
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
hubRepositories: [],
|
||||
selectedHubRepo: "",
|
||||
colorThemeOptions: [
|
||||
{ value: "dark", text: "Dark" },
|
||||
{ value: "light", text: "Light" },
|
||||
],
|
||||
downloadMirrorOptions: [
|
||||
{ value: "default", text: "Default (Google)" },
|
||||
{ value: "china", text: "China (Azure)" },
|
||||
],
|
||||
isHelmProcessing: null,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
helmRepos: function() {
|
||||
return this.$store.getters.repos;
|
||||
},
|
||||
preferences: function() {
|
||||
return this.$store.getters.preferences;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
onSave: function() {
|
||||
this.$store.commit("savePreferences", this.preferences);
|
||||
},
|
||||
request: async function(opts) {
|
||||
const o = Object.assign({
|
||||
timeout: 10000,
|
||||
headers: {},
|
||||
resolveWithFullResponse: true,
|
||||
json: true
|
||||
}, globalRequestOpts(opts))
|
||||
|
||||
return await request(o)
|
||||
},
|
||||
repoCompare: function( a, b ) {
|
||||
if ( a.name < b.name ){
|
||||
return -1;
|
||||
}
|
||||
if ( a.name > b.name ){
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
addHubRepo: async function() {
|
||||
if(!this.selectedHubRepo || this.selectedHubRepo === "") {
|
||||
return
|
||||
}
|
||||
this.isHelmProcessing = true
|
||||
const [name, url ] = this.selectedHubRepo.split("|")
|
||||
await this.$store.dispatch('addHelmRepo', { name, url })
|
||||
this.selectedHubRepo = ""
|
||||
this.isHelmProcessing = false
|
||||
},
|
||||
removeRepo: async function(repo) {
|
||||
await this.$store.dispatch('removeHelmRepo', repo)
|
||||
},
|
||||
loadHubRepositories: async function() {
|
||||
const res = await this.request({ uri: "https://hub.helm.sh/assets/js/repos.json"}).catch((error) => { this.hubRepositories = [] })
|
||||
this.hubRepositories = res.body.data.sort(this.repoCompare).map((repo) => {
|
||||
return {
|
||||
text: repo.name,
|
||||
value: repo.name+"|"+repo.url
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$store.dispatch('refreshHelmRepos')
|
||||
},
|
||||
mounted: async function() {
|
||||
this.$store.commit("hideMenu");
|
||||
this.loadHubRepositories()
|
||||
},
|
||||
destroyed: function() {
|
||||
this.$store.commit("showMenu");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#app > .main-view > .content {
|
||||
left: 70px;
|
||||
}
|
||||
.lens-preferences {
|
||||
height: 100%;
|
||||
overflow-y: scroll;
|
||||
& input {
|
||||
background-color: #252729 !important;
|
||||
border: 0px !important;
|
||||
color: #87909c !important;
|
||||
}
|
||||
.header {
|
||||
padding-top: 15px;
|
||||
}
|
||||
.close {
|
||||
text-shadow: none;
|
||||
}
|
||||
.list-group-item {
|
||||
background-color: #252729 !important;
|
||||
color: #87909c !important;
|
||||
}
|
||||
& i {
|
||||
color: #87909c !important;
|
||||
}
|
||||
}
|
||||
|
||||
.global-settings {
|
||||
padding-top: 0.75em;
|
||||
}
|
||||
</style>
|
||||
@ -1,9 +1,23 @@
|
||||
.Preferences {
|
||||
--flex-gap: #{$padding};
|
||||
|
||||
h2 {
|
||||
&:not(:first-child) {
|
||||
margin-top: $padding * 3;
|
||||
}
|
||||
}
|
||||
|
||||
.info-block {
|
||||
--flex-gap: #{$padding};
|
||||
}
|
||||
|
||||
.repos {
|
||||
--flex-gap: #{$padding};
|
||||
|
||||
> .title {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.Badge {
|
||||
margin: $padding / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,45 +1,121 @@
|
||||
import "./preferences.scss"
|
||||
import React, { Fragment } from "react";
|
||||
import { observer } from "mobx-react";
|
||||
import { action, computed, observable } from "mobx";
|
||||
import { t, Trans } from "@lingui/macro";
|
||||
import { _i18n } from "../../i18n";
|
||||
import { WizardLayout } from "../layout/wizard-layout";
|
||||
import { Icon } from "../icon";
|
||||
import { Select, SelectOption } from "../select";
|
||||
import { ThemeType, userStore } from "../../../common/user-store";
|
||||
import { userStore } from "../../../common/user-store";
|
||||
import { HelmRepo, repoManager } from "../../../main/helm/helm-repo-manager";
|
||||
import { Input } from "../input";
|
||||
import { Checkbox } from "../checkbox";
|
||||
|
||||
type ThemeSelectOption = SelectOption & { type: ThemeType }
|
||||
import { Notifications } from "../notifications";
|
||||
import { Badge } from "../badge";
|
||||
import { Spinner } from "../spinner";
|
||||
|
||||
@observer
|
||||
export class Preferences extends React.Component {
|
||||
themeOptions: ThemeSelectOption[] = [
|
||||
{ value: "kontena-dark", label: <Trans>Dark</Trans>, type: ThemeType.DARK },
|
||||
{ value: "kontena-light", label: <Trans>Light</Trans>, type: ThemeType.LIGHT },
|
||||
@observable helmLoading = false;
|
||||
@observable helmUpdating = false;
|
||||
@observable helmRepos: HelmRepo[] = [];
|
||||
@observable helmAddedRepos = observable.map<string, HelmRepo>();
|
||||
|
||||
@observable themeOptions: SelectOption<string>[] = [
|
||||
{ value: "kontena-dark", label: <Trans>Dark</Trans> },
|
||||
{ value: "kontena-light", label: <Trans>Light</Trans> },
|
||||
]
|
||||
|
||||
downloadMirrorOptions: SelectOption[] = [
|
||||
@observable downloadMirrorOptions: SelectOption<string>[] = [
|
||||
{ value: "default", label: "Default (Google)" },
|
||||
{ value: "china", label: "China (Azure)" },
|
||||
]
|
||||
|
||||
onThemeChange = ({ value }: ThemeSelectOption) => {
|
||||
@computed get helmOptions(): SelectOption<HelmRepo>[] {
|
||||
return this.helmRepos.map(repo => ({
|
||||
value: repo,
|
||||
label: repo.name,
|
||||
}))
|
||||
}
|
||||
|
||||
async componentDidMount() {
|
||||
await this.loadHelmRepos();
|
||||
}
|
||||
|
||||
@action
|
||||
async loadHelmRepos() {
|
||||
this.helmLoading = true;
|
||||
try {
|
||||
if (!this.helmRepos.length) {
|
||||
this.helmRepos = await repoManager.loadAvailableRepos(); // via https://helm.sh
|
||||
}
|
||||
const repos = await repoManager.repositories(); // via helm-cli
|
||||
this.helmAddedRepos.clear();
|
||||
repos.forEach(repo => this.helmAddedRepos.set(repo.name, repo));
|
||||
} catch (err) {
|
||||
Notifications.error(err);
|
||||
}
|
||||
this.helmLoading = false;
|
||||
}
|
||||
|
||||
async addRepo(repo: HelmRepo) {
|
||||
try {
|
||||
await repoManager.addRepo(repo);
|
||||
this.helmAddedRepos.set(repo.name, repo);
|
||||
} catch (err) {
|
||||
Notifications.error(<Trans>Adding helm branch <b>{repo.name}</b> has failed: {String(err)}</Trans>)
|
||||
}
|
||||
}
|
||||
|
||||
async removeRepo(repo: HelmRepo) {
|
||||
try {
|
||||
await repoManager.removeRepo(repo);
|
||||
this.helmAddedRepos.delete(repo.name);
|
||||
} catch (err) {
|
||||
Notifications.error(
|
||||
<Trans>Removing helm branch <b>{repo.name}</b> has failed: {String(err)}</Trans>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
onThemeChange = ({ value }: SelectOption<string>) => {
|
||||
// themeStore.setTheme(value); // fixme: apply theme on the fly for current view
|
||||
userStore.preferences.colorTheme = value;
|
||||
}
|
||||
|
||||
onRepoSelect = async ({ value: repo }: SelectOption<HelmRepo>) => {
|
||||
const isAdded = this.helmAddedRepos.has(repo.name);
|
||||
if (isAdded) {
|
||||
Notifications.ok(<Trans>Helm branch <b>{repo.name}</b> already in use</Trans>)
|
||||
return;
|
||||
}
|
||||
this.helmUpdating = false;
|
||||
await this.addRepo(repo);
|
||||
this.helmUpdating = false;
|
||||
}
|
||||
|
||||
formatHelmOptionLabel = ({ value: repo }: SelectOption<HelmRepo>) => {
|
||||
const isAdded = this.helmAddedRepos.has(repo.name);
|
||||
return (
|
||||
<div className="flex gaps">
|
||||
<span>{repo.name}</span>
|
||||
{isAdded && <Icon small material="check" className="box right"/>}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
renderInfo() {
|
||||
return (
|
||||
<Fragment>
|
||||
<h2>
|
||||
<Trans>Preferences</Trans>
|
||||
</h2>
|
||||
<div className="info-block flex gaps align-center">
|
||||
<div className="info-block flex gaps align-flex-start">
|
||||
<Icon small material="info"/>
|
||||
<small>
|
||||
<p>
|
||||
<Trans>Lens Global Settings</Trans> (<Trans>applicable to all clusters</Trans>)
|
||||
</small>
|
||||
</p>
|
||||
</div>
|
||||
</Fragment>
|
||||
)
|
||||
@ -58,15 +134,41 @@ export class Preferences extends React.Component {
|
||||
|
||||
<h2><Trans>Download Mirror</Trans></h2>
|
||||
<Select
|
||||
placeholder={_i18n._(t`Download mirror for kubectl`)}
|
||||
placeholder={<Trans>Download mirror for kubectl</Trans>}
|
||||
options={this.downloadMirrorOptions}
|
||||
value={preferences.downloadMirror}
|
||||
onChange={({ value }: SelectOption) => preferences.downloadMirror = value}
|
||||
/>
|
||||
|
||||
<h2><Trans>Helm</Trans></h2>
|
||||
<div className="helm">
|
||||
// todo: added helm repos
|
||||
<Select
|
||||
placeholder={<Trans>Repositories</Trans>}
|
||||
isLoading={this.helmLoading}
|
||||
isDisabled={this.helmUpdating}
|
||||
options={this.helmOptions}
|
||||
onChange={this.onRepoSelect}
|
||||
formatOptionLabel={this.formatHelmOptionLabel}
|
||||
controlShouldRenderValue={false}
|
||||
/>
|
||||
<div className="repos flex gaps align-center">
|
||||
<div className="title">
|
||||
<Trans>Added repos:</Trans>
|
||||
</div>
|
||||
<div className="repos-list">
|
||||
{this.helmLoading && <Spinner/>}
|
||||
{Array.from(this.helmAddedRepos).map(([name, repo]) => {
|
||||
return (
|
||||
<Badge key={name} className="added-repo flex gaps align-center">
|
||||
<span className="repo">{name}</span>
|
||||
<Icon
|
||||
material="remove_circle_outline"
|
||||
onClick={() => this.removeRepo(repo)}
|
||||
tooltip={<Trans>Remove</Trans>}
|
||||
/>
|
||||
</Badge>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2><Trans>HTTP Proxy</Trans></h2>
|
||||
|
||||
@ -5,8 +5,8 @@ import { cssNames } from "../../utils/cssNames";
|
||||
import { TooltipDecoratorProps, withTooltip } from "../tooltip";
|
||||
|
||||
interface Props extends React.HTMLAttributes<any>, TooltipDecoratorProps {
|
||||
label: React.ReactNode;
|
||||
small?: boolean;
|
||||
label?: React.ReactNode;
|
||||
}
|
||||
|
||||
@withTooltip
|
||||
|
||||
@ -7,9 +7,13 @@
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 40%;
|
||||
|
||||
> .content-col {
|
||||
> * {
|
||||
@include hidden-scrollbar;
|
||||
--flex-gap: #{$spacing};
|
||||
padding: $spacing;
|
||||
}
|
||||
|
||||
> .content-col {
|
||||
margin-right: $spacing;
|
||||
background-color: var(--clusters-menu-bgc);
|
||||
border-radius: $radius;
|
||||
@ -22,9 +26,6 @@
|
||||
}
|
||||
|
||||
> .info-col {
|
||||
@include hidden-scrollbar;
|
||||
--flex-gap: #{$spacing};
|
||||
padding: $spacing;
|
||||
border-left: 1px solid #353a3e;
|
||||
}
|
||||
|
||||
|
||||
@ -1,126 +1,20 @@
|
||||
import { action, autorun, computed, observable, reaction } from "mobx";
|
||||
import { autobind, createStorage } from "./utils";
|
||||
import { Notifications } from "./components/notifications";
|
||||
|
||||
interface ITheme {
|
||||
name: string;
|
||||
type: "dark" | "light";
|
||||
author?: string;
|
||||
colors?: {
|
||||
[key: string]: string;
|
||||
blue: string;
|
||||
magenta: string;
|
||||
golden: string;
|
||||
halfGray: string;
|
||||
primary: string;
|
||||
textColorPrimary: string;
|
||||
textColorSecondary: string;
|
||||
textColorAccent: string;
|
||||
borderColor: string;
|
||||
borderFaintColor: string;
|
||||
mainBackground: string;
|
||||
contentColor: string;
|
||||
layoutBackground: string;
|
||||
layoutTabsBackground: string;
|
||||
layoutTabsActiveColor: string;
|
||||
layoutTabsLineColor: string;
|
||||
sidebarLogoBackground: string;
|
||||
sidebarActiveColor: string;
|
||||
sidebarSubmenuActiveColor: string;
|
||||
sidebarBackground: string;
|
||||
buttonPrimaryBackground: string;
|
||||
buttonDefaultBackground: string;
|
||||
buttonAccentBackground: string;
|
||||
buttonDisabledBackground: string;
|
||||
tableBgcStripe: string;
|
||||
tableBgcSelected: string;
|
||||
tableHeaderBackground: string;
|
||||
tableHeaderBorderWidth: string;
|
||||
tableHeaderBorderColor: string;
|
||||
tableHeaderColor: string;
|
||||
tableSelectedRowColor: string;
|
||||
helmLogoBackground: string;
|
||||
helmImgBackground: string;
|
||||
helmStableRepo: string;
|
||||
helmIncubatorRepo: string;
|
||||
helmDescriptionHr: string;
|
||||
helmDescriptionBlockqouteColor: string;
|
||||
helmDescriptionBlockqouteBorder: string;
|
||||
helmDescriptionBlockquoteBackground: string;
|
||||
helmDescriptionHeaders: string;
|
||||
helmDescriptionH6: string;
|
||||
helmDescriptionTdBorder: string;
|
||||
helmDescriptionTrBackground: string;
|
||||
helmDescriptionCodeBackground: string;
|
||||
helmDescriptionPreBackground: string;
|
||||
helmDescriptionPreColor: string;
|
||||
colorSuccess: string;
|
||||
colorOk: string;
|
||||
colorInfo: string;
|
||||
colorError: string;
|
||||
colorSoftError: string;
|
||||
colorWarning: string;
|
||||
colorVague: string;
|
||||
colorTerminated: string;
|
||||
dockHeadBackground: string;
|
||||
dockInfoBackground: string;
|
||||
dockInfoBorderColor: string;
|
||||
terminalBackground: string;
|
||||
terminalForeground: string;
|
||||
terminalCursor: string;
|
||||
terminalCursorAccent: string;
|
||||
terminalSelection: string;
|
||||
terminalBlack: string;
|
||||
terminalRed: string;
|
||||
terminalGreen: string;
|
||||
terminalYellow: string;
|
||||
terminalBlue: string;
|
||||
terminalMagenta: string;
|
||||
terminalCyan: string;
|
||||
terminalWhite: string;
|
||||
terminalBrightBlack: string;
|
||||
terminalBrightRed: string;
|
||||
terminalBrightGreen: string;
|
||||
terminalBrightYellow: string;
|
||||
terminalBrightBlue: string;
|
||||
terminalBrightMagenta: string;
|
||||
terminalBrightCyan: string;
|
||||
terminalBrightWhite: string;
|
||||
dialogTextColor: string;
|
||||
dialogBackground: string;
|
||||
dialogHeaderBackground: string;
|
||||
dialogFooterBackground: string;
|
||||
drawerTogglerBackground: string;
|
||||
drawerTitleText: string;
|
||||
drawerSubtitleBackground: string;
|
||||
drawerItemNameColor: string;
|
||||
drawerItemValueColor: string;
|
||||
boxShadow: string;
|
||||
iconActiveColor: string;
|
||||
iconActiveBackground: string;
|
||||
filterAreaBackground: string;
|
||||
chartLiveBarBackgound: string;
|
||||
chartStripesColor: string;
|
||||
chartCapacityColor: string;
|
||||
pieChartDefaultColor: string;
|
||||
selectOptionHoveredColor: string;
|
||||
lineProgressBackground: string;
|
||||
radioActiveBackground: string;
|
||||
};
|
||||
}
|
||||
import { Theme, ThemeType } from "../common/user-store";
|
||||
|
||||
@autobind()
|
||||
export class ThemeStore {
|
||||
protected style = document.createElement("style");
|
||||
|
||||
readonly defaultTheme: ITheme = {
|
||||
readonly defaultTheme: Theme = {
|
||||
name: "kontena-dark",
|
||||
type: "dark",
|
||||
colors: {} as any,
|
||||
type: ThemeType.DARK,
|
||||
colors: {},
|
||||
};
|
||||
|
||||
@observable activeThemeId = this.defaultTheme.name; // theme's filename without extension
|
||||
@observable themes = observable.map<string, ITheme>([], { deep: false });
|
||||
@observable themes = observable.map<string, Theme>([], { deep: false });
|
||||
|
||||
@computed get activeTheme() {
|
||||
return this.themes.get(this.activeThemeId) || this.defaultTheme;
|
||||
@ -157,7 +51,7 @@ export class ThemeStore {
|
||||
})
|
||||
}
|
||||
|
||||
protected onChange = (theme: ITheme) => {
|
||||
protected onChange = (theme: Theme) => {
|
||||
let cssText = "\n"
|
||||
Object.entries(theme.colors).forEach(([propName, color]) => {
|
||||
cssText += `--${propName}: ${color} !important;\n`
|
||||
@ -165,12 +59,12 @@ export class ThemeStore {
|
||||
this.style.textContent = `:root {${cssText}} `;
|
||||
}
|
||||
|
||||
async load(themeId: string, { showErrorNotification = true } = {}): Promise<ITheme> {
|
||||
async load(themeId: string, { showErrorNotification = true } = {}): Promise<Theme> {
|
||||
if (this.themes.has(themeId)) {
|
||||
return this.themes.get(themeId);
|
||||
}
|
||||
try {
|
||||
const theme: ITheme = require( // eslint-disable-line @typescript-eslint/no-var-requires
|
||||
const theme: Theme = require( // eslint-disable-line @typescript-eslint/no-var-requires
|
||||
/* webpackMode: "lazy", webpackChunkName: "theme/[request]" */
|
||||
`./themes/${themeId}.json`
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user