@rancher/shell 0.5.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/images/providers/aks-black.svg +28 -0
  3. package/assets/images/providers/aks.svg +31 -0
  4. package/assets/styles/global/_labeled-input.scss +1 -0
  5. package/assets/styles/global/_layout.scss +0 -99
  6. package/assets/translations/en-us.yaml +76 -74
  7. package/assets/translations/zh-hans.yaml +25 -23
  8. package/babel.config.js +1 -7
  9. package/chart/gatekeeper.vue +11 -2
  10. package/chart/istio.vue +10 -1
  11. package/chart/logging/index.vue +11 -2
  12. package/chart/monitoring/alerting/index.vue +21 -7
  13. package/chart/monitoring/grafana/index.vue +2 -57
  14. package/chart/monitoring/index.vue +26 -52
  15. package/chart/monitoring/prometheus/index.vue +43 -37
  16. package/chart/rancher-backup/index.vue +10 -3
  17. package/cloud-credential/azure.vue +17 -4
  18. package/components/AsyncButton.vue +0 -9
  19. package/components/Carousel.vue +0 -1
  20. package/components/ChartPsp.vue +76 -0
  21. package/components/ClusterIconMenu.vue +9 -24
  22. package/components/CodeMirror.vue +16 -75
  23. package/components/CopyCode.vue +2 -6
  24. package/components/CopyToClipboard.vue +1 -2
  25. package/components/CopyToClipboardText.vue +9 -14
  26. package/components/CruResource.vue +0 -1
  27. package/components/EtcdInfoBanner.vue +5 -5
  28. package/components/ExplorerProjectsNamespaces.vue +1 -25
  29. package/components/FixedBanner.vue +0 -1
  30. package/components/IconOrSvg.vue +1 -1
  31. package/components/Markdown.vue +12 -16
  32. package/components/Questions/index.vue +1 -1
  33. package/components/ResourceDetail/Masthead.vue +9 -25
  34. package/components/ResourceDetail/index.vue +4 -1
  35. package/components/ResourceList/Masthead.vue +18 -1
  36. package/components/ResourceTable.vue +2 -14
  37. package/components/ResourceYaml.vue +5 -34
  38. package/components/SideNav.vue +65 -43
  39. package/components/SortableTable/THead.vue +9 -7
  40. package/components/SortableTable/index.vue +2 -1
  41. package/components/StatusTable.vue +1 -5
  42. package/components/TabTitle.vue +84 -0
  43. package/components/Tabbed/index.vue +0 -12
  44. package/components/YamlEditor.vue +0 -1
  45. package/components/__tests__/ChartPsp.test.ts +75 -0
  46. package/components/__tests__/CopyCode.test.ts +4 -5
  47. package/components/fleet/FleetBundles.vue +11 -5
  48. package/components/fleet/FleetRepos.vue +27 -62
  49. package/components/fleet/FleetResources.vue +1 -6
  50. package/components/fleet/FleetStatus.vue +3 -3
  51. package/components/fleet/FleetSummary.vue +30 -35
  52. package/components/form/ArrayList.vue +8 -1
  53. package/components/form/ArrayListSelect.vue +9 -9
  54. package/components/form/BannerSettings.vue +0 -3
  55. package/components/form/FileSelector.vue +0 -1
  56. package/components/form/KeyValue.vue +0 -2
  57. package/components/form/LabeledSelect.vue +0 -4
  58. package/components/form/Password.vue +1 -3
  59. package/components/form/Select.vue +1 -1
  60. package/components/form/SelectOrCreateAuthSecret.vue +4 -4
  61. package/components/form/__tests__/KeyValue.test.ts +1 -1
  62. package/components/formatter/Checked.vue +3 -11
  63. package/components/formatter/ClusterProvider.vue +18 -1
  64. package/components/formatter/FleetSummaryGraph.vue +11 -23
  65. package/components/formatter/LiveDate.vue +16 -0
  66. package/components/formatter/LiveDuration.vue +1 -1
  67. package/components/formatter/PercentageBar.vue +1 -1
  68. package/components/formatter/WorkloadDetailEndpoints.vue +22 -12
  69. package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
  70. package/components/nav/Group.vue +2 -2
  71. package/components/nav/Header.vue +2 -2
  72. package/components/nav/Jump.vue +9 -19
  73. package/components/nav/TopLevelMenu.vue +18 -66
  74. package/components/nav/Type.vue +7 -16
  75. package/components/nav/WindowManager/ContainerLogs.vue +19 -120
  76. package/components/nav/WindowManager/ContainerShell.vue +1 -6
  77. package/components/nav/WindowManager/index.vue +10 -11
  78. package/components/nav/__tests__/TopLevelMenu.test.ts +1 -34
  79. package/components/nav/__tests__/Type.test.ts +1 -31
  80. package/components/nuxt/nuxt-child.js +78 -14
  81. package/components/nuxt/nuxt.js +1 -1
  82. package/components/user.retention/user-retention-header.vue +34 -0
  83. package/composables/useI18n.ts +26 -0
  84. package/composables/useStore.ts +16 -0
  85. package/config/harvester-manager-types.js +0 -2
  86. package/config/home-links.js +32 -2
  87. package/config/private-label.js +0 -22
  88. package/config/product/explorer.js +4 -4
  89. package/config/product/fleet.js +1 -6
  90. package/config/product/legacy.js +1 -84
  91. package/config/product/manager.js +15 -8
  92. package/config/query-params.js +0 -1
  93. package/config/router.js +368 -385
  94. package/config/settings.ts +9 -2
  95. package/config/store.js +1 -1
  96. package/config/system-namespaces.js +0 -3
  97. package/config/table-headers.js +27 -47
  98. package/config/types.js +5 -0
  99. package/config/uiplugins.js +1 -1
  100. package/core/plugin-helpers.js +5 -3
  101. package/core/plugin-routes.ts +114 -56
  102. package/core/plugin.ts +10 -16
  103. package/core/plugins-loader.js +9 -7
  104. package/core/plugins.js +3 -0
  105. package/core/types-provisioning.ts +0 -7
  106. package/creators/app/init +0 -19
  107. package/detail/fleet.cattle.io.bundle.vue +1 -1
  108. package/detail/fleet.cattle.io.cluster.vue +1 -11
  109. package/detail/node.vue +0 -42
  110. package/detail/pod.vue +1 -68
  111. package/detail/provisioning.cattle.io.cluster.vue +8 -25
  112. package/detail/workload/index.vue +1 -15
  113. package/dialog/ScaleMachineDownDialog.vue +17 -34
  114. package/edit/auth/googleoauth.vue +5 -1
  115. package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
  116. package/edit/cloudcredential.vue +0 -2
  117. package/edit/fleet.cattle.io.gitrepo.vue +4 -3
  118. package/edit/management.cattle.io.project.vue +52 -1
  119. package/edit/management.cattle.io.setting.vue +2 -32
  120. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
  121. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -1
  122. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
  123. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
  124. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
  125. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  126. package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +125 -106
  127. package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
  128. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
  129. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
  130. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
  131. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  132. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
  133. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  134. package/edit/provisioning.cattle.io.cluster/index.vue +40 -109
  135. package/edit/provisioning.cattle.io.cluster/rke2.vue +689 -152
  136. package/edit/service.vue +0 -12
  137. package/edit/token.vue +0 -1
  138. package/edit/workload/Upgrading.vue +2 -3
  139. package/edit/workload/index.vue +1 -2
  140. package/edit/workload/mixins/workload.js +1 -1
  141. package/initialize/App.js +71 -25
  142. package/initialize/client.js +162 -21
  143. package/initialize/index.js +124 -47
  144. package/initialize/layouts.ts +26 -0
  145. package/{components/templates → layouts}/blank.vue +1 -1
  146. package/{components/templates → layouts}/default.vue +98 -8
  147. package/{components/templates → layouts}/error.vue +19 -10
  148. package/{components/templates → layouts}/home.vue +1 -4
  149. package/{components/templates → layouts}/plain.vue +1 -4
  150. package/{components/templates → layouts}/standalone.vue +1 -1
  151. package/{components/templates → layouts}/unauthenticated.vue +1 -1
  152. package/list/catalog.cattle.io.app.vue +0 -1
  153. package/list/management.cattle.io.feature.vue +7 -1
  154. package/list/management.cattle.io.setting.vue +0 -1
  155. package/list/management.cattle.io.user.vue +25 -1
  156. package/list/node.vue +0 -1
  157. package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
  158. package/machine-config/azure.vue +37 -21
  159. package/machine-config/vmwarevsphere.vue +47 -42
  160. package/middleware/authenticated.js +19 -14
  161. package/mixins/auth-config.js +7 -2
  162. package/mixins/brand.js +41 -29
  163. package/mixins/fetch.server.js +73 -0
  164. package/mixins/labeled-form-element.ts +1 -6
  165. package/models/__tests__/management.cattle.io.node.ts +0 -85
  166. package/models/__tests__/namespace.test.ts +9 -49
  167. package/models/cluster/node.js +4 -4
  168. package/models/cluster.x-k8s.io.machine.js +1 -1
  169. package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
  170. package/models/fleet.cattle.io.cluster.js +0 -4
  171. package/models/fleet.cattle.io.gitrepo.js +13 -56
  172. package/models/management.cattle.io.cluster.js +3 -11
  173. package/models/management.cattle.io.kontainerdriver.js +0 -1
  174. package/models/management.cattle.io.node.js +14 -18
  175. package/models/management.cattle.io.nodepool.js +0 -17
  176. package/models/management.cattle.io.project.js +36 -0
  177. package/models/management.cattle.io.setting.js +7 -11
  178. package/models/management.cattle.io.user.js +65 -0
  179. package/models/namespace.js +1 -1
  180. package/models/pod.js +0 -20
  181. package/models/provisioning.cattle.io.cluster.js +9 -91
  182. package/models/secret.js +18 -126
  183. package/models/storage.k8s.io.storageclass.js +1 -1
  184. package/models/workload.js +0 -16
  185. package/models/workload.service.js +0 -18
  186. package/package.json +10 -12
  187. package/pages/about.vue +1 -0
  188. package/pages/account/create-key.vue +1 -0
  189. package/pages/account/index.vue +1 -0
  190. package/pages/auth/login.vue +1 -0
  191. package/pages/auth/logout.vue +2 -0
  192. package/pages/auth/setup.vue +4 -37
  193. package/pages/auth/verify.vue +8 -14
  194. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
  195. package/pages/c/_cluster/apps/charts/index.vue +58 -64
  196. package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
  197. package/pages/c/_cluster/apps/charts/install.vue +5 -5
  198. package/pages/c/_cluster/apps/index.vue +2 -0
  199. package/pages/c/_cluster/auth/index.vue +2 -0
  200. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  201. package/pages/c/_cluster/ecm/index.vue +2 -0
  202. package/pages/c/_cluster/explorer/index.vue +53 -56
  203. package/pages/c/_cluster/explorer/tools/index.vue +3 -171
  204. package/pages/c/_cluster/fleet/index.vue +1 -1
  205. package/pages/c/_cluster/index.vue +2 -0
  206. package/pages/c/_cluster/manager/pages/_page.vue +5 -4
  207. package/pages/c/_cluster/monitoring/index.vue +1 -17
  208. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -1
  209. package/pages/c/_cluster/settings/banners.vue +2 -0
  210. package/pages/c/_cluster/settings/brand.vue +2 -3
  211. package/pages/c/_cluster/settings/index.vue +2 -0
  212. package/pages/c/_cluster/settings/links.vue +3 -2
  213. package/pages/c/_cluster/settings/performance.vue +1 -0
  214. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
  215. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
  216. package/pages/c/_cluster/uiplugins/index.vue +2 -0
  217. package/pages/c/index.vue +9 -0
  218. package/pages/diagnostic.vue +2 -1
  219. package/pages/fail-whale.vue +1 -0
  220. package/pages/prefs.vue +1 -0
  221. package/pages/rio/mesh.vue +508 -0
  222. package/pages/support/index.vue +8 -2
  223. package/pkg/auto-import.js +1 -1
  224. package/plugins/axios.js +36 -0
  225. package/plugins/back-button.js +5 -3
  226. package/plugins/clean-html-directive.js +19 -1
  227. package/plugins/clean-tooltip-directive.js +1 -1
  228. package/plugins/codemirror-loader.js +1 -1
  229. package/plugins/codemirror.js +0 -41
  230. package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
  231. package/plugins/dashboard-store/actions.js +17 -16
  232. package/plugins/dashboard-store/classify.js +18 -1
  233. package/plugins/dashboard-store/getters.js +7 -70
  234. package/plugins/dashboard-store/index.js +12 -0
  235. package/plugins/dashboard-store/mutations.js +4 -0
  236. package/plugins/dashboard-store/resource-class.js +20 -65
  237. package/plugins/i18n.js +1 -1
  238. package/plugins/steve/__tests__/getters.spec.ts +48 -26
  239. package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
  240. package/plugins/steve/actions.js +37 -3
  241. package/plugins/steve/getters.js +24 -7
  242. package/plugins/steve/mutations.js +5 -2
  243. package/plugins/steve/norman-class.js +0 -19
  244. package/plugins/steve/steve-class.js +0 -22
  245. package/plugins/steve/subscribe.js +34 -13
  246. package/plugins/transitions.js +4 -0
  247. package/plugins/vue-clipboard2.js +4 -0
  248. package/rancher-components/Accordion/Accordion.vue +3 -2
  249. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  250. package/rancher-components/Banner/Banner.test.ts +1 -5
  251. package/rancher-components/Banner/Banner.vue +2 -2
  252. package/rancher-components/Card/Card.vue +4 -4
  253. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  254. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  255. package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
  256. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  257. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  258. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  259. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  260. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  261. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  262. package/rancher-components/StringList/StringList.vue +8 -8
  263. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  264. package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
  265. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
  266. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
  267. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
  268. package/rancher-components/components/StringList/StringList.test.ts +0 -270
  269. package/rancher-components/components/StringList/StringList.vue +18 -57
  270. package/scripts/extension/bundle +7 -19
  271. package/scripts/extension/helm/scripts/package +3 -11
  272. package/scripts/extension/parse-tag-name +4 -4
  273. package/scripts/extension/publish +9 -20
  274. package/scripts/publish-shell.sh +1 -11
  275. package/scripts/test-plugins-build.sh +9 -85
  276. package/store/catalog.js +1 -1
  277. package/store/features.js +0 -1
  278. package/store/i18n.js +0 -11
  279. package/store/index.js +13 -11
  280. package/store/prefs.js +38 -33
  281. package/store/type-map.js +82 -157
  282. package/tsconfig.default.json +46 -0
  283. package/tsconfig.json +9 -35
  284. package/types/shell/index.d.ts +404 -465
  285. package/utils/axios.js +19 -0
  286. package/utils/create-yaml.js +1 -5
  287. package/utils/custom-validators.js +2 -0
  288. package/utils/error.js +1 -16
  289. package/utils/monitoring.js +2 -37
  290. package/utils/nuxt.js +39 -18
  291. package/utils/object.js +0 -24
  292. package/utils/router.scrollBehavior.js +14 -12
  293. package/utils/socket.js +1 -0
  294. package/utils/time.js +1 -1
  295. package/utils/title.ts +3 -0
  296. package/utils/url.ts +1 -1
  297. package/utils/validators/formRules/__tests__/index.test.ts +4 -49
  298. package/utils/validators/formRules/index.ts +9 -12
  299. package/utils/validators/setting.js +10 -6
  300. package/vue.config.js +3 -24
  301. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  302. package/components/Certificates.vue +0 -164
  303. package/components/__tests__/CodeMirror.spec.ts +0 -99
  304. package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
  305. package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
  306. package/components/formatter/__tests__/Checked.test.ts +0 -19
  307. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +0 -81
  308. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
  309. package/composables/useCompactInput.ts +0 -20
  310. package/composables/useLabeledFormElement.ts +0 -138
  311. package/creators/app/files/.gitlab-ci.yml +0 -14
  312. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +0 -77
  313. package/edit/__tests__/service.test.ts +0 -89
  314. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
  315. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
  316. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
  317. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
  318. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
  319. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
  320. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
  321. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
  322. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -147
  323. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
  324. package/mixins/v1-workload-metrics.js +0 -43
  325. package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
  326. package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
  327. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -241
  328. package/models/__tests__/secret.test.ts +0 -37
  329. package/models/__tests__/storage.k8s.io.storageclass.test.ts +0 -22
  330. package/models/__tests__/workload.test.ts +0 -91
  331. package/plugins/clean-html.js +0 -53
  332. package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
  333. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
  334. package/plugins/index.js +0 -11
  335. package/plugins/steve/__tests__/resource-utils.test.ts +0 -159
  336. package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
  337. package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
  338. package/plugins/steve/resource-utils.ts +0 -38
  339. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
  340. package/server/har-file.js +0 -183
  341. package/store/__tests__/type-map.test.ts +0 -1122
  342. package/tsconfig.paths.json +0 -18
  343. package/utils/azure.js +0 -24
  344. package/utils/clipboard.js +0 -5
  345. /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
  346. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
  347. /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
  348. /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
  349. /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
  350. /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
  351. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +0 -0
  352. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
  353. /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
  354. /package/plugins/dashboard-store/__tests__/{actions.test.ts → actions.spec.ts} +0 -0
  355. /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
  356. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
