mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-17 02:53:18 +01:00
ehancement: add password to configdrive vendor_data.json (#10061)
This commit is contained in:
parent
265f4cdc28
commit
011fced91e
@ -126,7 +126,26 @@ public class ConfigDriveBuilder {
|
|||||||
|
|
||||||
File openStackFolder = new File(tempDirName + ConfigDrive.openStackConfigDriveName);
|
File openStackFolder = new File(tempDirName + ConfigDrive.openStackConfigDriveName);
|
||||||
|
|
||||||
writeVendorEmptyJsonFile(openStackFolder);
|
/*
|
||||||
|
Try to find VM password in the vmData.
|
||||||
|
If it is found, then write it into vendor-data.json
|
||||||
|
*/
|
||||||
|
String vmPassword = "";
|
||||||
|
for (String[] item : vmData) {
|
||||||
|
String dataType = item[CONFIGDATA_DIR];
|
||||||
|
String fileName = item[CONFIGDATA_FILE];
|
||||||
|
String content = item[CONFIGDATA_CONTENT];
|
||||||
|
if (PASSWORD_FILE.equals(fileName)) {
|
||||||
|
vmPassword = content;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (vmPassword.equals("")) {
|
||||||
|
writeVendorDataJsonFile(openStackFolder);
|
||||||
|
} else {
|
||||||
|
writeVendorDataJsonFile(openStackFolder, vmPassword);
|
||||||
|
}
|
||||||
|
|
||||||
writeNetworkData(nics, supportedServices, openStackFolder);
|
writeNetworkData(nics, supportedServices, openStackFolder);
|
||||||
for (NicProfile nic: nics) {
|
for (NicProfile nic: nics) {
|
||||||
if (supportedServices.get(nic.getId()).contains(Network.Service.UserData)) {
|
if (supportedServices.get(nic.getId()).contains(Network.Service.UserData)) {
|
||||||
@ -253,7 +272,7 @@ public class ConfigDriveBuilder {
|
|||||||
*
|
*
|
||||||
* If the folder does not exist, and we cannot create it, we throw a {@link CloudRuntimeException}.
|
* If the folder does not exist, and we cannot create it, we throw a {@link CloudRuntimeException}.
|
||||||
*/
|
*/
|
||||||
static void writeVendorEmptyJsonFile(File openStackFolder) {
|
static void writeVendorDataJsonFile(File openStackFolder) {
|
||||||
if (openStackFolder.exists() || openStackFolder.mkdirs()) {
|
if (openStackFolder.exists() || openStackFolder.mkdirs()) {
|
||||||
writeFile(openStackFolder, "vendor_data.json", "{}");
|
writeFile(openStackFolder, "vendor_data.json", "{}");
|
||||||
} else {
|
} else {
|
||||||
@ -261,6 +280,26 @@ public class ConfigDriveBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes vendor data containing Cloudstack-generated password into vendor-data.json
|
||||||
|
*
|
||||||
|
* If the folder does not exist, and we cannot create it, we throw a {@link CloudRuntimeException}.
|
||||||
|
*/
|
||||||
|
static void writeVendorDataJsonFile(File openStackFolder, String password) {
|
||||||
|
if (openStackFolder.exists() || openStackFolder.mkdirs()) {
|
||||||
|
writeFile(
|
||||||
|
openStackFolder,
|
||||||
|
"vendor_data.json",
|
||||||
|
String.format(
|
||||||
|
"{\"cloud-init\": \"#cloud-config\\npassword: %s\\nchpasswd:\\n expire: False\"}",
|
||||||
|
password
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw new CloudRuntimeException("Failed to create folder " + openStackFolder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the {@link JsonObject} with VM's metadata. The vmData is a list of arrays; we expect this list to have the following entries:
|
* Creates the {@link JsonObject} with VM's metadata. The vmData is a list of arrays; we expect this list to have the following entries:
|
||||||
* <ul>
|
* <ul>
|
||||||
|
|||||||
@ -134,7 +134,7 @@ public class ConfigDriveBuilderTest {
|
|||||||
@Test(expected = CloudRuntimeException.class)
|
@Test(expected = CloudRuntimeException.class)
|
||||||
public void buildConfigDriveTestIoException() {
|
public void buildConfigDriveTestIoException() {
|
||||||
try (MockedStatic<ConfigDriveBuilder> configDriveBuilderMocked = Mockito.mockStatic(ConfigDriveBuilder.class)) {
|
try (MockedStatic<ConfigDriveBuilder> configDriveBuilderMocked = Mockito.mockStatic(ConfigDriveBuilder.class)) {
|
||||||
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVendorEmptyJsonFile(nullable(File.class))).thenThrow(CloudRuntimeException.class);
|
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVendorDataJsonFile(nullable(File.class))).thenThrow(CloudRuntimeException.class);
|
||||||
Mockito.when(ConfigDriveBuilder.buildConfigDrive(null, new ArrayList<>(), "teste", "C:", null, supportedServices)).thenCallRealMethod();
|
Mockito.when(ConfigDriveBuilder.buildConfigDrive(null, new ArrayList<>(), "teste", "C:", null, supportedServices)).thenCallRealMethod();
|
||||||
ConfigDriveBuilder.buildConfigDrive(null, new ArrayList<>(), "teste", "C:", null, supportedServices);
|
ConfigDriveBuilder.buildConfigDrive(null, new ArrayList<>(), "teste", "C:", null, supportedServices);
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ public class ConfigDriveBuilderTest {
|
|||||||
public void buildConfigDriveTest() {
|
public void buildConfigDriveTest() {
|
||||||
try (MockedStatic<ConfigDriveBuilder> configDriveBuilderMocked = Mockito.mockStatic(ConfigDriveBuilder.class)) {
|
try (MockedStatic<ConfigDriveBuilder> configDriveBuilderMocked = Mockito.mockStatic(ConfigDriveBuilder.class)) {
|
||||||
|
|
||||||
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVendorEmptyJsonFile(Mockito.any(File.class))).then(invocationOnMock -> null);
|
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVendorDataJsonFile(Mockito.any(File.class))).then(invocationOnMock -> null);
|
||||||
|
|
||||||
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVmMetadata(Mockito.anyList(), Mockito.anyString(), Mockito.any(File.class), anyMap())).then(invocationOnMock -> null);
|
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVmMetadata(Mockito.anyList(), Mockito.anyString(), Mockito.any(File.class), anyMap())).then(invocationOnMock -> null);
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ public class ConfigDriveBuilderTest {
|
|||||||
Assert.assertEquals("mockIsoDataBase64", returnedIsoData);
|
Assert.assertEquals("mockIsoDataBase64", returnedIsoData);
|
||||||
|
|
||||||
configDriveBuilderMocked.verify(() -> {
|
configDriveBuilderMocked.verify(() -> {
|
||||||
ConfigDriveBuilder.writeVendorEmptyJsonFile(Mockito.any(File.class));
|
ConfigDriveBuilder.writeVendorDataJsonFile(Mockito.any(File.class));
|
||||||
ConfigDriveBuilder.writeVmMetadata(Mockito.anyList(), Mockito.anyString(), Mockito.any(File.class), anyMap());
|
ConfigDriveBuilder.writeVmMetadata(Mockito.anyList(), Mockito.anyString(), Mockito.any(File.class), anyMap());
|
||||||
ConfigDriveBuilder.linkUserData(Mockito.anyString());
|
ConfigDriveBuilder.linkUserData(Mockito.anyString());
|
||||||
ConfigDriveBuilder.generateAndRetrieveIsoAsBase64Iso(Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
ConfigDriveBuilder.generateAndRetrieveIsoAsBase64Iso(Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||||
@ -172,23 +172,23 @@ public class ConfigDriveBuilderTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = CloudRuntimeException.class)
|
@Test(expected = CloudRuntimeException.class)
|
||||||
public void writeVendorEmptyJsonFileTestCannotCreateOpenStackFolder() {
|
public void writeVendorDataJsonFileTestCannotCreateOpenStackFolder() {
|
||||||
File folderFileMock = Mockito.mock(File.class);
|
File folderFileMock = Mockito.mock(File.class);
|
||||||
Mockito.doReturn(false).when(folderFileMock).mkdirs();
|
Mockito.doReturn(false).when(folderFileMock).mkdirs();
|
||||||
|
|
||||||
ConfigDriveBuilder.writeVendorEmptyJsonFile(folderFileMock);
|
ConfigDriveBuilder.writeVendorDataJsonFile(folderFileMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = CloudRuntimeException.class)
|
@Test(expected = CloudRuntimeException.class)
|
||||||
public void writeVendorEmptyJsonFileTest() {
|
public void writeVendorDataJsonFileTest() {
|
||||||
File folderFileMock = Mockito.mock(File.class);
|
File folderFileMock = Mockito.mock(File.class);
|
||||||
Mockito.doReturn(false).when(folderFileMock).mkdirs();
|
Mockito.doReturn(false).when(folderFileMock).mkdirs();
|
||||||
|
|
||||||
ConfigDriveBuilder.writeVendorEmptyJsonFile(folderFileMock);
|
ConfigDriveBuilder.writeVendorDataJsonFile(folderFileMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void writeVendorEmptyJsonFileTestCreatingFolder() {
|
public void writeVendorDataJsonFileTestCreatingFolder() {
|
||||||
try (MockedStatic<ConfigDriveBuilder> configDriveBuilderMocked = Mockito.mockStatic(ConfigDriveBuilder.class)) {
|
try (MockedStatic<ConfigDriveBuilder> configDriveBuilderMocked = Mockito.mockStatic(ConfigDriveBuilder.class)) {
|
||||||
|
|
||||||
File folderFileMock = Mockito.mock(File.class);
|
File folderFileMock = Mockito.mock(File.class);
|
||||||
@ -196,9 +196,9 @@ public class ConfigDriveBuilderTest {
|
|||||||
Mockito.doReturn(true).when(folderFileMock).mkdirs();
|
Mockito.doReturn(true).when(folderFileMock).mkdirs();
|
||||||
|
|
||||||
//force execution of real method
|
//force execution of real method
|
||||||
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVendorEmptyJsonFile(folderFileMock)).thenCallRealMethod();
|
configDriveBuilderMocked.when(() -> ConfigDriveBuilder.writeVendorDataJsonFile(folderFileMock)).thenCallRealMethod();
|
||||||
|
|
||||||
ConfigDriveBuilder.writeVendorEmptyJsonFile(folderFileMock);
|
ConfigDriveBuilder.writeVendorDataJsonFile(folderFileMock);
|
||||||
|
|
||||||
Mockito.verify(folderFileMock).exists();
|
Mockito.verify(folderFileMock).exists();
|
||||||
Mockito.verify(folderFileMock).mkdirs();
|
Mockito.verify(folderFileMock).mkdirs();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user