Os parâmetros da nuvem IBM® são passados de uma imagem para uma instância usando um arquivo XML chamado parameters.xml. Esse arquivo está localizado no conteúdo de RAM referente à imagem e, em seguida, é copiado sob o diretório /etc/cloud (para o Linux®) na sua instância com os parâmetros reais.
Defina parâmetros customizados para criar a sua instância no arquivo parameters.xml. Por exemplo: é possível ter uma imagem customizada que configura Virtual Network Computing (VNC) no tempo de criação da instância. A imagem solicita os parâmetros ID do usuário, senha e senha de VNC (veja a Figura 1).
Figura 1. Definindo parâmetros para criar a sua instância
Se, por exemplo, você quer criar um programa Java™ que extrai os parâmetros do arquivo XML da imagem ou da instância, é necessário ler esse arquivo de parâmetro a partir do programa Java. Por exemplo: se você quer criar o seu próprio portal que fornece a capacidade de solicitar instâncias a partir de imagens. É necessário saber quais parâmetros a imagem solicita para desenvolver dinamicamente a sua solicitação de tela. Além disso, é preciso obter essas informações dinamicamente, e não como um resultado estático; ao fazer isso, você evita criar telas específicas a partir de cada tipo de imagem e, em seguida, postar os valores no arquivo de parâmetro novamente.
É possível recuperar o parameters.xml usando a API IBM Cloud Java e o método Image.getManifest() . Este artigo fornece um conjunto de APIs que oferece todos os métodos necessários para acessar o parameters.xml. Existem diversos métodos para analisar arquivos XML, mas, neste artigo, o exemplo usa o JAXB, que permite serializar e desserializar arquivos XML.
Primeiramente, alguns conceitos
O JAXB pode criar um pacote Java com base em um arquivo XSD. Localize o arquivo parameters.xsd no documento "Creating and customizing images" (consulte Recursos).
A partir desse arquivo XSD, use a ferramenta xjc fornecida pelo Java para gerar o pacote Java que conterá as classes que representam o modelo de parâmetro e uma classe factory. Essas classes geradas são usadas para acessar o parameters.xml.
Esse é o conceito do qual você precisa. Vamos criar o pacote Java.
Conforme o que mencionamos anteriormente, use a ferramenta xjc fornecida pelo Java, mas primeiro você precisa do arquivo parameters.xsd. Neste momento, a melhor forma de criar o arquivo parameters.xsd é copiá-lo e colá-lo a partir do documento "Creating and customizing images" disponível na guia Support da nuvem IBM (consulte Recursos).
Depois de obter o arquivo parameters.xsd, basta inserir o comando a seguir para gerar o seu pacote:
xjc -p <packageName> parameters.xsd |
É criado um pacote no seu diretório atual, semelhante a este:
C:\Documents and Settings\Dominique\workspaceCloud\com.ibm.cloud.parameters\src>xjc -p com.ibm.cloud.parameters ../resource/parameters.xsd parsing a schema... compiling a schema... com\ibm\cloud\parameters\DataType.java com\ibm\cloud\parameters\Field.java com\ibm\cloud\parameters\ObjectFactory.java com\ibm\cloud\parameters\OptionType.java com\ibm\cloud\parameters\Options.java com\ibm\cloud\parameters\Parameters.java com\ibm\cloud\parameters\Values.java |
Importe esse pacote para o seu projeto Java (Figura 2):
Figura 2. Importe o pacote de parâmetros para o projeto Java
Neste pacote, é possível ver Plain Old Java Objects (POJOs) que representam cada objeto definido no arquivo XSD e uma classe factory.
Testando o pacote de parâmetros
Execute um pequeno programa para testar o seu pacote de parâmetros Java:
String cloudPasswordFile = args[0];
cloudUserId = args[1];
String cloudPassPhrase = args[2];
// Retrieve cloud access information.
cloudPassword = PasswordFileProcessor.getRealPassword(
cloudPassPhrase, cloudPasswordFile, cloudUserId);
Properties props = new Properties();
props.load(new FileInputStream("cloud.properties"));
address = props.getProperty("address",
"https://www-147.ibm.com/cloud/enterprise/");
// Set Credential and address.
client.setRemoteCredentials(cloudUserId, cloudPassword);
client.setEndpointAddress(address);
//Search for an image description
Image image = client.describeImage("20004761");
Security.setProperty("ssl.SocketFactory.provider",
"com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider",
"com.ibm.jsse2.SSLServerSocketFactoryImpl");
//Create an http client
HttpClient httpclient = new HttpClient();
Credentials defaultcreds =
new UsernamePasswordCredentials(cloudUserId, cloudPassword);
httpclient.getState().setCredentials(AuthScope.ANY, defaultcreds);
//Create the method, it is important to use the escape
//because the url contains '{' and '}'.
GetMethod httpget = new GetMethod(new HttpsURL(image.getManifest()).getEscapedURI());
//Execute the request
httpclient.executeMethod(httpget);
//Get the result
String result = httpget.getResponseBodyAsString();
//Prepare JAXB
JAXBContext jc;
jc = JAXBContext.newInstance("com.ibm.cloud.parameters");
Unmarshaller u = jc.createUnmarshaller();
//Unmarshal the result
Parameters parameters = (Parameters) u.unmarshal(new StringReader(result));
//Display the parameters
for (Field field : parameters.getField()) {
System.out.println("Field Name=" + field.getName());
}
|
No exemplo, usamos uma imagem customizada com imageID=20004761. Pode-se localizar o ID da imagem buscando no Asset Catalog. (Control Panel > View Asset Catalog. Ao selecionar uma imagem a partir de My Dashboard ou de Assets, o ID é especificado no campo de ID de imagem.)
Esse arquivo parameters.xml se parece com:
<parameters xsi:noNamespaceSchemaLocation=
"platform:/resource/com.ibm.ccl.devcloud.client/schema/parameters.xsd">
<field name="userID" label="User ID" type="string"/>
<field name="userPassword" label="User Password" type="password"
pattern="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"
patternErrorMessage="Invalid Password. Must contain at least 1 number,
at least 1 lower case letter, and at least 1 upper case letter.">
</field>
<field name="vncPassword" label="VNC Password" type="password"
pattern="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"
patternErrorMessage="Invalid Password. Must contain at least 1 number,
at least 1 lower case letter, and at least 1 upper case letter.">
</field>
</parameters>
|
E os resultados são:
Field Name=userID Field Name=userPassword Field Name=vncPassword |
Há várias técnicas de conversão de XML para modelos Java usando tecnologias como XMLBeans e XStreams, mas o JAXB é um dos meios mais simples. Espero que este artigo o estimule a usar a API Java IBM Cloud para preencher os seus requisitos relacionados à nuvem IBM e, talvez, a desenvolver o seu próprio método para criar instâncias.
Aprender
-
Para saber mais sobre como realizar tarefas na nuvem IBM, visite estes recursos:
- Faça upload e download de arquivos a partir de uma instância do Windows.
- Instalar o servidor da Web IIS no Windows 2008 R2.
- Crie uma instância da nuvem IBM com a linha de comando do Linux.
- Crie uma instância da nuvem IBM com a linha de comando do Windows.
- Estenda a sua rede corporativa com a nuvem IBM.
- Aplicativos de alta disponibilidade na nuvem IBM.
- Parametrize imagens de nuvem para instâncias customizadas dinamicamente.
- Abordagens focadas no Windows para fornecimento na nuvem IBM.
-
O documento mencionado neste artigo Creating and customizing images, fornece o arquivo XSD e a ferramenta xjc. Também pode ser localizado a partir da guia Support do painel da nuvem IBM (é necessário fazer login na nuvem IBM).
-
Nos recursos para desenvolvedores de nuvem do developerWorks, descubra e compartilhe o conhecimento e a experiência dos desenvolvedores de aplicativos e serviços que estão desenvolvendo os seus projetos de implementação de nuvem.
-
As próximas etapas: Descubra como acessar o IBM Smart Business Development and Test on the IBM Cloud.
Obter produtos e tecnologias
-
Consulteas imagens do produto disponíveis no IBM Smart Business Development and Test IBM Cloud.
Discutir
-
Participe de um grupo sobre computação em nuvem no My developerWorks.
-
Leia todos os ótimos blogs sobre nuvem no My developerWorks.
-
Participe da comunidade do developerWorks, uma rede profissional e conjunto de ferramentas comunitárias para conectar, compartilhar e colaborar.

Nos últimos anos, Dominique Vernier se concentrou em tecnologias Java e arquitetura de nuvem. Ele também trabalha em tecnologia da informação há algum tempo, tendo obtido conhecimento amplo em tecnologias e produtos como sistema de mensagens, banco de dados, SOA, EAI, cliente/servidor, C/C++ e estruturas existentes. Dominique também possui extenso conhecimento de áreas do setor como telecomunicações, CRM, logística e seguros. Ele é o autor/coautor de quatro patentes relacionadas a motores de estado e gerenciamento de recursos. Atualmente, Dominique é responsável por Desenvolvimento e Teste de Negócios Inteligentes em soluções da Nuvem IBM na Equipe Global IBM GTS.