@@ -4,13 +4,12 @@ import { cleanHtmlDirective } from '@shell/plugins/clean-html-directive';
4
4
 
5
5
  describe('component: vmwarevsphere', () => {
6
6
  const defaultGetters = { 'i18n/t': jest.fn().mockImplementation((key: string) => key) };
7
- const defaultSetup = {
7
+ const poolId = 'poolId';
8
+ const baseSetup = {
8
9
  propsData: {
9
- poolId: 'poolId',
10
+ poolId,
10
11
  credentialId: 'credentialId',
11
12
  disabled: false,
12
- mode: 'create',
13
- value: { initted: false },
14
13
  provider: 'vmwarevsphere'
15
14
  },
16
15
  mocks: {
@@ -20,54 +19,86 @@ describe('component: vmwarevsphere', () => {
20
19
  stubs: { CodeMirror: true },
21
20
  directives: { cleanHtmlDirective }
22
21
  };
22
+ const defaultCreateSetup = {
23
+ ...baseSetup,
24
+ propsData: {
25
+ ...baseSetup.propsData,
26
+ mode: 'create',
27
+ poolCreateMode: true,
28
+ value: { initted: false },
29
+ }
30
+ };
31
+ const defaultEditSetup = {
32
+ ...baseSetup,
33
+ propsData: {
34
+ ...baseSetup.propsData,
35
+ mode: 'edit',
36
+ poolCreateMode: false,
37
+ value: { initted: false },
38
+ }
39
+ };
40
+ const editModeWithPoolInCreateModeSetup = {
41
+ ...defaultEditSetup,
42
+ propsData: {
43
+ ...defaultEditSetup.propsData,
44
+ poolCreateMode: true
45
+ }
46
+ };
47
+
48
+ describe('default values', () => {
49
+ const testCases = [
50
+ defaultCreateSetup,
51
+ editModeWithPoolInCreateModeSetup
52
+ ];
53
+
54
+ it.each(testCases)('should mount successfully with correct default values', (setup) => {
55
+ const wrapper = mount(vmwarevsphere, setup);
56
+
57
+ const dataCenterElement = wrapper.find(`[data-testid="datacenter"]`).element;
58
+ const resourcePoolElement = wrapper.find(`[data-testid="resourcePool"]`).element;
59
+ const dataStoreElement = wrapper.find(`[data-testid="dataStore"]`).element;
60
+ const folderElement = wrapper.find(`[data-testid="folder"]`).element;
61
+ const hostElement = wrapper.find(`[data-testid="host"]`).element;
62
+ const gracefulShutdownTimeoutElement = wrapper.find(`[data-testid="gracefulShutdownTimeout"]`).element;
63
+
64
+ expect(dataCenterElement).toBeDefined();
65
+ expect(resourcePoolElement).toBeDefined();
66
+ expect(dataStoreElement).toBeDefined();
67
+ expect(folderElement).toBeDefined();
68
+ expect(hostElement).toBeDefined();
69
+ expect(gracefulShutdownTimeoutElement).toBeDefined();
23
70
 
24
- it('should mount successfully with correct default values', () => {
25
- const wrapper = mount(vmwarevsphere, defaultSetup);
26
-
27
- const dataCenterElement = wrapper.find(`[data-testid="datacenter"]`).element;
28
- const resourcePoolElement = wrapper.find(`[data-testid="resourcePool"]`).element;
29
- const dataStoreElement = wrapper.find(`[data-testid="dataStore"]`).element;
30
- const folderElement = wrapper.find(`[data-testid="folder"]`).element;
31
- const hostElement = wrapper.find(`[data-testid="host"]`).element;
32
- const gracefulShutdownTimeoutElement = wrapper.find(`[data-testid="gracefulShutdownTimeout"]`).element;
33
-
34
- expect(dataCenterElement).toBeDefined();
35
- expect(resourcePoolElement).toBeDefined();
36
- expect(dataStoreElement).toBeDefined();
37
- expect(folderElement).toBeDefined();
38
- expect(hostElement).toBeDefined();
39
- expect(gracefulShutdownTimeoutElement).toBeDefined();
40
-
41
- const {
42
- cpuCount: defaultCpuCount,
43
- diskSize: defaultDiskSize,
44
- memorySize: defaultMemorySize,
45
- hostsystem: defaultHostsystem,
46
- cloudConfig: defaultCloudConfig,
47
- gracefulShutdownTimeout: defaultGracefulShutdownTimeout,
48
- cfgparam: defaultCfgparam,
49
- os: defaultOs
50
- } = DEFAULT_VALUES;
51
-
52
- const {
53
- cpuCount,
54
- diskSize,
55
- memorySize,
56
- hostsystem,
57
- cloudConfig,
58
- gracefulShutdownTimeout,
59
- cfgparam,
60
- os
61
- } = wrapper.vm.$options.propsData.value;
62
-
63
- expect(cpuCount).toStrictEqual(defaultCpuCount);
64
- expect(diskSize).toStrictEqual(defaultDiskSize);
65
- expect(memorySize).toStrictEqual(defaultMemorySize);
66
- expect(hostsystem).toStrictEqual(defaultHostsystem);
67
- expect(cloudConfig).toStrictEqual(defaultCloudConfig);
68
- expect(gracefulShutdownTimeout).toStrictEqual(defaultGracefulShutdownTimeout);
69
- expect(cfgparam).toStrictEqual(defaultCfgparam);
70
- expect(os).toStrictEqual(defaultOs);
71
+ const {
72
+ cpuCount: defaultCpuCount,
73
+ diskSize: defaultDiskSize,
74
+ memorySize: defaultMemorySize,
75
+ hostsystem: defaultHostsystem,
76
+ cloudConfig: defaultCloudConfig,
77
+ gracefulShutdownTimeout: defaultGracefulShutdownTimeout,
78
+ cfgparam: defaultCfgparam,
79
+ os: defaultOs
80
+ } = DEFAULT_VALUES;
81
+
82
+ const {
83
+ cpuCount,
84
+ diskSize,
85
+ memorySize,
86
+ hostsystem,
87
+ cloudConfig,
88
+ gracefulShutdownTimeout,
89
+ cfgparam,
90
+ os
91
+ } = wrapper.vm.$options.propsData.value;
92
+
93
+ expect(cpuCount).toStrictEqual(defaultCpuCount);
94
+ expect(diskSize).toStrictEqual(defaultDiskSize);
95
+ expect(memorySize).toStrictEqual(defaultMemorySize);
96
+ expect(hostsystem).toStrictEqual(defaultHostsystem);
97
+ expect(cloudConfig).toStrictEqual(defaultCloudConfig);
98
+ expect(gracefulShutdownTimeout).toStrictEqual(defaultGracefulShutdownTimeout);
99
+ expect(cfgparam).toStrictEqual(defaultCfgparam);
100
+ expect(os).toStrictEqual(defaultOs);
101
+ });
71
102
  });
72
103
 
73
104
  describe('mapPathOptionsToContent', () => {
@@ -78,7 +109,7 @@ describe('component: vmwarevsphere', () => {
78
109
  ];
79
110
 
80
111
  it.each(testCases)('should generate label/value object without manipultion', (rawData, expected) => {
81
- const wrapper = mount(vmwarevsphere, defaultSetup);
112
+ const wrapper = mount(vmwarevsphere, defaultCreateSetup);
82
113
 
83
114
  expect(wrapper.vm.mapPathOptionsToContent(rawData)).toStrictEqual(expected);
84
115
  });
@@ -95,7 +126,7 @@ describe('component: vmwarevsphere', () => {
95
126
  ];
96
127
 
97
128
  it.each(testCases)('should generate label/value object for host options properly', (rawData, expected) => {
98
- const wrapper = mount(vmwarevsphere, defaultSetup);
129
+ const wrapper = mount(vmwarevsphere, defaultCreateSetup);
99
130
 
100
131
  expect(wrapper.vm.mapHostOptionsToContent(rawData)).toStrictEqual(expected);
101
132
  });
@@ -114,7 +145,7 @@ describe('component: vmwarevsphere', () => {
114
145
  ];
115
146
 
116
147
  it.each(testCases)('should generate label/value object for folder options properly', (rawData, expected) => {
117
- const wrapper = mount(vmwarevsphere, defaultSetup);
148
+ const wrapper = mount(vmwarevsphere, defaultCreateSetup);
118
149
 
119
150
  expect(wrapper.vm.mapFolderOptionsToContent(rawData)).toStrictEqual(expected);
120
151
  });
@@ -127,7 +158,7 @@ describe('component: vmwarevsphere', () => {
127
158
  ];
128
159
 
129
160
  it.each(testCases)('should generate label/value object for custom attributes options properly', (rawData, expected) => {
130
- const wrapper = mount(vmwarevsphere, defaultSetup);
161
+ const wrapper = mount(vmwarevsphere, defaultCreateSetup);
131
162
 
132
163
  expect(wrapper.vm.mapCustomAttributesToContent(rawData)).toStrictEqual(expected);
133
164
  });
@@ -143,9 +174,83 @@ describe('component: vmwarevsphere', () => {
143
174
  const expectedReslut = [{
144
175
  ...tag, label: `${ tag.category } / ${ tag.name }`, value: tag.id
145
176
  }];
146
- const wrapper = mount(vmwarevsphere, defaultSetup);
177
+ const wrapper = mount(vmwarevsphere, defaultCreateSetup);
147
178
 
148
179
  expect(wrapper.vm.mapTagsToContent([tag])).toStrictEqual(expectedReslut);
149
180
  });
150
181
  });
182
+
183
+ describe('resetValueIfNecessary', () => {
184
+ const hostsystemOptions = ['', '/Datacenter/host/Cluster/111.11.11.1'];
185
+ const folderOptions = ['', '/Datacenter/vm', '/Datacenter/vm/sub-folder'];
186
+ const contentLibraryOptions = ['', 'some-content-library'];
187
+ const networkOptions = ['', 'some-network'];
188
+ const tagOptions = ['', 'some-tag'];
189
+
190
+ it('should add errors to validationError collection when values are NOT in the options', () => {
191
+ const setup = {
192
+ ...defaultEditSetup,
193
+ propsData: {
194
+ ...defaultEditSetup.propsData,
195
+ value: {
196
+ ...defaultEditSetup.propsData.value,
197
+ hostsystem: 'something that is not included in the options',
198
+ folder: 'same as above',
199
+ constentLibrary: 'same as above'
200
+ }
201
+ }
202
+ };
203
+
204
+ const wrapper = mount(vmwarevsphere, setup);
205
+
206
+ const hostsystemContent = wrapper.vm.mapHostOptionsToContent(hostsystemOptions);
207
+ const folderContent = wrapper.vm.mapHostOptionsToContent(folderOptions);
208
+ const contentLibraryContent = wrapper.vm.mapPathOptionsToContent(contentLibraryOptions);
209
+
210
+ wrapper.vm.resetValueIfNecessary('hostsystem', hostsystemContent, hostsystemOptions);
211
+ wrapper.vm.resetValueIfNecessary('folder', folderContent, folderOptions);
212
+ wrapper.vm.resetValueIfNecessary('contentLibrary', contentLibraryContent, contentLibraryOptions);
213
+
214
+ expect(wrapper.vm.$data.validationErrors[poolId]).toContain('hostsystem');
215
+ expect(wrapper.vm.$data.validationErrors[poolId]).toContain('folder');
216
+ expect(wrapper.vm.$data.validationErrors[poolId]).toContain('contentLibrary');
217
+ });
218
+
219
+ describe('hostsystem, folder, contentLibrary, network and tag', () => {
220
+ const testCases = [null, ''];
221
+
222
+ it.each(testCases)('should NOT be added to validationError collection if they are null or ""', (data) => {
223
+ const setup = {
224
+ ...defaultEditSetup,
225
+ propsData: {
226
+ ...defaultEditSetup.propsData,
227
+ value: {
228
+ ...defaultEditSetup.propsData.value,
229
+ hostsystem: data,
230
+ folder: data,
231
+ contentLibrary: data,
232
+ network: [data],
233
+ tag: [data]
234
+ }
235
+ }
236
+ };
237
+
238
+ const wrapper = mount(vmwarevsphere, setup);
239
+
240
+ const hostsystemContent = wrapper.vm.mapHostOptionsToContent(hostsystemOptions);
241
+ const folderContent = wrapper.vm.mapHostOptionsToContent(folderOptions);
242
+ const contentLibraryContent = wrapper.vm.mapPathOptionsToContent(contentLibraryOptions);
243
+ const networkContent = wrapper.vm.mapPathOptionsToContent(networkOptions);
244
+ const tagContent = wrapper.vm.mapPathOptionsToContent(tagOptions);
245
+
246
+ wrapper.vm.resetValueIfNecessary('hostsystem', hostsystemContent, hostsystemOptions);
247
+ wrapper.vm.resetValueIfNecessary('folder', folderContent, folderOptions);
248
+ wrapper.vm.resetValueIfNecessary('contentLibrary', contentLibraryContent, contentLibraryOptions);
249
+ wrapper.vm.resetValueIfNecessary('network', networkContent, networkOptions, true);
250
+ wrapper.vm.resetValueIfNecessary('tag', tagContent, tagOptions, true);
251
+
252
+ expect(wrapper.vm.$data.validationErrors[poolId]).toBeUndefined();
253
+ });
254
+ });
255
+ });
151
256
  });
@@ -12,6 +12,8 @@ import { Checkbox } from '@components/Form/Checkbox';
12
12
  import ArrayList from '@shell/components/form/ArrayList';
13
13
  import { randomStr } from '@shell/utils/string';
14
14
  import { addParam, addParams } from '@shell/utils/url';
15
+ import { NORMAN } from '@shell/config/types';
16
+ import { findBy } from '@shell/utils/array';
15
17
  import KeyValue from '@shell/components/form/KeyValue';
16
18
  import { RadioGroup } from '@components/Form/Radio';
17
19
  import { _CREATE, _EDIT } from '@shell/config/query-params';
@@ -92,7 +94,6 @@ const storageTypes = [
92
94
  value: 'StandardSSD_LRS'
93
95
  }
94
96
  ];
95
- const DEFAULT_REGION = 'westus';
96
97
 
97
98
  export default {
98
99
  components: {
@@ -148,6 +149,12 @@ export default {
148
149
  }
149
150
  if (!isEmpty(environment)) {
150
151
  this.value.environment = environment;
152
+ } else if (this.loadedCredentialIdFor !== this.credentialId) {
153
+ this.allCredentials = await this.$store.dispatch('rancher/findAll', { type: NORMAN.CLOUD_CREDENTIAL });
154
+
155
+ const currentCredential = this.allCredentials.find((obj) => obj.id === this.credentialId);
156
+
157
+ this.value.environment = currentCredential.azurecredentialConfig.environment;
151
158
  }
152
159
  if (!isEmpty(subscriptionId)) {
153
160
  this.value.subscriptionId = subscriptionId;
@@ -156,19 +163,20 @@ export default {
156
163
  this.value.tenantId = tenantId;
157
164
  }
158
165
 
159
- this.locationOptions = await this.$store.dispatch('management/request', {
160
- url: addParam('/meta/aksLocations', 'cloudCredentialId', this.credentialId),
161
- method: 'GET',
162
- });
166
+ if (this.loadedCredentialIdFor !== this.credentialId) {
167
+ this.locationOptions = await this.$store.dispatch('management/request', {
168
+ url: addParam('/meta/aksLocations', 'cloudCredentialId', this.credentialId),
169
+ method: 'GET',
170
+ });
163
171
 
164
- if (this.mode === _CREATE) {
165
- this.value.location = DEFAULT_REGION;
172
+ this.loadedCredentialIdFor = this.credentialId;
173
+ }
166
174
 
167
175
  // when you edit an Azure cluster and add a new machine pool (edit)
168
176
  // the location field doesn't come populated which causes the vmSizes request
169
177
  // to return 200 but with a null response (also a bunch of other fields are undefined...)
170
178
  // so let's prefill them with the defaults
171
- } else if (this.mode === _EDIT && !this.value?.location) {
179
+ if (this.mode === _EDIT && !this.value?.location) {
172
180
  for (const key in this.defaultConfig) {
173
181
  if (this.value[key] === undefined) {
174
182
  this.$set(this.value, key, this.defaultConfig[key]);
@@ -176,6 +184,10 @@ export default {
176
184
  }
177
185
  }
178
186
 
187
+ if (!this.value.location || !findBy(this.locationOptions, 'name', this.value.location)) {
188
+ this.locationOptions?.length && this.setLocation(this.locationOptions[this.locationOptions.length - 1]);
189
+ }
190
+
179
191
  this.vmSizes = await this.$store.dispatch('management/request', {
180
192
  url: addParams('/meta/aksVMSizesV2', {
181
193
  cloudCredentialId: this.credentialId,
@@ -206,6 +218,8 @@ export default {
206
218
  useAvailabilitySet: false,
207
219
  vmSizes: [],
208
220
  valueCopy: this.value,
221
+
222
+ loadedCredentialIdFor: null
209
223
  };
210
224
  },
211
225
 
@@ -214,6 +228,10 @@ export default {
214
228
  this.$fetch();
215
229
  },
216
230
 
231
+ 'value.location'() {
232
+ this.$fetch();
233
+ },
234
+
217
235
  'value.availabilityZone'(neu) {
218
236
  if (neu && (!this.value.managedDisks || !this.value.enablePublicIpStandardSku || !this.value.staticPublicIp)) {
219
237
  this.$emit('expandAdvanced');
@@ -499,19 +517,6 @@ export default {
499
517
  </div>
500
518
  <div v-else>
501
519
  <div class="row mt-20">
502
- <div class="col span-6">
503
- <LabeledSelect
504
- v-model="value.environment"
505
- :mode="mode"
506
- :options="azureEnvironments"
507
- option-key="value"
508
- option-label="value"
509
- :searchable="false"
510
- :required="true"
511
- :label="t('cluster.machineConfig.azure.environment.label')"
512
- :disabled="disabled"
513
- />
514
- </div>
515
520
  <div class="col span-6">
516
521
  <LabeledSelect
517
522
  :value="value.location"
@@ -526,6 +531,17 @@ export default {
526
531
  @input="setLocation"
527
532
  />
528
533
  </div>
534
+ <div>
535
+ <label
536
+ v-clean-tooltip="t('cluster.machineConfig.azure.environment.tooltip')"
537
+ :style="{'display':'block'}"
538
+ class="text-label"
539
+ >
540
+ {{ t('cluster.machineConfig.azure.environment.label') }}
541
+ <i class="icon icon-sm icon-info" />
542
+ </label>
543
+ <span>{{ value.environment }}</span>
544
+ </div>
529
545
  </div>
530
546
  <div class="row mt-20">
531
547
  <div class="col span-4">