上一篇文章讲了如何授权,在学会使用Openstack4J提供给我们授权的API后,现在我们要开始创建一台VM/实例了。
先授权:
OSClientV3 os = OSFactory.builderV3().endpoint("http://10.0.0.11:5000/v3").credentials("username", "psw", Identifier.byName("default")) .scopeToProject(Identifier.byId("8b21d3e746af43a9af7152d72ad54d02")).authenticate();
授权中需要填写的参数不清楚的可以看上一篇文章哈,这里就不再赘述了。
授权后拿到os,先查看在Openstack上已经有的子网(我们之后创建的虚拟机最后将挂在这个网段上):
List<? extends Subnet> subnets = os.networking().subnet().list();
声明和定义两个字符串变量(一个是subnetID之后会用到,ip就假设是用户想给VM分配的IP地址):
String subnetID = null;
String ip = "192.168.7.33";
刚刚拿到了存在的所有子网的集合,现在我们要在子网中找到跟用户输入的ip同一个网段,然后获取这个网段的netWorkID号,这个ID号之后在创建虚拟机的时候会用到。代码如下:
for (Subnet subnet : subnets) {
if (subnet.getCidr().substring(0, subnet.getCidr().lastIndexOf("."))
.equals(ip.substring(0, ip.lastIndexOf(".")))) {
subnetID = subnet.getNetworkId();
}
}
现在一切就绪,可以创建并启动实例了:
ServerCreate sc = Builders.server().name("Ubuntu 3").flavor("2").image("cbeb615d-fae5-4df7-9fb6-5913fa4c63e9").builsc.addNetwork(subnetID, ip);
erver server = os.compute().servers().boot(sc);
os.compute().servers().action(server.getId(), Action.START);
在一行中有几个参数,这里说明一下:
name:这里输入的字符串就是将来启动的实例的名字。
flavor:flavor标志着给这个实例分配的资源,例如RAM,Vcpu数量等。在装好Openstack后好像一个是有5个默认的flavor的,这里需要输入flavor的ID号 如图 在这里可以看到:
在管理员-系统-flavor数中 可以看到上图所示,倒数第二列的标识实际上就是flavor的ID号,我这里选择的ID为2的flavor。
image:镜像同上,找到镜像的标识号就行了。
上面的代码片的第二句:
sc.addNetwork(subnetID, ip);
这个填写刚刚需要挂的网段ID和用户给VM的IP地址。
这里说一下为什么要找到与用户输入的IP地址的同一网段的子网ID,想一下,用户如果输入的IP地址为:
192.168.10.4 而在Openstack中根本无192.168.10.0这个网段,那怎么可能把实例挂得上去,你总不可能把网段是10.0的挂在网段是7.0上面吧?
最上面的代码片的最后一句,就是启动实例啦。~
启动成功后在Openstack中的dashboard中效果如图:
当然 看到一朵云的图标了吗?那个就是我自己在Openstack上创建的网段,也就是192.168.7.0/24这个网段。没有这个网段,用户刚刚输入的ip地址就挂不上去啦。
本文结束~~!