cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Tutkowski <mike.tutkow...@solidfire.com>
Subject Re: VMware API Question
Date Sun, 02 Jun 2013 06:01:32 GMT
Hi Vijay,

I think I understand how to translate this code.

Perhaps you might be willing to do a quick review of what I have when it's
ready?

Talk to you later,


On Sat, Jun 1, 2013 at 8:07 PM, Mike Tutkowski <mike.tutkowski@solidfire.com
> wrote:

> Hi Vijay,
>
> I was wondering - if you had a few moments - if you might give me some
> pointers on how to translate this code I've written in the VI Java API to
> the VI API, which we use in CloudStack?
>
> Below is my createVmfsDatastore method.
>
> Thanks for any time you might be able to spend on this!
>
>  public static void createVmfsDatastore(String url, String username,
> String password, String datacenterName, String clusterName,
>
>  String datastoreName, String storageIpAddress, Integer portNumber,
> String iqn) throws Exception
>
> {
>
>  ServiceInstance si = new ServiceInstance(new URL(url), username,
> password, true);
>
>   ManagedEntity datacenter =
> si.getSearchIndex().findByInventoryPath(datacenterName);
>
>   if (datacenter == null)
>
>  {
>
>  throw new Exception("Datacenter '" + datacenterName + "' was not found."
> );
>
>  }
>
>   InventoryNavigator inventoryNavigator = newInventoryNavigator(si.getRootFolder());
>
>   ClusterComputeResource cluster =
> (ClusterComputeResource)inventoryNavigator.searchManagedEntity(
> "ClusterComputeResource", clusterName);
>
>   if (cluster == null)
>
>  {
>
>  throw new Exception("Cluster '" + clusterName + "' was not found.");
>
>  }
>
>   HostSystem[] aHostSystems = cluster.getHosts();
>
>   if (aHostSystems == null || aHostSystems.length == 0)
>
>  {
>
>  throw new Exception("There are no hosts in cluster '" + clusterName +
> "'.");
>
>  }
>
>   HostInternetScsiHbaStaticTarget target = newHostInternetScsiHbaStaticTarget();
>
>   target.setAddress(storageIpAddress);
>
>  target.setPort(portNumber);
>
>  target.setIScsiName(iqn);
>
>   HostInternetScsiHbaAuthenticationProperties auth = newHostInternetScsiHbaAuthenticationProperties();
>
>   String strAuthType = "chapRequired";
>
>   auth.setChapAuthEnabled(true);
>
>  auth.setChapInherited(false);
>
>  auth.setChapAuthenticationType(strAuthType);
>
>  auth.setChapName("admin");
>
>  auth.setChapSecret("solidfire");
>
>  auth.setMutualChapInherited(false);
>
>  auth.setMutualChapAuthenticationType(strAuthType);
>
>  auth.setMutualChapName("admin2");
>
>  auth.setMutualChapSecret("solidfire2");
>
>   target.setAuthenticationProperties(auth);
>
>   HostInternetScsiHbaStaticTarget[] aTargets = newHostInternetScsiHbaStaticTarget[1];
>
>   aTargets[0] = target;
>
>   for (HostSystem hostSystem : aHostSystems)
>
>  {
>
>  boolean iScsiHbaConfigured = false;
>
>    HostStorageSystem hostStorageSystem =
> hostSystem.getHostStorageSystem();
>
>    for (HostHostBusAdapter hba :
> hostStorageSystem.getStorageDeviceInfo().getHostBusAdapter())
>
>  {
>
>   if (hba instanceof HostInternetScsiHba)
>
>   {
>
>   // just finding an instance of HostInternetScsiHba means that we have
> found at least one configured iSCSI HBA
>
>   // at least one iSCSI HBA must be configured before a CloudStack user
> can use this host for iSCSI storage
>
>   iScsiHbaConfigured = true;
>
>      String iScsiHbaDevice = hba.getDevice();
>
>      hostStorageSystem.addInternetScsiStaticTargets(iScsiHbaDevice,
> aTargets);
>
>      hostStorageSystem.rescanHba(iScsiHbaDevice);
>
>   }
>
>  }
>
>    if (!iScsiHbaConfigured)
>
>  {
>
>   throw new Exception("An iSCSI HBA must be configured before a host can
> use iSCSI storage.");
>
>  }
>
>  }
>
>   HostDatastoreSystem hostDatastoreSystem =
> aHostSystems[0].getHostDatastoreSystem();
>
>   HostScsiDisk[] aHostScsiDisks =
> hostDatastoreSystem.queryAvailableDisksForVmfs(null);
>
>   HostStorageSystem hostStorageSystem =
> aHostSystems[0].getHostStorageSystem();
>
>   HostScsiDisk hostScsiDisk =
> getHostScsiDisk(hostStorageSystem.getStorageDeviceInfo().getScsiTopology(),
> aHostScsiDisks, iqn);
>
>   if (hostScsiDisk == null)
>
>  {
>
>  throw new Exception("A relevant SCSI disk could not be located to use to
> create a datastore.");
>
>  }
>
>   // just grab the first instance of VmfsDatastoreOption
>
>  VmfsDatastoreOption vmfsDatastoreOption =
> hostDatastoreSystem.queryVmfsDatastoreCreateOptions(hostScsiDisk.getDevicePath())[0];
>
>  VmfsDatastoreCreateSpec vmfsDatastoreCreateSpec =
> (VmfsDatastoreCreateSpec)vmfsDatastoreOption.getSpec();
>
>   // set the name of the datastore to be created
>
>  vmfsDatastoreCreateSpec.getVmfs().setVolumeName(datastoreName);
>
>   Datastore datastore =
> hostDatastoreSystem.createVmfsDatastore(vmfsDatastoreCreateSpec);
>
>   if (datastore == null)
>
>  {
>
>  throw new Exception ("Datastore '" + datastoreName + "' could not be
> created.");
>
>  }
>
>   System.out.println("Datastore '" + datastoreName + "' was successfully
> created.");
>
> }
>
>
> On Wed, May 29, 2013 at 7:50 PM, Mike Tutkowski <
> mike.tutkowski@solidfire.com> wrote:
>
>> OK - thanks, Vijay!
>>
>>
>> On Wed, May 29, 2013 at 5:05 PM, Vijayendra Bhamidipati <
>> vijayendra.bhamidipati@citrix.com> wrote:
>>
>>> Hi Mike,
>>>
>>> Your opensource vi java code will be close to what you would implement
>>> using the closed source vi sdk, so though you will have to rewrite some
>>> code, it should be possible to reuse much of your core code, especially
>>> with spec preparation and the like. Cloudstack code already has useful
>>> functions that let you retrieve dynamic properties etc from MORs, so you
>>> would need to replace some of your vi java code with those functions. You
>>> cannot however mix vi java with vi sdk in cloudstack, which uses only vi
>>> sdk. You also won't need to setup the vmware service context, it's already
>>> there in Vmwareresource.java, so you can use that.
>>>
>>> Regards,
>>> Vijay
>>>
>>>
>>> -----Original Message-----
>>> From: Mike Tutkowski [mailto:mike.tutkowski@solidfire.com]
>>> Sent: Wednesday, May 29, 2013 2:40 PM
>>> To: dev@cloudstack.apache.org
>>> Subject: VMware API Question
>>>
>>> Hi,
>>>
>>> I recently completed work in the new storage framework related to
>>> XenServer where I dynamically create a storage repository when attaching a
>>> newly created volume, if need be.
>>>
>>> I now need to implement the same concept for VMware.
>>>
>>> The idea is that I have zone-wide primary storage that is backed by a
>>> plug-in (all new in 4.2).
>>>
>>> When the user creates a volume, we still just add a row to the volumes
>>> table that describes this volume.
>>>
>>> When the user goes to attach this volume to a VM, the storage framework
>>> invokes my plug-in and my plug-in goes off to its SAN to create a
>>> volume...returning info like IQN.
>>>
>>> Next the VMware attach logic is invoked. In this dynamic kind of
>>> zone-wide storage, I need to detect in this VMware code that we do not yet
>>> have a datastore and create this datastore based on the IQN I returned
>>> earlier (and other info like IP address).
>>>
>>> I have this all working for XenServer and am now turning my attention to
>>> VMware.
>>>
>>> My question is simply this:
>>>
>>> It looks like VmwareResourse is written with VI SDK. Since I have my
>>> "create/delete datastore" logic already written in the VI Java API (
>>> http://vijava.sourceforge.net/), I was wondering if it's possible to
>>> mix these two approaches or if I will have to re-write my code.
>>>
>>> Thanks!
>>>
>>> --
>>> *Mike Tutkowski*
>>> *Senior CloudStack Developer, SolidFire Inc.*
>>> e: mike.tutkowski@solidfire.com
>>> o: 303.746.7302
>>> Advancing the way the world uses the
>>> cloud<http://solidfire.com/solution/overview/?video=play>
>>> *(tm)*
>>>
>>
>>
>>
>> --
>> *Mike Tutkowski*
>>  *Senior CloudStack Developer, SolidFire Inc.*
>> e: mike.tutkowski@solidfire.com
>> o: 303.746.7302
>> Advancing the way the world uses the cloud<http://solidfire.com/solution/overview/?video=play>
>> *™*
>>
>
>
>
> --
> *Mike Tutkowski*
> *Senior CloudStack Developer, SolidFire Inc.*
> e: mike.tutkowski@solidfire.com
> o: 303.746.7302
> Advancing the way the world uses the cloud<http://solidfire.com/solution/overview/?video=play>
> *™*
>



-- 
*Mike Tutkowski*
*Senior CloudStack Developer, SolidFire Inc.*
e: mike.tutkowski@solidfire.com
o: 303.746.7302
Advancing the way the world uses the
cloud<http://solidfire.com/solution/overview/?video=play>
*™*

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message