{"id":5793,"date":"2014-09-16T13:18:11","date_gmt":"2014-09-16T11:18:11","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=5793"},"modified":"2015-03-12T17:54:56","modified_gmt":"2015-03-12T15:54:56","slug":"how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/","title":{"rendered":"How to set up a standalone Swift installation in a VM and test it"},"content":{"rendered":"<p><em>In this tutorial, we will be speaking about a &#8220;Swiftbox&#8221;. This is nothing more than our terminology for an Openstack installation that only needs and uses Swift and Keystone. The use and setup of this Swiftbox will be explained in this article.<\/em><\/p>\n<p>The reason why someone might want a stripped-down <a href=\"http:\/\/www.openstack.org\">OpenStack<\/a> installation with only <a href=\"http:\/\/docs.openstack.org\/developer\/swift\/\">Swift<\/a> and <a href=\"http:\/\/docs.openstack.org\/developer\/keystone\/\">Keystone<\/a> running, is that it allows easy testing of Swift services. A Swiftbox can be used to try understanding how object storage works. Also, having an independent object storage, is a good perk: it allows testing or running various different projects, with\u00a0only one Swiftbox to be configured for everything.<\/p>\n<p>A use case for this standalone Swift installation is to reproduce an isolated and potentially local environment to test applications that need or want to use Swift\u00a0as their object storage\u00a0backend. This can prove useful\u00a0to experiment with the technology as well as to debug or exercise existing applications.<\/p>\n<p>For the simplified nature of the Swift installation here described (everything runs inside a VM and not over a cluster of nodes!), this procedure should not be considered to run Swift for anything else than a stubby backend for a testing environment.<\/p>\n<p>The main\u00a0steps\u00a0to set up a Swiftbox are:<\/p>\n<ul>\n<li>Creating and configuring a VM (we will use Vagrant and run a Ubuntu Server 14.04 box)<\/li>\n<li>Configuring <a href=\"http:\/\/devstack.org\">Devstack<\/a><\/li>\n<li>Configuring a Keystone endpoint for Swift<\/li>\n<li>Testing Swift<\/li>\n<li>Some troubleshooting<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p><strong>INSTALLATION<\/strong><\/p>\n<p>First things first. The very first step is to download and install Vagrant (<a href=\"http:\/\/www.vagrantup.com\" target=\"_blank\">vagrantup.com<\/a>). It&#8217;s important that you install an updated version (this tutorial was tested with version 1.6.5) &#8211; note that packaged versions shipping with your OS repository may be old.<\/p>\n<p>Vagrant is a tool that lets us manage and automatize the deployment of\u00a0VMs, using configuration files and the command line. We only have the stuff we need and actually want. It&#8217;s best when you have a directory in which you want to collect the VM files:<\/p>\n<pre style=\"color: #000000\">$ mkdir swiftbox\/\r\n$ cd swiftbox\/<\/pre>\n<p>Now that we are in the directory we want the VM to be in, we use Vagrant to download a pre-built Ubuntu box and setup a VM. Vagrant will create a Vagrantfile in which the configuration of the VM can be set.\u00a0To download the Ubuntu 14.04 Vagrant box and initialize our VM, you can do the following:<\/p>\n<pre style=\"color: #000000\">$ vagrant box add ubuntu\/trusty64 # downloads the box with the OS\r\n$ vagrant init # creates the Vagrantfile<\/pre>\n<p>The Vagrantfile is now in the directory, and ready to be configured. Open this file\u00a0with your preferred text editor. The configurations have to be changed, so<\/p>\n<ul>\n<li>the correct\u00a0box will be used.<\/li>\n<li>the ports 8080 (for Swift) and 5000 (for Keystone clients) will be forwarded.<\/li>\n<li>a private IP address will be set.<\/li>\n<\/ul>\n<p>Port forwarding allows the request on these host\u00a0ports to be redirected to the guest VM. By doing so, the Swift service will become accessible from the outside of the host running the VM. The Vagrantfile should look like this now:<\/p>\n<pre style=\"color: #000000\">VAGRANTFILE_API_VERSION = \"2\"\r\n<span id=\"line-2-2\" class=\"anchor\"><\/span>\r\n<span id=\"line-3\" class=\"anchor\"><\/span>Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|\r\n<span id=\"line-4\" class=\"anchor\"><\/span> config.vm.box = \"ubuntu\/trusty64\"\r\n<span id=\"line-5\" class=\"anchor\"><\/span>\r\n<span id=\"line-6\" class=\"anchor\"><\/span> config.vm.network \"forwarded_port\", guest: 8080, host: 8080\r\n<span id=\"line-7\" class=\"anchor\"><\/span> config.vm.network \"forwarded_port\", guest: 5000, host: 5000\r\n<span id=\"line-8\" class=\"anchor\"><\/span>\r\n<span id=\"line-9\" class=\"anchor\"><\/span> config.vm.network \"private_network\", ip: \"192.168.33.10\"\r\n<span id=\"line-10\" class=\"anchor\"><\/span>end<\/pre>\n<p>The Next step is to fire up the VM, ssh into it and start setting up the SwiftBox by\u00a0downloading Devstack:<\/p>\n<pre>$ vagrant up #starts the VM\r\n$ vagrant ssh #enters the VM<\/pre>\n<p>To download Devstack your machine will need git, which is not installed yet. So install git and download the Devstack repository.<\/p>\n<pre style=\"color: #000000\">$ sudo apt-get install git\r\n$ git clone https:\/\/github.com\/openstack-dev\/devstack.git<\/pre>\n<p>Now, we don&#8217;t want or need an entire\u00a0Devstack installation: since the Swiftbox only needs Swift\u00a0and Keystone the other services can be disabled. We configure Devstack\u00a0in a local.conf file, which we create in the Devstack directory (the one that was created by cloning the repository):<\/p>\n<pre style=\"color: #000000\">$ cd devstack\r\n# use nano if you prefer, as editor\r\n$ vim local.conf<\/pre>\n<p>In the local.conf file configurations have to be set for:<\/p>\n<ul>\n<li>general stuff like passwords or the service token<\/li>\n<li>the logging<\/li>\n<li>enabling and disabling of the services<\/li>\n<li>configurations for Swift<\/li>\n<\/ul>\n<p>The local.conf should look similar to this now (obviously you can pick your own password and you can generate a new uuid for the token with the uuidgen command):<\/p>\n<pre style=\"color: #000000\">[[local|localrc]]\r\n<span id=\"line-2-4\" class=\"anchor\"><\/span>DEST=\/opt\/stack\r\n<span id=\"line-3-1\" class=\"anchor\"><\/span>ADMIN_PASSWORD=secrete\r\n<span id=\"line-4-1\" class=\"anchor\"><\/span>DATABASE_PASSWORD=$ADMIN_PASSWORD\r\n<span id=\"line-5-1\" class=\"anchor\"><\/span>RABBIT_PASSWORD=$ADMIN_PASSWORD\r\n<span id=\"line-6-1\" class=\"anchor\"><\/span>SERVICE_PASSWORD=$ADMIN_PASSWORD\r\n<span id=\"line-7-1\" class=\"anchor\"><\/span>SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50\r\n<span id=\"line-8-1\" class=\"anchor\"><\/span>\r\n<span id=\"line-9-1\" class=\"anchor\"><\/span>##logging\r\n<span id=\"line-10-1\" class=\"anchor\"><\/span>LOGFILE=$DEST\/logs\/stack.sh.log\r\n<span id=\"line-11\" class=\"anchor\"><\/span>LOGDAYS=1\r\n<span id=\"line-12\" class=\"anchor\"><\/span>\r\n<span id=\"line-13\" class=\"anchor\"><\/span>##services\r\n<span id=\"line-14\" class=\"anchor\"><\/span>disable_all_services\r\n<span id=\"line-15\" class=\"anchor\"><\/span>enable_service key mysql s-proxy s-object s-container s-account\r\n<span id=\"line-16\" class=\"anchor\"><\/span>\r\n<span id=\"line-17\" class=\"anchor\"><\/span>##swift\r\n<span id=\"line-18\" class=\"anchor\"><\/span>SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5\r\n<span id=\"line-19\" class=\"anchor\"><\/span>SWIFT_REPLICAS=1\r\n<span id=\"line-20\" class=\"anchor\"><\/span>SWIFT_DATA_DIR=$DEST\/data\/swift<\/pre>\n<p>After configuring Devstack we can install it with:<\/p>\n<pre style=\"color: #000000\">$ .\/stack.sh<\/pre>\n<p>To actually use Swift, an endpoint has to be configured for it in Keystone. Keystone serves the purpose that it provides authorization for the other OpenStack\u00a0services. So, if we create an\u00a0endpoint for Swift, Keystone will forward this information to authenticated clients, so they can reach the required service.\u00a0Keystone commands require many options to be provided or some environment variables to contain the same information. To simplify our tasks,\u00a0we can create a keystonerc file to be sourced. It contains the environment settings necessary to Keystone. You can create this file in the home directory:<\/p>\n<pre style=\"color: #000000\">$ cd\r\n# use nano if you prefer, as editor\r\n$ vim keystonerc<\/pre>\n<p>You will need at least these environment variables (paste the following lines into the file and adjust the values, if you changed them in the local.conf file for DevStack):<\/p>\n<pre style=\"color: #000000\">export OS_USERNAME=admin\r\nexport OS_PASSWORD=secrete\r\nexport OS_TENANT_NAME=admin\r\nexport OS_AUTH_URL=http:\/\/10.0.2.15:35357\/v2.0<\/pre>\n<p>Then import the variables to your shell by sourcing the file:<\/p>\n<pre style=\"color: #000000\">$ source ~\/keystonerc<\/pre>\n<p>You can see what services Keystone is running with:<\/p>\n<pre style=\"color: #000000\">$ keystone service-list<\/pre>\n<p>You can see, that there is a Swift service already. To use the service we have to set a new\u00a0endpoint for it, so we provide the host address instead of the address of the guest in the VM network. This, together with the port forwarding, will allow the SwiftBox to be accessed from the outside.<\/p>\n<p>So we copy and paste the id of the Swift service and use it in the following command:<\/p>\n<pre style=\"color: #000000\">$ keystone endpoint-create \\\r\n<span id=\"line-2-7\" class=\"anchor\"><\/span>--region RegionOne \\\r\n<span id=\"line-3-3\" class=\"anchor\"><\/span>--service-id=(the one you copy &amp; pasted) \\\r\n<span id=\"line-4-3\" class=\"anchor\"><\/span>--publicurl 'http:\/\/(your host IP):8080\/v1\/AUTH_$(tenant_id)s' \\\r\n<span id=\"line-5-2\" class=\"anchor\"><\/span>--adminurl 'http:\/\/10.0.2.15:8080' \\\r\n<span id=\"line-6-2\" class=\"anchor\"><\/span>--internalurl 'http:\/\/10.0.2.15:8080\/v1\/AUTH_$(tenant_id)s'<\/pre>\n<p>Now we will have two endpoints for the swift service, as you can see with the following command:<\/p>\n<pre style=\"color: #000000\">$ keystone endpoint-list<\/pre>\n<p>To complete the installation, we now need to delete the old endpoint (check the &#8220;publicurl&#8221; column to identify it), by copying its id and using it in the following command:<\/p>\n<pre style=\"color: #000000\">$ keystone endpoint-delete (id of the old endpoint)<\/pre>\n<p><strong>TESTING<\/strong><\/p>\n<p>There are two different ways to test your Swift object storage. The first and more direct one is to use cURL to send HTTP requests to Swift and check the responses (this method is explained later). Alternatively, we have written a very simple application that will just upload an object with a defined content, read the content from the object on the\u00a0Swift\u00a0storage and write it back to\u00a0a local file.<\/p>\n<p>You can download the source code\u00a0of this test application from <a href=\"https:\/\/github.com\/icclab\/swiftbox-testing\">GitHub<\/a>:<\/p>\n<pre style=\"color: #000000\">$ cd src\/   #where the rep. will be\r\n$ git clone https:\/\/github.com\/icclab\/swiftbox-testing.git<\/pre>\n<p>Before you can use the\u00a0application, you need to install the swiftclient library for python and change the configurations of the application\u00a0to match your Swift\u00a0setup. The configurations can be found in the C<em>onfiguration.py<\/em>\u00a0file. Things that need to be changed are: auth_url, username, tenant_name, tenant_id, container_name, password, object_name, object_content, down_file_name. Then you can run the application in the terminal. For this you open the terminal and go to the directory the repository is in. You can run the app with python now.<\/p>\n<pre style=\"color: #000000\"># install the swiftclient library with pip or any other method\r\n$ pip install python-swiftclient\r\n$ python TestSwift.py   #run the application<\/pre>\n<p>If you don&#8217;t get an error, everything is fine and the file on your local directory should contain the predefined object_content.<\/p>\n<p>To check your Swift manually you have to use some cURL commands, first you need to get the token to access the container. If you use the following command, you will also see a very long id, copy it and save it under a variable called token.<\/p>\n<pre style=\"color: #000000\">$ curl -s -X POST http:\/\/localhost:5000\/v2.0\/tokens -d\\\r\n'{\"auth\": {\"passwordCredentials\": {\"username\":\"admin\",\\\r\n\"password\":\"secrete\"}, \"tenantName\":\"admin\"}}' -H\\\r\n\"Content-type: application\/json\" | python -m json.tool<\/pre>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6034 size-full\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\" alt=\"Screen Shot 2014-09-15 at 16.35.07\" width=\"833\" height=\"269\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png 833w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07-300x96.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07-500x161.png 500w\" sizes=\"auto, (max-width: 833px) 100vw, 833px\" \/><\/a><\/p>\n<pre style=\"color: #000000\">$ token=PKIZ_[...]T8989Y=<\/pre>\n<p>Now you have everything you need to access the container. You can check for containers with:<\/p>\n<pre style=\"color: #000000\">$ curl -X GET -i -H \"X-Auth-Token:$token\" \\\r\nhttp:\/\/10.0.2.15:8080\/v1\/AUTH_9a6819247ed640439584fbca408e28ae<\/pre>\n<p>To \u00a0add a new container, just add the name you want it to be called at the end of the URI:<\/p>\n<pre style=\"color: #000000\">$ curl -X PUT -i -H \"X-Auth-Token: $token\"\\\r\nhttp:\/\/10.0.2.15:8080\/v1\/AUTH_9a6819247ed640439584fbca408e28ae\/newContainerName<\/pre>\n<p><strong>TROUBLESHOOTING<\/strong><\/p>\n<p>One thing you really need to know, is how to boot the VM\u00a0properly after shutting it down. You should always do the graceful shut down of your VM.<\/p>\n<pre style=\"color: #000000\">$ exit #exit the VM\r\n$ vagrant halt #graceful shutdown of VM<\/pre>\n<p>The thing is, if you reboot the machine now, your Swift storage won&#8217;t be mounted to your VM anymore, so it needs to be mounted again. The command looks similar to this:<\/p>\n<pre style=\"color: #000000\">$sudo mount -t xfs -o loop,noatime,nodiratime,nobarrier,logbufs=8 \\\r\n \/opt\/stack\/data\/swift\/drives\/images\/swift.img \/opt\/stack\/data\/swift\/drives\/sdb1<\/pre>\n<p>Then we need to rejoin the stack, so Keystone\u00a0and Swift\u00a0are available again, for this we go to the Devstack directory.<\/p>\n<pre style=\"color: #000000\">$ cd devstack\r\n$ .\/rejoin_stack.sh<\/pre>\n<p><strong>A NOTE ABOUT SECURITY<\/strong><\/p>\n<p>Vagrant uses default password and RSA keys to authenticate users into the VM. Do not expose the SwiftBox on public endpoints if you haven&#8217;t changed both the password and the authorized keys.<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/keystone\/\">keystone<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/object\/\">object<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/openstack\/\">openstack<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/storage\/\">storage<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/swift\/\">swift<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/swiftbox\/\">swiftbox<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/vagrant\/\">vagrant<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>In this tutorial, we will be speaking about a &#8220;Swiftbox&#8221;. This is nothing more than our terminology for an Openstack installation that only needs and uses Swift and Keystone. The use and setup of this Swiftbox will be explained in this article. The reason why someone might want a stripped-down OpenStack installation with only Swift [&hellip;]<\/p>\n","protected":false},"author":151,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[454,456,240,314,453,455,339],"features":[],"class_list":["post-5793","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-keystone","tag-object","tag-openstack","tag-storage","tag-swift","tag-swiftbox","tag-vagrant"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to set up a standalone Swift installation in a VM and test it - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to set up a standalone Swift installation in a VM and test it\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, we will be speaking about a &#8220;Swiftbox&#8221;. This is nothing more than our terminology for an Openstack installation that only needs and uses Swift and Keystone. The use and setup of this Swiftbox will be explained in this article. The reason why someone might want a stripped-down OpenStack installation with only Swift [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-09-16T11:18:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-03-12T15:54:56+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\" \/>\n<meta name=\"author\" content=\"anke\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"anke\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\"},\"author\":{\"name\":\"anke\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/5273d3e0c0aa9893554dde8b6a3ba991\"},\"headline\":\"How to set up a standalone Swift installation in a VM and test it\",\"datePublished\":\"2014-09-16T11:18:11+00:00\",\"dateModified\":\"2015-03-12T15:54:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\"},\"wordCount\":1324,\"commentCount\":7,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\",\"keywords\":[\"keystone\",\"object\",\"openstack\",\"storage\",\"swift\",\"swiftbox\",\"vagrant\"],\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\",\"name\":\"How to set up a standalone Swift installation in a VM and test it - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\",\"datePublished\":\"2014-09-16T11:18:11+00:00\",\"dateModified\":\"2015-03-12T15:54:56+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/5273d3e0c0aa9893554dde8b6a3ba991\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage\",\"url\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\",\"contentUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to set up a standalone Swift installation in a VM and test it\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/5273d3e0c0aa9893554dde8b6a3ba991\",\"name\":\"anke\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ab37351cc12863d0db77de05c086213ce89e2a19a688bf41ad56ef1a61ff365c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ab37351cc12863d0db77de05c086213ce89e2a19a688bf41ad56ef1a61ff365c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ab37351cc12863d0db77de05c086213ce89e2a19a688bf41ad56ef1a61ff365c?s=96&d=mm&r=g\",\"caption\":\"anke\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/anke\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to set up a standalone Swift installation in a VM and test it - Service Engineering (ICCLab &amp; SPLab)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/","og_locale":"en_US","og_type":"article","og_title":"How to set up a standalone Swift installation in a VM and test it","og_description":"In this tutorial, we will be speaking about a &#8220;Swiftbox&#8221;. This is nothing more than our terminology for an Openstack installation that only needs and uses Swift and Keystone. The use and setup of this Swiftbox will be explained in this article. The reason why someone might want a stripped-down OpenStack installation with only Swift [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-09-16T11:18:11+00:00","article_modified_time":"2015-03-12T15:54:56+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png","type":"","width":"","height":""}],"author":"anke","twitter_card":"summary_large_image","twitter_misc":{"Written by":"anke","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/"},"author":{"name":"anke","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/5273d3e0c0aa9893554dde8b6a3ba991"},"headline":"How to set up a standalone Swift installation in a VM and test it","datePublished":"2014-09-16T11:18:11+00:00","dateModified":"2015-03-12T15:54:56+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/"},"wordCount":1324,"commentCount":7,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png","keywords":["keystone","object","openstack","storage","swift","swiftbox","vagrant"],"articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/","url":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/","name":"How to set up a standalone Swift installation in a VM and test it - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png","datePublished":"2014-09-16T11:18:11+00:00","dateModified":"2015-03-12T15:54:56+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/5273d3e0c0aa9893554dde8b6a3ba991"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#primaryimage","url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png","contentUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/09\/Screen-Shot-2014-09-15-at-16.35.07.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-set-up-a-standalone-swift-installation-in-a-vm-and-test-it\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"How to set up a standalone Swift installation in a VM and test it"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/5273d3e0c0aa9893554dde8b6a3ba991","name":"anke","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ab37351cc12863d0db77de05c086213ce89e2a19a688bf41ad56ef1a61ff365c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ab37351cc12863d0db77de05c086213ce89e2a19a688bf41ad56ef1a61ff365c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ab37351cc12863d0db77de05c086213ce89e2a19a688bf41ad56ef1a61ff365c?s=96&d=mm&r=g","caption":"anke"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/anke\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/151"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=5793"}],"version-history":[{"count":51,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5793\/revisions"}],"predecessor-version":[{"id":7765,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5793\/revisions\/7765"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=5793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=5793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=5793"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=5793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}