From 36ec21e38eac2402a841b2d972ed9291c2ceb5fb Mon Sep 17 00:00:00 2001 From: Scott Lowe Date: Wed, 7 Oct 2015 12:29:52 -0600 Subject: [PATCH] Add learning environment for Vagrant and OpenStack Add Vagrantfile and supporting files for using Vagrant with OpenStack. --- vagrant-openstack/README.md | 40 +++++++++++++++++++++++++ vagrant-openstack/Vagrantfile | 49 +++++++++++++++++++++++++++++++ vagrant-openstack/credentials.yml | 4 +++ vagrant-openstack/instances.yml | 8 +++++ 4 files changed, 101 insertions(+) create mode 100644 vagrant-openstack/README.md create mode 100644 vagrant-openstack/Vagrantfile create mode 100644 vagrant-openstack/credentials.yml create mode 100644 vagrant-openstack/instances.yml diff --git a/vagrant-openstack/README.md b/vagrant-openstack/README.md new file mode 100644 index 0000000..16dfb19 --- /dev/null +++ b/vagrant-openstack/README.md @@ -0,0 +1,40 @@ +# Using Vagrant with OpenStack + +These files were created to allow users to use Vagrant ([http://www.vagrantup.com](http://www.vagrantup.com)) to automate the provisioning and de-provisioning of OpenStack instances. This configuration was tested using Vagrant 1.7.4, version 0.7.0 of [the vagrant-openstack-provider plugin](https://github.com/ggiamarchi/vagrant-openstack-provider), and OpenStack "Juno". + +## Contents + +* **credentials.yml**: This YAML file contains the username, password, and tenant name for authenticating against OpenStack. You **must** edit this file to specify the correct information for your OpenStack installation. + +* **instances.yml**: This YAML file contains the instance-specific information for the instance that will be created in OpenStack. You **must** edit this file to specify the correct instance name (as shown in the OpenStack Dashboard), flavor, image, floating IP pool, network name, SSH keypair name, and SSH username. _Failure to edit this file may result in errors trying to run Vagrant._ + +* **README.md**: The file you're currently reading. + +* **Vagrantfile**: This file is used by Vagrant to spin up the OpenStack instance. There are three changes that **must** be made to this file in order for this environment to function properly in your environment: the authentication URL, the path to your SSH keypair, and the security groups for the instance. (See the instructions below for more information.) + +## Instructions + +Note that you'll need a working OpenStack installation in order to use these files. + +1. Edit `credentials.yml` to supply a valid username, password, and tenant name for your particular OpenStack installation. +2. Edit `instances.yml`. The fields in this YAML file is fairly straightforward, but here's a quick breakdown: + * A display name for the instance ("name") + * The name of an OpenStack flavor ("flavor"), which you can obtain using `nova flavor-list` + * The name of an OpenStack image ("image"), obtainable via the `glance image-list` command + * The name of a floating IP pool ("ip_pool") + * The name of the tenant network to which the new instance should be attached ("networks") + * The SSH keypair that OpenStack should inject into the instance ("keypair") + * The username Vagrant can use to log into the instance ("ssh_user"); this will vary from image to image +3. Edit `Vagrantfile` and look for comments stating "Edit the following line with your correct information". There are **three** changes you must make in the `Vagrantfile`: + * You must specify the correct URL for authenticating with OpenStack + * You must provide the correct path for the private key that matches the keypair specified in `instances.yml` + * You must supply the list of security groups that OpenStack should apply to the new instance +4. Ensure that the system running Vagrant has connectivity to the authentication URL for OpenStack. +5. Run `vagrant up` to have Vagrant authenticate to OpenStack and create the desired instance for you. Once the instance is created, you can use `vagrant ssh` to connect to the instance, and `vagrant destroy` will terminate (destroy) the OpenStack instance for you. + +Enjoy! + +## Planned Enhancements + +* Changing the `Vagrantfile` to allow for multi-instance configurations +* Removing all user-specific parameters from the `Vagrantfile` so that no edits are required diff --git a/vagrant-openstack/Vagrantfile b/vagrant-openstack/Vagrantfile new file mode 100644 index 0000000..8dde57d --- /dev/null +++ b/vagrant-openstack/Vagrantfile @@ -0,0 +1,49 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Require the OpenStack provider plugin and YAML module +require 'vagrant-openstack-provider' +require 'yaml' + +# Read YAML file with OpenStack credentials +creds = YAML.load_file('credentials.yml') +instances = YAML.load_file('instances.yml') + +# Specify Vagrant version and Vagrant API version +Vagrant.require_version '>= 1.6.0' +VAGRANTFILE_API_VERSION = '2' +ENV['VAGRANT_DEFAULT_PROVIDER'] = 'openstack' + +# Create and configure the OpenStack instance(s) +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + + # No Vagrant box needed with OpenStack + # config.vm.box = "dummy" + + # Specify OpenStack authentication information + config.vm.provider 'openstack' do |os| + # Edit the following line with your correct information + os.openstack_auth_url = 'http://controller:5000/v2.0' + os.username = creds['username'] + os.password = creds['password'] + os.tenant_name = creds['tenant'] + end # config.vm.provider 'openstack' + + # Specify SSH username and path to private key + config.ssh.username = instances['ssh_user'] + # Edit the following line with your correct information + config.ssh.private_key_path = '~/.ssh/keypair.pem' + + # Configure the OpenStack instance information + config.vm.provider 'openstack' do |os| + os.server_name = instances['name'] + os.flavor = instances['flavor'] + os.image = instances['image'] + os.floating_ip_pool = instances['ip_pool'] + os.networks = instances['networks'] + os.keypair_name = instances['keypair'] + # Edit the following line with your correct information + os.security_groups = ['default','basic-services'] + os.sync_method = 'none' + end # config.vm.provider 'openstack' +end # Vagrant.configure diff --git a/vagrant-openstack/credentials.yml b/vagrant-openstack/credentials.yml new file mode 100644 index 0000000..571a8ba --- /dev/null +++ b/vagrant-openstack/credentials.yml @@ -0,0 +1,4 @@ +--- +username: "demo" +password: "demo" +tenant: "demo" diff --git a/vagrant-openstack/instances.yml b/vagrant-openstack/instances.yml new file mode 100644 index 0000000..be0ca85 --- /dev/null +++ b/vagrant-openstack/instances.yml @@ -0,0 +1,8 @@ +--- +name: "test-01" +flavor: "m1.small" +image: "Ubuntu 14.04.3 LTS x64" +ip_pool: "ext-net-1" +networks: "test-01" +keypair: "keypair-name" +ssh_user: "ubuntu"