Skip to content

Commit f82ccc0

Browse files
vits-hugsVitor Hugo Homem Marzarottohsato03
authored andcommitted
Adds url kubernetes iso (apache#10862)
Co-authored-by: Vitor Hugo Homem Marzarotto <vitor.marzarotto@scclouds.com.br> Co-authored-by: Henrique Sato <henriquesato2003@gmail.com>
1 parent aa7624a commit f82ccc0

7 files changed

Lines changed: 102 additions & 28 deletions

File tree

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,7 @@ public class ApiConstants {
12161216
public static final String DOCKER_REGISTRY_EMAIL = "dockerregistryemail";
12171217
public static final String ISO_NAME = "isoname";
12181218
public static final String ISO_STATE = "isostate";
1219+
public static final String ISO_URL = "isourl";
12191220
public static final String SEMANTIC_VERSION = "semanticversion";
12201221
public static final String KUBERNETES_VERSION_ID = "kubernetesversionid";
12211222
public static final String KUBERNETES_VERSION_NAME = "kubernetesversionname";

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/version/KubernetesVersionManagerImpl.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import com.cloud.storage.dao.VMTemplateZoneDao;
5858
import com.cloud.template.TemplateApiService;
5959
import com.cloud.template.VirtualMachineTemplate;
60+
import com.cloud.user.Account;
6061
import com.cloud.user.AccountManager;
6162
import com.cloud.utils.Pair;
6263
import com.cloud.utils.component.ComponentContext;
@@ -89,7 +90,7 @@ public class KubernetesVersionManagerImpl extends ManagerBase implements Kuberne
8990
public static final String MINIMUN_AUTOSCALER_SUPPORTED_VERSION = "1.15.0";
9091

9192
protected void updateTemplateDetailsInKubernetesSupportedVersionResponse(
92-
final KubernetesSupportedVersion kubernetesSupportedVersion, KubernetesSupportedVersionResponse response) {
93+
final KubernetesSupportedVersion kubernetesSupportedVersion, KubernetesSupportedVersionResponse response, boolean isRootAdmin) {
9394
TemplateJoinVO template = templateJoinDao.findById(kubernetesSupportedVersion.getIsoId());
9495
if (template == null) {
9596
return;
@@ -99,11 +100,14 @@ protected void updateTemplateDetailsInKubernetesSupportedVersionResponse(
99100
if (template.getState() != null) {
100101
response.setIsoState(template.getState().toString());
101102
}
103+
if (isRootAdmin) {
104+
response.setIsoUrl(template.getUrl());
105+
}
102106
response.setIsoArch(template.getArch().getType());
103107
response.setDirectDownload(template.isDirectDownload());
104108
}
105109

106-
private KubernetesSupportedVersionResponse createKubernetesSupportedVersionResponse(final KubernetesSupportedVersion kubernetesSupportedVersion) {
110+
private KubernetesSupportedVersionResponse createKubernetesSupportedVersionResponse(final KubernetesSupportedVersion kubernetesSupportedVersion, boolean isRootAdmin) {
107111
KubernetesSupportedVersionResponse response = new KubernetesSupportedVersionResponse();
108112
response.setObjectName("kubernetessupportedversion");
109113
response.setId(kubernetesSupportedVersion.getUuid());
@@ -122,16 +126,19 @@ private KubernetesSupportedVersionResponse createKubernetesSupportedVersionRespo
122126
response.setSupportsHA(compareSemanticVersions(kubernetesSupportedVersion.getSemanticVersion(),
123127
KubernetesClusterService.MIN_KUBERNETES_VERSION_HA_SUPPORT)>=0);
124128
response.setSupportsAutoscaling(versionSupportsAutoscaling(kubernetesSupportedVersion));
125-
updateTemplateDetailsInKubernetesSupportedVersionResponse(kubernetesSupportedVersion, response);
129+
updateTemplateDetailsInKubernetesSupportedVersionResponse(kubernetesSupportedVersion, response, isRootAdmin);
126130
response.setCreated(kubernetesSupportedVersion.getCreated());
127131
return response;
128132
}
129133

130134
private ListResponse<KubernetesSupportedVersionResponse> createKubernetesSupportedVersionListResponse(
131135
List<KubernetesSupportedVersionVO> versions, Integer count) {
132136
List<KubernetesSupportedVersionResponse> responseList = new ArrayList<>();
137+
Account caller = CallContext.current().getCallingAccount();
138+
boolean isRootAdmin = accountManager.isRootAdmin(caller.getId());
139+
133140
for (KubernetesSupportedVersionVO version : versions) {
134-
responseList.add(createKubernetesSupportedVersionResponse(version));
141+
responseList.add(createKubernetesSupportedVersionResponse(version, isRootAdmin));
135142
}
136143
ListResponse<KubernetesSupportedVersionResponse> response = new ListResponse<>();
137144
response.setResponses(responseList, count);
@@ -411,7 +418,7 @@ public KubernetesSupportedVersionResponse addKubernetesSupportedVersion(final Ad
411418
supportedVersionVO = kubernetesSupportedVersionDao.persist(supportedVersionVO);
412419
CallContext.current().putContextParameter(KubernetesSupportedVersion.class, supportedVersionVO.getUuid());
413420

414-
return createKubernetesSupportedVersionResponse(supportedVersionVO);
421+
return createKubernetesSupportedVersionResponse(supportedVersionVO, true);
415422
}
416423

417424
@Override
@@ -496,7 +503,7 @@ public KubernetesSupportedVersionResponse updateKubernetesSupportedVersion(final
496503
}
497504
version = kubernetesSupportedVersionDao.findById(versionId);
498505
}
499-
return createKubernetesSupportedVersionResponse(version);
506+
return createKubernetesSupportedVersionResponse(version, true);
500507
}
501508

502509
@Override

plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/response/KubernetesSupportedVersionResponse.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public class KubernetesSupportedVersionResponse extends BaseResponse {
5050
@Param(description = "The name of the binaries ISO for Kubernetes supported version")
5151
private String isoName;
5252

53+
@SerializedName(ApiConstants.ISO_URL)
54+
@Param(description = "the URL of the binaries ISO for Kubernetes supported version")
55+
private String isoUrl;
56+
5357
@SerializedName(ApiConstants.ISO_STATE)
5458
@Param(description = "The state of the binaries ISO for Kubernetes supported version")
5559
private String isoState;
@@ -134,6 +138,14 @@ public void setIsoName(String isoName) {
134138
this.isoName = isoName;
135139
}
136140

141+
public String getIsoUrl() {
142+
return isoUrl;
143+
}
144+
145+
public void setIsoUrl(String isoUrl) {
146+
this.isoUrl = isoUrl;
147+
}
148+
137149
public String getIsoState() {
138150
return isoState;
139151
}

plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionManagerImplTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void testUpdateTemplateDetailsInKubernetesSupportedVersionResponseNullTem
4848
Mockito.when(kubernetesSupportedVersion.getIsoId()).thenReturn(1L);
4949
KubernetesSupportedVersionResponse response = new KubernetesSupportedVersionResponse();
5050
kubernetesVersionManager.updateTemplateDetailsInKubernetesSupportedVersionResponse(kubernetesSupportedVersion,
51-
response);
51+
response, true);
5252
Assert.assertNull(ReflectionTestUtils.getField(response, "isoId"));
5353
}
5454

@@ -63,13 +63,13 @@ public void testUpdateTemplateDetailsInKubernetesSupportedVersionResponseValidTe
6363
Mockito.when(templateJoinVO.getUuid()).thenReturn(uuid);
6464
Mockito.when(templateJoinDao.findById(1L)).thenReturn(templateJoinVO);
6565
kubernetesVersionManager.updateTemplateDetailsInKubernetesSupportedVersionResponse(kubernetesSupportedVersion,
66-
response);
66+
response, true);
6767
Assert.assertEquals(uuid, ReflectionTestUtils.getField(response, "isoId"));
6868
Assert.assertNull(ReflectionTestUtils.getField(response, "isoState"));
6969
ObjectInDataStoreStateMachine.State state = ObjectInDataStoreStateMachine.State.Ready;
7070
Mockito.when(templateJoinVO.getState()).thenReturn(state);
7171
kubernetesVersionManager.updateTemplateDetailsInKubernetesSupportedVersionResponse(kubernetesSupportedVersion,
72-
response);
72+
response, true);
7373
Assert.assertEquals(state.toString(), ReflectionTestUtils.getField(response, "isoState"));
7474
}
7575
}

plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
package com.cloud.kubernetes.version;
1919

20+
import static org.junit.Assert.assertNull;
21+
import static org.junit.Assert.assertNotNull;
22+
import static org.mockito.ArgumentMatchers.anyLong;
2023
import static org.mockito.Mockito.when;
2124

2225
import java.lang.reflect.Field;
@@ -25,6 +28,11 @@
2528
import java.util.UUID;
2629

2730
import com.cloud.cpu.CPU;
31+
import com.cloud.user.Account;
32+
import com.cloud.user.AccountManager;
33+
import com.cloud.user.AccountVO;
34+
import com.cloud.user.User;
35+
import com.cloud.user.UserVO;
2836
import org.apache.cloudstack.api.command.admin.kubernetes.version.AddKubernetesSupportedVersionCmd;
2937
import org.apache.cloudstack.api.command.admin.kubernetes.version.DeleteKubernetesSupportedVersionCmd;
3038
import org.apache.cloudstack.api.command.admin.kubernetes.version.UpdateKubernetesSupportedVersionCmd;
@@ -63,11 +71,6 @@
6371
import com.cloud.storage.dao.VMTemplateDao;
6472
import com.cloud.template.TemplateApiService;
6573
import com.cloud.template.VirtualMachineTemplate;
66-
import com.cloud.user.Account;
67-
import com.cloud.user.AccountManager;
68-
import com.cloud.user.AccountVO;
69-
import com.cloud.user.User;
70-
import com.cloud.user.UserVO;
7174
import com.cloud.utils.Pair;
7275
import com.cloud.utils.component.ComponentContext;
7376
import com.cloud.utils.db.Filter;
@@ -95,6 +98,8 @@ public class KubernetesVersionServiceTest {
9598
private DataCenterDao dataCenterDao;
9699
@Mock
97100
private TemplateApiService templateService;
101+
@Mock
102+
private Account accountMock;
98103

99104
AutoCloseable closeable;
100105

@@ -124,6 +129,7 @@ public void setUp() throws Exception {
124129
when(dataCenterDao.findById(Mockito.anyLong())).thenReturn(zone);
125130

126131
TemplateJoinVO templateJoinVO = Mockito.mock(TemplateJoinVO.class);
132+
when(templateJoinVO.getUrl()).thenReturn("https://download.cloudstack.com");
127133
when(templateJoinVO.getState()).thenReturn(ObjectInDataStoreStateMachine.State.Ready);
128134
when(templateJoinVO.getArch()).thenReturn(CPU.CPUArch.getDefault());
129135
when(templateJoinDao.findById(Mockito.anyLong())).thenReturn(templateJoinVO);
@@ -140,19 +146,66 @@ public void tearDown() throws Exception {
140146

141147
@Test
142148
public void listKubernetesSupportedVersionsTest() {
143-
ListKubernetesSupportedVersionsCmd cmd = Mockito.mock(ListKubernetesSupportedVersionsCmd.class);
144-
List<KubernetesSupportedVersionVO> versionVOs = new ArrayList<>();
145-
KubernetesSupportedVersionVO versionVO = Mockito.mock(KubernetesSupportedVersionVO.class);
146-
when(versionVO.getSemanticVersion()).thenReturn(KubernetesVersionService.MIN_KUBERNETES_VERSION);
147-
versionVOs.add(versionVO);
148-
when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(versionVO);
149-
when(kubernetesSupportedVersionDao.searchAndCount(Mockito.any(SearchCriteria.class),
150-
Mockito.any(Filter.class))).thenReturn(new Pair<>(versionVOs, versionVOs.size()));
151-
ListResponse<KubernetesSupportedVersionResponse> versionsResponse =
152-
kubernetesVersionService.listKubernetesSupportedVersions(cmd);
153-
Assert.assertEquals(versionVOs.size(), versionsResponse.getCount().intValue());
154-
Assert.assertTrue(CollectionUtils.isNotEmpty(versionsResponse.getResponses()));
155-
Assert.assertEquals(versionVOs.size(), versionsResponse.getResponses().size());
149+
CallContext callContextMock = Mockito.mock(CallContext.class);
150+
try (MockedStatic<CallContext> callContextMockedStatic = Mockito.mockStatic(CallContext.class)) {
151+
callContextMockedStatic.when(CallContext::current).thenReturn(callContextMock);
152+
final SearchCriteria<KubernetesSupportedVersionVO> versionSearchCriteria = Mockito.mock(SearchCriteria.class);
153+
when(callContextMock.getCallingAccount()).thenReturn(accountMock);
154+
ListKubernetesSupportedVersionsCmd cmd = Mockito.mock(ListKubernetesSupportedVersionsCmd.class);
155+
List<KubernetesSupportedVersionVO> versionVOs = new ArrayList<>();
156+
KubernetesSupportedVersionVO versionVO = Mockito.mock(KubernetesSupportedVersionVO.class);
157+
when(versionVO.getSemanticVersion()).thenReturn(KubernetesVersionService.MIN_KUBERNETES_VERSION);
158+
versionVOs.add(versionVO);
159+
when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(versionVO);
160+
when(kubernetesSupportedVersionDao.searchAndCount(Mockito.any(), Mockito.any(Filter.class)))
161+
.thenReturn(new Pair<>(versionVOs, versionVOs.size()));
162+
ListResponse<KubernetesSupportedVersionResponse> versionsResponse =
163+
kubernetesVersionService.listKubernetesSupportedVersions(cmd);
164+
Assert.assertEquals(versionVOs.size(), versionsResponse.getCount().intValue());
165+
Assert.assertTrue(CollectionUtils.isNotEmpty(versionsResponse.getResponses()));
166+
Assert.assertEquals(versionVOs.size(), versionsResponse.getResponses().size());
167+
}
168+
}
169+
170+
@Test
171+
public void listKubernetesSupportedVersionsTestWhenAdmin() {
172+
CallContext callContextMock = Mockito.mock(CallContext.class);
173+
try (MockedStatic<CallContext> callContextMockedStatic = Mockito.mockStatic(CallContext.class)) {
174+
callContextMockedStatic.when(CallContext::current).thenReturn(callContextMock);
175+
ListKubernetesSupportedVersionsCmd cmd = Mockito.mock(ListKubernetesSupportedVersionsCmd.class);
176+
List<KubernetesSupportedVersionVO> versionVOs = new ArrayList<>();
177+
KubernetesSupportedVersionVO versionVO = Mockito.mock(KubernetesSupportedVersionVO.class);
178+
when(versionVO.getSemanticVersion()).thenReturn(KubernetesVersionService.MIN_KUBERNETES_VERSION);
179+
versionVOs.add(versionVO);
180+
when(callContextMock.getCallingAccount()).thenReturn(accountMock);
181+
when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(versionVO);
182+
when(kubernetesSupportedVersionDao.searchAndCount(Mockito.any(), Mockito.any(Filter.class)))
183+
.thenReturn(new Pair<>(versionVOs, versionVOs.size()));
184+
when(accountManager.isRootAdmin(anyLong())).thenReturn(true);
185+
ListResponse<KubernetesSupportedVersionResponse> response = kubernetesVersionService.listKubernetesSupportedVersions(cmd);
186+
assertNotNull(response.getResponses().get(0).getIsoUrl());
187+
}
188+
}
189+
190+
@Test
191+
public void listKubernetesSupportedVersionsTestWhenOtherUser() {
192+
CallContext callContextMock = Mockito.mock(CallContext.class);
193+
try (MockedStatic<CallContext> callContextMockedStatic = Mockito.mockStatic(CallContext.class)) {
194+
callContextMockedStatic.when(CallContext::current).thenReturn(callContextMock);
195+
ListKubernetesSupportedVersionsCmd cmd = Mockito.mock(ListKubernetesSupportedVersionsCmd.class);
196+
List<KubernetesSupportedVersionVO> versionVOs = new ArrayList<>();
197+
KubernetesSupportedVersionVO versionVO = Mockito.mock(KubernetesSupportedVersionVO.class);
198+
when(versionVO.getSemanticVersion()).thenReturn(KubernetesVersionService.MIN_KUBERNETES_VERSION);
199+
versionVOs.add(versionVO);
200+
when(callContextMock.getCallingAccount()).thenReturn(accountMock);
201+
when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(versionVO);
202+
when(kubernetesSupportedVersionDao.searchAndCount(Mockito.any(), Mockito.any(Filter.class)))
203+
.thenReturn(new Pair<>(versionVOs, versionVOs.size()));
204+
when(accountManager.isRootAdmin(anyLong())).thenReturn(false);
205+
when(accountMock.getId()).thenReturn(2L);
206+
ListResponse<KubernetesSupportedVersionResponse> response = kubernetesVersionService.listKubernetesSupportedVersions(cmd);
207+
assertNull(response.getResponses().get(0).getIsoUrl());
208+
}
156209
}
157210

158211
@Test(expected = InvalidParameterValueException.class)
@@ -224,7 +277,6 @@ public void addKubernetesSupportedVersionIsoUrlTest() throws ResourceAllocationE
224277
mockedComponentContext.when(() -> ComponentContext.inject(Mockito.any(RegisterIsoCmd.class))).thenReturn(
225278
new RegisterIsoCmd());
226279
mockedCallContext.when(CallContext::current).thenReturn(callContext);
227-
228280
when(templateService.registerIso(Mockito.any(RegisterIsoCmd.class))).thenReturn(
229281
Mockito.mock(VirtualMachineTemplate.class));
230282
VMTemplateVO templateVO = Mockito.mock(VMTemplateVO.class);

ui/public/locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,7 @@
13811381
"label.isoname": "Attached ISO",
13821382
"label.isos": "ISOs",
13831383
"label.isostate": "ISO state",
1384+
"label.isourl": "ISO URL",
13841385
"label.ispersistent": "Persistent ",
13851386
"label.ispublic": "Public",
13861387
"label.isready": "Ready",

ui/public/locales/pt_BR.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,7 @@
881881
"label.isoname": "Imagem ISO plugada",
882882
"label.isos": "ISOs",
883883
"label.isostate": "Estado da ISO",
884+
"label.isourl": "URL da ISO",
884885
"label.ispersistent": "Persistente",
885886
"label.ispublic": "P\u00fablico",
886887
"label.isready": "Pronto",

0 commit comments

Comments
 (0)