Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
import org.openstack4j.api.AbstractTest;
import org.openstack4j.api.Builders;
import org.openstack4j.api.exceptions.ServerResponseException;
import org.openstack4j.model.common.ActionResponse;
import org.openstack4j.model.compute.Server;
import org.openstack4j.model.compute.Server.Status;
import org.openstack4j.model.compute.ServerPassword;
import org.openstack4j.model.compute.actions.EvacuateOptions;
import org.openstack4j.model.compute.actions.RebuildOptions;
import org.testng.Assert;
import org.testng.annotations.Test;

Expand All @@ -33,6 +35,7 @@ public class ServerTests extends AbstractTest {
private static final String JSON_SERVER_CREATE = "/compute/server_create.json";
private static final String JSON_SERVER_EVACUATE = "/compute/server_evacuate.json";
private static final String JSON_SERVER_CONSOLE_OUTPUT = "/compute/server_console_output.json";
private static final String JSON_SERVER_REBUILD = "/compute/server_rebuild.json";

@Test
public void listServer() throws Exception {
Expand Down Expand Up @@ -157,4 +160,17 @@ public void getServerConsoleOutputNonExistingServer() throws Exception {
takeRequest();
}

@Test
public void rebuildServer() throws Exception {
respondWith(JSON_SERVER_REBUILD);

RebuildOptions rebuildOptions = RebuildOptions.create().image("70a599e0-31e7-49b7-b260-868f441e862b").userData("ZWNobyAiaGVsbG8gd29ybGQi");

ActionResponse actionResponse = osv3().compute().servers().rebuild("0c37a84a-c757-4f22-8c7f-0bf8b6970886", rebuildOptions);
assertNotNull(actionResponse);
assertTrue(actionResponse.isSuccess());

takeRequest();
}

}
89 changes: 89 additions & 0 deletions core-test/src/main/resources/compute/server_rebuild.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
{
"server": {
"OS-DCF:diskConfig": "AUTO",
"OS-EXT-AZ:availability_zone": "us-west",
"OS-EXT-SRV-ATTR:host": "compute",
"OS-EXT-SRV-ATTR:hostname": "new-server-test",
"OS-EXT-SRV-ATTR:hypervisor_hostname": "fake-mini",
"OS-EXT-SRV-ATTR:instance_name": "instance-00000001",
"OS-EXT-SRV-ATTR:kernel_id": "",
"OS-EXT-SRV-ATTR:launch_index": 0,
"OS-EXT-SRV-ATTR:ramdisk_id": "",
"OS-EXT-SRV-ATTR:reservation_id": "r-t61j9da6",
"OS-EXT-SRV-ATTR:root_device_name": "/dev/sda",
"OS-EXT-STS:power_state": 1,
"OS-EXT-STS:task_state": null,
"OS-EXT-STS:vm_state": "active",
"OS-SRV-USG:launched_at": "2019-04-23T15:19:10.855016",
"OS-SRV-USG:terminated_at": null,
"accessIPv4": "1.2.3.4",
"accessIPv6": "80fe::",
"addresses": {
"private": [
{
"OS-EXT-IPS-MAC:mac_addr": "00:0c:29:0d:11:74",
"OS-EXT-IPS:type": "fixed",
"addr": "192.168.1.30",
"version": 4
}
]
},
"adminPass": "seekr3t",
"config_drive": "",
"created": "2019-04-23T17:10:22Z",
"description": null,
"flavor": {
"disk": 1,
"ephemeral": 0,
"extra_specs": {},
"original_name": "m1.tiny",
"ram": 512,
"swap": 0,
"vcpus": 1
},
"hostId": "2091634baaccdc4c5a1d57069c833e402921df696b7f970791b12ec6",
"host_status": "UP",
"id": "0c37a84a-c757-4f22-8c7f-0bf8b6970886",
"image": {
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
"links": [
{
"href": "http://openstack.example.com/6f70656e737461636b20342065766572/images/70a599e0-31e7-49b7-b260-868f441e862b",
"rel": "bookmark"
}
]
},
"key_name": null,
"links": [
{
"href": "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/servers/0c37a84a-c757-4f22-8c7f-0bf8b6970886",
"rel": "self"
},
{
"href": "http://openstack.example.com/6f70656e737461636b20342065766572/servers/0c37a84a-c757-4f22-8c7f-0bf8b6970886",
"rel": "bookmark"
}
],
"locked": false,
"locked_reason": null,
"metadata": {
"meta_var": "meta_val"
},
"name": "foobar",
"os-extended-volumes:volumes_attached": [],
"progress": 0,
"security_groups": [
{
"name": "default"
}
],
"server_groups": [],
"status": "ACTIVE",
"tags": [],
"tenant_id": "6f70656e737461636b20342065766572",
"trusted_image_certificates": null,
"updated": "2019-04-23T17:10:24Z",
"user_data": "ZWNobyAiaGVsbG8gd29ybGQi",
"user_id": "admin"
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package org.openstack4j.model.compute.actions;

import java.util.List;
import java.util.Map;

import org.openstack4j.model.compute.Personality;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
* Options used to invoke the Rebuild Action on a Server
*
* @author Jeremy Unruh
*/
public final class RebuildOptions extends BaseActionOptions {

private RebuildOptions() {
super();
}
Expand Down Expand Up @@ -40,6 +45,21 @@ public RebuildOptions name(String name) {
add(Option.NAME, name);
return this;
}

public RebuildOptions userData(String userData) {
add(Option.USER_DATA, userData);
return this;
}

public RebuildOptions personality(List<Personality> personality) {
add(Option.PERSONALITY, personality);
return this;
}

public RebuildOptions metadata(Map<String, String> metadata) {
add(Option.METADATA, metadata);
return this;
}

/**
* Can optionally specify a new admin password to be used during the rebuild
Expand All @@ -63,11 +83,28 @@ public String getAdminPass() {
public String getImageRef() {
return get(Option.IMAGE);
}

@JsonProperty("user_data")
public String getUserData() {
return get(Option.USER_DATA);
}

public List<Personality> getPersonality() {
return get(Option.PERSONALITY);
}

public Map<String, String> getMetadata() {
return get(Option.METADATA);
}

private enum Option implements OptionEnum {
IMAGE("imageRef"),
NAME("name"),
ADMIN_PASS("adminPass");
ADMIN_PASS("adminPass"),
USER_DATA("user_data"),
PERSONALITY("personality"),
METADATA("metadata");

private final String param;

private Option(String param) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package org.openstack4j.openstack.compute.domain.actions;

import java.util.List;
import java.util.Map;

import org.openstack4j.model.compute.Personality;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import org.openstack4j.model.compute.actions.RebuildOptions;
Expand All @@ -23,13 +28,21 @@ public class RebuildAction implements ServerAction {
@JsonProperty
private String adminPass;

@JsonProperty("user_data")
private String userData;
private List<Personality> personality;
private Map<String, String> metadata;

public static RebuildAction create(RebuildOptions options) {
RebuildAction action = new RebuildAction();

if (options != null) {
action.name = options.getName();
action.adminPass = options.getAdminPass();
action.imageRef = options.getImageRef();
action.userData = options.getUserData();
action.personality = options.getPersonality();
action.metadata = options.getMetadata();
}
return action;
}
Expand All @@ -45,5 +58,15 @@ public String getName() {
public String getAdminPass() {
return adminPass;
}

public String getUserData() {
return userData;
}

public List<Personality> getPersonality() {
return personality;
}

public Map<String, String> getMetadata() {
return metadata;
}
}