@rancher/shell 0.5.2 → 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 (338) 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 +77 -71
  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/CodeMirror.vue +21 -19
  22. package/components/CopyCode.vue +2 -6
  23. package/components/CopyToClipboard.vue +1 -2
  24. package/components/CopyToClipboardText.vue +9 -14
  25. package/components/CruResource.vue +0 -1
  26. package/components/EtcdInfoBanner.vue +5 -5
  27. package/components/ExplorerProjectsNamespaces.vue +1 -25
  28. package/components/IconOrSvg.vue +1 -1
  29. package/components/Markdown.vue +12 -16
  30. package/components/Questions/index.vue +1 -1
  31. package/components/ResourceDetail/Masthead.vue +9 -25
  32. package/components/ResourceList/Masthead.vue +18 -1
  33. package/components/ResourceTable.vue +2 -14
  34. package/components/ResourceYaml.vue +0 -5
  35. package/components/SideNav.vue +1 -1
  36. package/components/SortableTable/THead.vue +9 -7
  37. package/components/SortableTable/index.vue +3 -2
  38. package/components/StatusTable.vue +1 -5
  39. package/components/TabTitle.vue +84 -0
  40. package/components/Tabbed/index.vue +0 -12
  41. package/components/__tests__/ChartPsp.test.ts +75 -0
  42. package/components/__tests__/CopyCode.test.ts +4 -5
  43. package/components/fleet/FleetBundles.vue +11 -5
  44. package/components/fleet/FleetRepos.vue +27 -62
  45. package/components/fleet/FleetResources.vue +1 -6
  46. package/components/fleet/FleetStatus.vue +3 -3
  47. package/components/fleet/FleetSummary.vue +30 -35
  48. package/components/form/ArrayList.vue +8 -1
  49. package/components/form/ArrayListSelect.vue +9 -9
  50. package/components/form/KeyValue.vue +0 -1
  51. package/components/form/LabeledSelect.vue +0 -4
  52. package/components/form/Password.vue +1 -3
  53. package/components/form/Select.vue +1 -1
  54. package/components/form/SelectOrCreateAuthSecret.vue +4 -4
  55. package/components/form/__tests__/KeyValue.test.ts +1 -1
  56. package/components/formatter/Checked.vue +3 -11
  57. package/components/formatter/ClusterProvider.vue +18 -1
  58. package/components/formatter/FleetSummaryGraph.vue +11 -23
  59. package/components/formatter/LiveDate.vue +16 -0
  60. package/components/formatter/LiveDuration.vue +1 -1
  61. package/components/formatter/PercentageBar.vue +1 -1
  62. package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
  63. package/components/nav/Group.vue +2 -2
  64. package/components/nav/Header.vue +2 -1
  65. package/components/nav/TopLevelMenu.vue +3 -29
  66. package/components/nav/Type.vue +3 -1
  67. package/components/nav/WindowManager/ContainerLogs.vue +19 -120
  68. package/components/nav/WindowManager/ContainerShell.vue +1 -6
  69. package/components/nav/WindowManager/index.vue +10 -11
  70. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -33
  71. package/components/nav/__tests__/Type.test.ts +1 -1
  72. package/components/nuxt/nuxt-child.js +78 -14
  73. package/components/nuxt/nuxt.js +1 -1
  74. package/components/user.retention/user-retention-header.vue +34 -0
  75. package/composables/useI18n.ts +26 -0
  76. package/composables/useStore.ts +16 -0
  77. package/config/harvester-manager-types.js +0 -2
  78. package/config/home-links.js +32 -2
  79. package/config/private-label.js +0 -22
  80. package/config/product/explorer.js +4 -4
  81. package/config/product/fleet.js +1 -6
  82. package/config/product/legacy.js +1 -84
  83. package/config/product/manager.js +15 -8
  84. package/config/query-params.js +0 -1
  85. package/config/router.js +368 -385
  86. package/config/settings.ts +9 -2
  87. package/config/store.js +1 -1
  88. package/config/system-namespaces.js +0 -3
  89. package/config/table-headers.js +27 -47
  90. package/config/types.js +5 -0
  91. package/config/uiplugins.js +1 -1
  92. package/core/plugin-helpers.js +5 -3
  93. package/core/plugin-routes.ts +114 -56
  94. package/core/plugin.ts +10 -16
  95. package/core/plugins-loader.js +9 -7
  96. package/core/plugins.js +3 -0
  97. package/core/types-provisioning.ts +0 -7
  98. package/creators/app/init +0 -19
  99. package/detail/fleet.cattle.io.cluster.vue +1 -11
  100. package/detail/node.vue +0 -42
  101. package/detail/pod.vue +1 -68
  102. package/detail/provisioning.cattle.io.cluster.vue +4 -6
  103. package/detail/workload/index.vue +1 -15
  104. package/dialog/ScaleMachineDownDialog.vue +17 -34
  105. package/edit/auth/googleoauth.vue +5 -1
  106. package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
  107. package/edit/cloudcredential.vue +0 -2
  108. package/edit/fleet.cattle.io.gitrepo.vue +4 -3
  109. package/edit/management.cattle.io.project.vue +52 -1
  110. package/edit/management.cattle.io.setting.vue +2 -31
  111. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
  112. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
  113. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  114. package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +126 -109
  115. package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
  116. package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +3 -1
  117. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
  118. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
  119. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
  120. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  121. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
  122. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  123. package/edit/provisioning.cattle.io.cluster/index.vue +37 -99
  124. package/edit/provisioning.cattle.io.cluster/rke2.vue +690 -181
  125. package/edit/service.vue +0 -12
  126. package/edit/workload/Upgrading.vue +2 -3
  127. package/edit/workload/index.vue +1 -2
  128. package/edit/workload/mixins/workload.js +1 -1
  129. package/initialize/App.js +71 -25
  130. package/initialize/client.js +162 -21
  131. package/initialize/index.js +124 -47
  132. package/initialize/layouts.ts +26 -0
  133. package/{components/templates → layouts}/blank.vue +1 -1
  134. package/{components/templates → layouts}/default.vue +98 -8
  135. package/{components/templates → layouts}/error.vue +19 -10
  136. package/{components/templates → layouts}/home.vue +1 -4
  137. package/{components/templates → layouts}/plain.vue +1 -4
  138. package/{components/templates → layouts}/standalone.vue +1 -1
  139. package/{components/templates → layouts}/unauthenticated.vue +1 -1
  140. package/list/management.cattle.io.feature.vue +7 -1
  141. package/list/management.cattle.io.user.vue +25 -1
  142. package/list/node.vue +0 -1
  143. package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
  144. package/machine-config/amazonec2.vue +1 -0
  145. package/machine-config/azure.vue +37 -21
  146. package/machine-config/vmwarevsphere.vue +47 -42
  147. package/middleware/authenticated.js +19 -14
  148. package/mixins/auth-config.js +7 -2
  149. package/mixins/brand.js +41 -29
  150. package/mixins/fetch.server.js +73 -0
  151. package/mixins/labeled-form-element.ts +1 -6
  152. package/models/__tests__/management.cattle.io.node.ts +0 -85
  153. package/models/__tests__/namespace.test.ts +9 -49
  154. package/models/cluster/node.js +4 -4
  155. package/models/cluster.x-k8s.io.machine.js +1 -1
  156. package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
  157. package/models/fleet.cattle.io.cluster.js +0 -4
  158. package/models/fleet.cattle.io.gitrepo.js +13 -56
  159. package/models/management.cattle.io.cluster.js +3 -11
  160. package/models/management.cattle.io.kontainerdriver.js +0 -1
  161. package/models/management.cattle.io.node.js +14 -18
  162. package/models/management.cattle.io.nodepool.js +0 -17
  163. package/models/management.cattle.io.project.js +36 -0
  164. package/models/management.cattle.io.setting.js +7 -11
  165. package/models/management.cattle.io.user.js +65 -0
  166. package/models/namespace.js +1 -1
  167. package/models/pod.js +0 -20
  168. package/models/provisioning.cattle.io.cluster.js +8 -55
  169. package/models/secret.js +18 -117
  170. package/models/workload.js +0 -16
  171. package/models/workload.service.js +0 -18
  172. package/package.json +10 -12
  173. package/pages/about.vue +1 -0
  174. package/pages/account/create-key.vue +1 -0
  175. package/pages/account/index.vue +1 -0
  176. package/pages/auth/login.vue +1 -0
  177. package/pages/auth/logout.vue +2 -0
  178. package/pages/auth/setup.vue +4 -37
  179. package/pages/auth/verify.vue +8 -14
  180. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
  181. package/pages/c/_cluster/apps/charts/index.vue +58 -64
  182. package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
  183. package/pages/c/_cluster/apps/charts/install.vue +5 -5
  184. package/pages/c/_cluster/apps/index.vue +2 -0
  185. package/pages/c/_cluster/auth/index.vue +2 -0
  186. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  187. package/pages/c/_cluster/ecm/index.vue +2 -0
  188. package/pages/c/_cluster/explorer/index.vue +53 -56
  189. package/pages/c/_cluster/explorer/tools/index.vue +3 -171
  190. package/pages/c/_cluster/fleet/index.vue +1 -1
  191. package/pages/c/_cluster/index.vue +2 -0
  192. package/pages/c/_cluster/manager/pages/_page.vue +5 -4
  193. package/pages/c/_cluster/monitoring/index.vue +1 -17
  194. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  195. package/pages/c/_cluster/settings/banners.vue +2 -0
  196. package/pages/c/_cluster/settings/brand.vue +2 -0
  197. package/pages/c/_cluster/settings/index.vue +2 -0
  198. package/pages/c/_cluster/settings/links.vue +3 -2
  199. package/pages/c/_cluster/settings/performance.vue +1 -0
  200. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +4 -4
  201. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
  202. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
  203. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +5 -2
  204. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +96 -0
  205. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +128 -0
  206. package/pages/c/_cluster/uiplugins/index.vue +2 -0
  207. package/pages/c/index.vue +9 -0
  208. package/pages/diagnostic.vue +2 -1
  209. package/pages/fail-whale.vue +1 -0
  210. package/pages/prefs.vue +1 -0
  211. package/pages/rio/mesh.vue +508 -0
  212. package/pages/support/index.vue +8 -2
  213. package/pkg/auto-import.js +1 -1
  214. package/plugins/axios.js +36 -0
  215. package/plugins/back-button.js +5 -3
  216. package/plugins/clean-html-directive.js +19 -1
  217. package/plugins/clean-tooltip-directive.js +1 -1
  218. package/plugins/codemirror-loader.js +1 -1
  219. package/plugins/codemirror.js +0 -41
  220. package/plugins/dashboard-store/__tests__/actions.spec.ts +250 -0
  221. package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
  222. package/plugins/dashboard-store/actions.js +21 -22
  223. package/plugins/dashboard-store/classify.js +18 -1
  224. package/plugins/dashboard-store/getters.js +5 -10
  225. package/plugins/dashboard-store/index.js +12 -0
  226. package/plugins/dashboard-store/mutations.js +4 -0
  227. package/plugins/dashboard-store/resource-class.js +18 -59
  228. package/plugins/i18n.js +1 -1
  229. package/plugins/steve/__tests__/getters.spec.ts +56 -24
  230. package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
  231. package/plugins/steve/getters.js +30 -7
  232. package/plugins/steve/mutations.js +5 -2
  233. package/plugins/steve/norman-class.js +0 -19
  234. package/plugins/steve/steve-class.js +0 -22
  235. package/plugins/steve/subscribe.js +34 -13
  236. package/plugins/transitions.js +4 -0
  237. package/plugins/vue-clipboard2.js +4 -0
  238. package/rancher-components/Accordion/Accordion.vue +3 -2
  239. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  240. package/rancher-components/Banner/Banner.test.ts +1 -5
  241. package/rancher-components/Banner/Banner.vue +2 -2
  242. package/rancher-components/Card/Card.vue +4 -4
  243. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  244. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  245. package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
  246. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  247. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  248. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  249. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  250. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  251. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  252. package/rancher-components/StringList/StringList.vue +8 -8
  253. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  254. package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
  255. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
  256. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
  257. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
  258. package/rancher-components/components/StringList/StringList.test.ts +0 -270
  259. package/rancher-components/components/StringList/StringList.vue +18 -57
  260. package/scripts/extension/bundle +7 -19
  261. package/scripts/extension/helm/scripts/package +3 -11
  262. package/scripts/extension/parse-tag-name +4 -4
  263. package/scripts/extension/publish +9 -20
  264. package/scripts/publish-shell.sh +1 -11
  265. package/scripts/test-plugins-build.sh +9 -85
  266. package/store/catalog.js +1 -1
  267. package/store/features.js +0 -1
  268. package/store/i18n.js +0 -11
  269. package/store/index.js +11 -8
  270. package/store/prefs.js +38 -33
  271. package/store/type-map.js +8 -13
  272. package/tsconfig.default.json +46 -0
  273. package/tsconfig.json +9 -35
  274. package/types/shell/index.d.ts +404 -463
  275. package/utils/__tests__/create-yaml.test.ts +10 -0
  276. package/utils/axios.js +19 -0
  277. package/utils/create-yaml.js +6 -6
  278. package/utils/custom-validators.js +2 -0
  279. package/utils/error.js +1 -16
  280. package/utils/monitoring.js +2 -37
  281. package/utils/nuxt.js +39 -18
  282. package/utils/object.js +0 -14
  283. package/utils/router.scrollBehavior.js +14 -12
  284. package/utils/socket.js +1 -0
  285. package/utils/time.js +1 -1
  286. package/utils/title.ts +3 -0
  287. package/utils/url.ts +1 -1
  288. package/utils/validators/formRules/__tests__/index.test.ts +4 -49
  289. package/utils/validators/formRules/index.ts +9 -12
  290. package/utils/validators/setting.js +10 -6
  291. package/vue.config.js +3 -24
  292. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  293. package/components/Certificates.vue +0 -164
  294. package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
  295. package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
  296. package/components/formatter/__tests__/Checked.test.ts +0 -19
  297. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
  298. package/composables/useCompactInput.ts +0 -20
  299. package/composables/useLabeledFormElement.ts +0 -138
  300. package/creators/app/files/.gitlab-ci.yml +0 -14
  301. package/edit/__tests__/service.test.ts +0 -89
  302. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
  303. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
  304. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
  305. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
  306. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
  307. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
  308. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
  309. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
  310. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -144
  311. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
  312. package/mixins/v1-workload-metrics.js +0 -43
  313. package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
  314. package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
  315. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -90
  316. package/models/__tests__/workload.test.ts +0 -91
  317. package/plugins/clean-html.js +0 -53
  318. package/plugins/dashboard-store/__tests__/actions.test.ts +0 -165
  319. package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
  320. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
  321. package/plugins/index.js +0 -11
  322. package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
  323. package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
  324. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
  325. package/server/har-file.js +0 -183
  326. package/tsconfig.paths.json +0 -18
  327. package/utils/azure.js +0 -24
  328. package/utils/clipboard.js +0 -5
  329. /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
  330. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
  331. /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
  332. /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
  333. /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
  334. /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
  335. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
  336. /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
  337. /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
  338. /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
  });
@@ -475,6 +475,7 @@ export default {
475
475
  :disabled="disabled"
476
476
  :placeholder="t('cluster.machineConfig.amazonEc2.selectedNetwork.placeholder')"
477
477
  :label="t('cluster.machineConfig.amazonEc2.selectedNetwork.label')"
478
+ data-testid="amazonEc2__selectedNetwork"
478
479
  option-key="value"
479
480
  @input="updateNetwork($event)"
480
481
  >
@@ -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">