Andrew Gaul bfd54049b7 Make auto service optional
This makes dependencies consistent and eliminates warnings of the
form:

$M2_HOME/repository/org/apache/jclouds/driver/jclouds-slf4j/2.1.0-SNAPSHOT/jclouds-slf4j-2.1.0-SNAPSHOT.jar(org/jclouds/logging/slf4j/config/SLF4JLoggingModule.class): warning: Cannot find annotation method 'value()' in type 'AutoService': class file for com.google.auto.service.AutoService not found

Reference:

https://github.com/google/auto/tree/master/service#download
2017-08-30 12:23:49 -07:00
..
2017-08-30 12:23:49 -07:00

jclouds ProfitBricks

Terms

Like any cloud provider, ProfitBricks has its own set of terms in cloud computing. To abstract this into jclouds' Compute interface, these terms were associated:

  • Node - composite instance of Server and Storage
  • Image - both user-uploaded and provided Images; and Snapshots
  • Location - DataCenters and Region (Las Vegas, Frankfurt, etc.)
  • Hardware - number of cores, RAM size and storage size

Getting Started

ComputeService compute = ContextBuilder.newBuilder( "profitbricks" )
					.credentials( "profitbricks email", "password" )
					.buildView( ComputeServiceContext.class )
					.getComputeService();

This works well; however, we won't be able to use jclouds' ability to execute scripts on a remote node. This is because, ProfitBricks' default images require users to change passwords upon first log in.

To enable jclouds to execute script, we need to use a custom image. The easiest way to do this is via ProfitBricks snapshot:

  • Go to your DCD.
  • Provision a server + storage, and connect it to the internet. Upon success, you will receive an email containing the credentials needed to login to your server.
  • Login to your server, and change the password, as requested.
~ ssh root@<remote-ip>
...
Changing password for root.
(current) UNIX password: 
Enter new UNIX password: 
Retype new UNIX password: 
~ root@ubuntu:~# exit

  • Go back to the DCD, and make a snapshot of the storage. Put a descriptive name.
  • Configure jclouds to use this snapshot.
Template template = compute.templateBuilder()
	.imageNameMatches( "<ideally-unique-snapshot-name>" )
	.options( compute.templateOptions()
				.overrideLoginUser( "root" ) // unless you changed the user
				.overrideLoginPassword( "<changed-password>" ))
	// more options, as you need
	.build();
	
compute.createNodesInGroup( "cluster1", 1, template );

Limitations

  • There's no direct way of specifying arbitrary number of cores, RAM size, and storage size via the compute interface, at least until after JCLOUDS-482 is resolved. The adapter uses a predefined list hardware profiles instead.

Take note that these features are still accessible by unwraping the ProfitBricks API, but this'll reduce portability of your code. See Concepts.