All Projects → test-kitchen → vmware-vra-gem

test-kitchen / vmware-vra-gem

Licence: Apache-2.0 license
A Ruby Gem for interacting with the VMware vRealize Automation system

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to vmware-vra-gem

kitchen-google
Google Compute Engine driver for Test-Kitchen
Stars: ✭ 47 (+193.75%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
kitchen-habitat
A Test Kitchen Driver for Habitat
Stars: ✭ 13 (-18.75%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
busser
Kitchen Busser - Runs tests for projects in test-kitchen
Stars: ✭ 47 (+193.75%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
kitchen-dsc
A DSC Provisioner for Test-Kitchen
Stars: ✭ 27 (+68.75%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
busser-serverspec
A Busser runner plugin for the serverspec testing library
Stars: ✭ 51 (+218.75%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
busser-rspec
Run RSpec tests through busser
Stars: ✭ 12 (-25%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
kitchen-pester
A Test Kitchen driver to execute Pester as a verifier
Stars: ✭ 29 (+81.25%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
dokken-images
Minimal Docker Images for testing
Stars: ✭ 20 (+25%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
kitchen-rackspace
A Rackspace Cloud driver for Test Kitchen
Stars: ✭ 15 (-6.25%)
Mutual labels:  ruby-gem, test-kitchen, managed-by-terraform
terraform-provider-vra
Terraform VMware vRealize Automation provider
Stars: ✭ 82 (+412.5%)
Mutual labels:  vra, vmware-vrealize-automation
request store-sidekiq
Provides an easy integration between RequestStore and Sidekiq
Stars: ✭ 32 (+100%)
Mutual labels:  ruby-gem
syobocal
Simle gem for Syboi Calendar
Stars: ✭ 13 (-18.75%)
Mutual labels:  ruby-gem
ruby-sdk
♦️ Ruby SDK to use the IBM Watson services.
Stars: ✭ 45 (+181.25%)
Mutual labels:  ruby-gem
scoruby
Ruby Scoring API for PMML
Stars: ✭ 69 (+331.25%)
Mutual labels:  ruby-gem
activerecord-setops
Union, Intersect, and Difference set operations for ActiveRecord (also, SQL's UnionAll).
Stars: ✭ 21 (+31.25%)
Mutual labels:  ruby-gem
Ansible-VMware-vRealize-Automation
Ansible playbook to deploy VM on vRA
Stars: ✭ 23 (+43.75%)
Mutual labels:  vra
eqn
A gem to evaluate mathematical equations.
Stars: ✭ 32 (+100%)
Mutual labels:  ruby-gem
hurriyet-cli
A Ruby CLI for Hurriyet
Stars: ✭ 14 (-12.5%)
Mutual labels:  ruby-gem
churnalizer
Analyze your Ruby app for Churn vs Complexity
Stars: ✭ 17 (+6.25%)
Mutual labels:  ruby-gem
highlights-jekyll-theme
A Jekyll version of the "Highlights" theme by HTML5 UP.
Stars: ✭ 26 (+62.5%)
Mutual labels:  ruby-gem

VMware vRA Gem

Gem Version

Client gem for interacting with VMware's vRealize Automation application.

Not all vRA functionality is included in this gem; only API calls necessary to interact with the catalog, requests, and existing items is included.

The primary goal of this gem is to provide a reusable set of methods in order to create Chef plugins for knife, test-kitchen, and provisioning.

Versions

1.7.0 version can and will support vRA 6 and below.

2.0.0 version and forward will support vRA 7+.

3.0.0 version and forward will support vRA 8+.

Installation

Add this line to your application's Gemfile:

gem 'vmware-vra'

And then execute:

bundle

Or install it yourself as:

gem install vmware-vra

Usage

First, load in the gem.

require 'vra'
=> true

Then, set up your client object. You will need to know your tenant ID from your vRA administrator.

client = Vra::Client.new(username: '[email protected]', password: 'mypassword', tenant: 'mytenant', base_url: 'https://vra.corp.local', verify_ssl: true)
=> #<Vra::Client:0x000000034c0df8 ... >

Catalog Types

To list all the catalog types:

client.catalog.all_types
 => [#<Vra::CatalogType:0x00007fcde6855370 @id="com.vmw.vro.workflow", @data={"id"=>"com.vmw.vro.workflow", ... ]

Catalog Sources

To list all the catalog sources:

client.catalog.all_sources
[#<Vra::CatalogSource:0x00007fcde3948c30 @id="2f5b2d5c-6dc2-4ea7-b304-cd8fea5ede0f", @data= ...]

And to list the sources that are entitled only:

client.catalog.entitled_sources(project_id)
=> [#<Vra::CatalogSource:0x00007fcde2a28c00 @id="18102dc2-9e48-487a-93a8-aafab2ecc05 ...]

Creating a new source can be done as follows:

source = Vra::CatalogSource.create(client, name: 'New source', catalog_type_id: 'com.vmw.vro.workflow', project_id: project_id)
 => #<Vra::CatalogSource:0x00007fad651f63b8 ... >

Catalog Items

To list all items in the catalog:

client.catalog.all_items
 => [#<Vra::CatalogItem:0x00007fe583863b28>, #<Vra::CatalogItem:0x00007fe583863ad8 ... ]

To only list the items in the catalog for which you are entitled to request:

client.catalog.entitled_items(project_id)
=> [#<Vra::CatalogItem:0x00007fe583863b28>, #<Vra::CatalogItem:0x00007fe583863ad8 ... ]

To retrive catalog id from catalog name:

client.catalog.fetch_catalog_items('centos')
 =>
[#<Vra::CatalogItem:0x00007fb734110f60
  @id="f2e8c6ee-dd00-32c4-94c7-0a50046cb2f3",
  @data={
    "name"=>"oe-centos-1633598756_bp",
  ...>
]

Requesting Deployments

When you are ready to request a deployment using a catalog, create a new deployment object:

request = client.catalog.request(
  catalog_id, 
  image_mapping: 'VRA-nc-lnx-ce8.4-Docker',
  flavor_mapping: 'Small',
  name: 'CentOS VRA8 Test',
  project_id: project_id,
  version: '1'
)
 =>
#<Vra::DeploymentRequest:0x00007fb7340b7438
...

To request a deployment from a catalog item, you can use the above method with a project ID that has a cloud template version released to the project.

The ID of the catalog item from which you are requesting the deployment should be also included, and the version of the released cloud template. If the user doesn't specify a version explicitly, the latest version will be fetched automatically and will be used for the request.

Additionally, the name of the deployment should be specified and it should be unique. The image mapping specifies the OS image for a VM and the flavor mapping specifies the CPU count and RAM of a VM.

If your catalog blueprint item requires additional parameters to successfully submit your request, you may add them:

request.set_parameter('my_parameter', 'string', 'my value')

Managing the deployment

Now, submit your request! The client will return a new "Deployment" object you can use to query for status.

deployment = catalog_request.submit
=> #<Vra::Deployment:0x000000027caea0 ... >

deployment.status
=> "IN_PROGRESS"

You can refresh your deployment object to get the latest status:

deployment.refresh && deployment.status
=> "SUCCESSFUL"

You can also save the deployment ID for later, and create a new deployment object at your leisure to follow-up on your deployment request:

deployment.id
=> "aed22465-02db-481d-b55a-cefe216096a2"

new_deployment = client.deployments.by_id('aed22465-02db-481d-b55a-cefe216096a2')
=> #<Vra::Deployment:0x0000000564ac30 ... >

new_deployment.status
=> "CREATE_SUCCESSFUL"

Deployment Resources

When the deployment request is successful, you can query the resources created as the result of your request. Assuming that the catalog item blueprint we requested only creates a single VM, we can get that resource and learn more information about it:

resource = deployment.resources.first
=> #<Vra::Resource:0x00000006772e68 ... >

resource.network_interfaces
=> [{"NETWORK_ADDRESS"=>"192.168.110.203", "NETWORK_MAC_ADDRESS"=>"00:50:56:ae:1d:c7", "NETWORK_NAME"=>"vxw-dvs-35-virtualwire-2-sid-5000-Edge_Transport"}]

resource.ip_addresses
=> ["192.168.110.203"]

resource.name
=> "hol-dev-32"

If you have the resource_id and the deployment object, you can fetch the resources details as follows

resource.id
=> "331fd10b-f2a2-40ae-86bc-1255c1ee9a6d"

new_resource = deployment.resource_by_id('331fd10b-f2a2-40ae-86bc-1255c1ee9a6d')
=> #<Vra::Resource:0x000000067c13b0 ... >

new_resource.name
=> "hol-dev-32"

Deleting a deployment from vRA

When you no longer need the VM, you can destroy the deployment which will delete all the associated resources as well. The method will return a request object you can query for status:

destroy_req = deployment.destroy
=> #<Vra::Request:0x00000006ea90d8 ... >

destroy_req.status
=> "SUCCESSFUL"

You can also list all resources and requests you have permission to see with these methods:

deployment.resources
deployment.requests

Pagination

vRA paginates API requests where lists of items are returned. By default, this gem will ask vRA to provide items in groups of 20. However, as reported in Issue 10, it appears vRA may have a pagination bug. You can change the default page size from 20 to a value of your choice by passing in a page_size option when setting up the client:

vra = Vra::Client.new(username: '[email protected]', password: 'mypassword', tenant: 'mytenant', base_url: 'https://vra.corp.local', verify_ssl: true, page_size: 100)

... or setting page_size on the client object after you've created it:

client.page_size = 100

Debugging

To aid diagnosis of deep API issues, set the following environment variable to enable logging of all API requests. Note that this will include requests to retrieve the bearer token.

MacOS/Linux:

export VRA_HTTP_TRACE=1

Windows:

$env:VRA_HTTP_TRACE=1

License and Authors

Author:: Chef Partner Engineering ([email protected])

Copyright:: Copyright (c) 2022 Chef Software, Inc.

License:: Apache License, Version 2.0

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Contributing

  1. Fork it ( https://github.com/[my-github-username]/vmware-vra-gem/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].