pennyworth-tool 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.hound.yml +3 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +18 -0
  6. data/CONTRIBUTING.md +67 -0
  7. data/COPYING +674 -0
  8. data/Gemfile +28 -0
  9. data/README.md +339 -0
  10. data/Rakefile +33 -0
  11. data/bin/pennyworth +26 -0
  12. data/config/setup.yml +17 -0
  13. data/examples/README.md +23 -0
  14. data/examples/kiwi/definitions/base_opensuse13.1_kvm/config.sh +87 -0
  15. data/examples/kiwi/definitions/base_opensuse13.1_kvm/config.xml +64 -0
  16. data/examples/kiwi/definitions/base_opensuse13.1_kvm/root/etc/sysconfig/network/ifcfg-eth0 +2 -0
  17. data/examples/kiwi/definitions/base_opensuse13.1_kvm/root/home/vagrant/.ssh/authorized_keys +1 -0
  18. data/examples/vagrant/Vagrantfile +14 -0
  19. data/files/99-libvirt.rules +2 -0
  20. data/files/image_test-template.xml +43 -0
  21. data/files/pool-default.xml +6 -0
  22. data/lib/image_runner.rb +89 -0
  23. data/lib/pennyworth.rb +65 -0
  24. data/lib/pennyworth/cli.rb +339 -0
  25. data/lib/pennyworth/cli_host_controller.rb +107 -0
  26. data/lib/pennyworth/commands/base_command.rb +96 -0
  27. data/lib/pennyworth/commands/boot_command.rb +29 -0
  28. data/lib/pennyworth/commands/build_base_command.rb +103 -0
  29. data/lib/pennyworth/commands/command.rb +43 -0
  30. data/lib/pennyworth/commands/down_command.rb +25 -0
  31. data/lib/pennyworth/commands/import_base_command.rb +112 -0
  32. data/lib/pennyworth/commands/import_ssh_keys_command.rb +27 -0
  33. data/lib/pennyworth/commands/list_command.rb +41 -0
  34. data/lib/pennyworth/commands/setup_command.rb +209 -0
  35. data/lib/pennyworth/commands/shutdown_command.rb +28 -0
  36. data/lib/pennyworth/commands/status_command.rb +26 -0
  37. data/lib/pennyworth/commands/up_command.rb +27 -0
  38. data/lib/pennyworth/exceptions.rb +39 -0
  39. data/lib/pennyworth/helper.rb +39 -0
  40. data/lib/pennyworth/host_config.rb +86 -0
  41. data/lib/pennyworth/host_runner.rb +133 -0
  42. data/lib/pennyworth/image_runner.rb +89 -0
  43. data/lib/pennyworth/libvirt.rb +93 -0
  44. data/lib/pennyworth/local_command_runner.rb +77 -0
  45. data/lib/pennyworth/local_runner.rb +34 -0
  46. data/lib/pennyworth/lock_service.rb +87 -0
  47. data/lib/pennyworth/remote_command_runner.rb +144 -0
  48. data/lib/pennyworth/runner.rb +27 -0
  49. data/lib/pennyworth/settings.rb +42 -0
  50. data/lib/pennyworth/spec.rb +96 -0
  51. data/lib/pennyworth/spec_profiler.rb +85 -0
  52. data/lib/pennyworth/ssh_keys_importer.rb +107 -0
  53. data/lib/pennyworth/urls.rb +28 -0
  54. data/lib/pennyworth/vagrant.rb +81 -0
  55. data/lib/pennyworth/vagrant_command.rb +120 -0
  56. data/lib/pennyworth/vagrant_runner.rb +44 -0
  57. data/lib/pennyworth/version.rb +22 -0
  58. data/lib/pennyworth/vm.rb +62 -0
  59. data/man/.gitignore +2 -0
  60. data/man/pennyworth.1.md +28 -0
  61. data/pennyworth.gemspec +57 -0
  62. data/prophet/Gemfile +3 -0
  63. data/prophet/prophet.rb +82 -0
  64. data/spec/base_command_spec.rb +30 -0
  65. data/spec/build_base_command_spec.rb +147 -0
  66. data/spec/cli_host_controller_spec.rb +113 -0
  67. data/spec/data/hosts.yaml +10 -0
  68. data/spec/data/kiwi/base_opensuse12.3_kvm.box +1 -0
  69. data/spec/data/kiwi/base_opensuse13.1_kvm.box +1 -0
  70. data/spec/data/kiwi/definitions/base_opensuse12.3_kvm/config.sh +1 -0
  71. data/spec/data/kiwi/definitions/base_opensuse12.3_kvm/config.xml +1 -0
  72. data/spec/data/kiwi/definitions/base_opensuse12.3_kvm/root/home/vagrant/.ssh/authorized_keys +1 -0
  73. data/spec/data/kiwi/definitions/base_opensuse13.1_kvm/config.sh +1 -0
  74. data/spec/data/kiwi/definitions/base_opensuse13.1_kvm/config.xml +1 -0
  75. data/spec/data/kiwi/definitions/base_opensuse13.1_kvm/root/home/vagrant/.ssh/authorized_keys +1 -0
  76. data/spec/data/kiwi2/box_state.yaml +14 -0
  77. data/spec/data/kiwi2/definitions/base_opensuse12.3_kvm/config.sh +1 -0
  78. data/spec/data/kiwi2/definitions/base_opensuse12.3_kvm/config.xml +1 -0
  79. data/spec/data/kiwi2/definitions/base_opensuse12.3_kvm/root/home/vagrant/.ssh/authorized_keys +1 -0
  80. data/spec/data/kiwi2/definitions/base_opensuse13.1_kvm/config.sh +1 -0
  81. data/spec/data/kiwi2/definitions/base_opensuse13.1_kvm/config.xml +1 -0
  82. data/spec/data/kiwi2/definitions/base_opensuse13.1_kvm/root/home/vagrant/.ssh/authorized_keys +1 -0
  83. data/spec/data/kiwi3/box_state.yaml +13 -0
  84. data/spec/data/kiwi3/definitions/base_opensuse12.3_kvm/.gitkeep +0 -0
  85. data/spec/data/kiwi3/definitions/base_opensuse13.1_kvm/.gitkeep +0 -0
  86. data/spec/data/kiwi3/import_state.yaml +3 -0
  87. data/spec/data/kiwi4/definitions/base_opensuse12.3_kvm/.gitkeep +0 -0
  88. data/spec/data/kiwi4/definitions/base_opensuse13.1_kvm/.gitkeep +0 -0
  89. data/spec/data/kiwi4/import_state.yaml +3 -0
  90. data/spec/data/kiwi5/import_state.yaml +3 -0
  91. data/spec/data/vagrant/.gitkeep +0 -0
  92. data/spec/host_config_spec.rb +197 -0
  93. data/spec/host_runner_spec.rb +112 -0
  94. data/spec/image_runner_spec.rb +62 -0
  95. data/spec/import_base_command_spec.rb +189 -0
  96. data/spec/local_command_runner_spec.rb +117 -0
  97. data/spec/local_runner_spec.rb +42 -0
  98. data/spec/lock_service_spec.rb +95 -0
  99. data/spec/remote_command_runner_spec.rb +115 -0
  100. data/spec/settings_spec.rb +26 -0
  101. data/spec/setup_command_spec.rb +49 -0
  102. data/spec/spec_helper.rb +50 -0
  103. data/spec/spec_profiler_spec.rb +63 -0
  104. data/spec/spec_spec.rb +99 -0
  105. data/spec/support/command_runner_examples.rb +29 -0
  106. data/spec/support/runner_examples.rb +34 -0
  107. data/spec/urls_spec.rb +46 -0
  108. data/spec/vagrant_command_spec.rb +51 -0
  109. data/spec/vagrant_runner_spec.rb +40 -0
  110. data/spec/vagrant_spec.rb +288 -0
  111. data/spec/vm_spec.rb +56 -0
  112. metadata +257 -0
data/Gemfile ADDED
@@ -0,0 +1,28 @@
1
+ # Copyright (c) 2013-2014 SUSE LLC
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of version 3 of the GNU General Public License as
5
+ # published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ # GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License
13
+ # along with this program; if not, contact SUSE LLC.
14
+ #
15
+ # To contact SUSE about this file by physical or electronic mail,
16
+ # you may find current contact information at www.suse.com
17
+
18
+ source "https://rubygems.org"
19
+
20
+ gemspec
21
+
22
+ group :test do
23
+ gem 'rspec', '~> 3.2.0'
24
+ gem 'webmock'
25
+ gem 'given_filesystem'
26
+ gem 'guard'
27
+ gem 'guard-rspec'
28
+ end
data/README.md ADDED
@@ -0,0 +1,339 @@
1
+ # Pennyworth
2
+
3
+ [![Code Climate](https://codeclimate.com/github/SUSE/pennyworth/badges/gpa.svg)](https://codeclimate.com/github/SUSE/pennyworth)
4
+
5
+ Pennyworth is a tool for running integration tests inside a network of virtual
6
+ machines. It allows the user to define virtual machines, build them as Vagrant
7
+ boxes and run them using libvirt and kvm in a coordinated fashion in order to
8
+ run the tests.
9
+ These tests can be written in any language/framework, but the preferred
10
+ combination is Ruby/RSpec, for which helpers are provided.
11
+
12
+ Pennyworth is a spin-off of the
13
+ [Machinery project](http://machinery-project.org). It is used there to manage
14
+ the environment of the integration tests.
15
+
16
+ ## Contents
17
+
18
+ * [Installation](#installation)
19
+ * [Overview](#overview)
20
+ - [Defining and Building Machines](#defining-and-building-machines)
21
+ - [Running Boxes](#running-boxes)
22
+ * [Usage](#usage)
23
+ - [Command Line](#command-line)
24
+ - [RSpec Helper](#rspec-helper)
25
+ * [Terminology](#terminology)
26
+ * [Further Information](#further-information)
27
+
28
+ ## Installation
29
+
30
+ Pennyworth is tested on [openSUSE 13.2](https://en.opensuse.org/Portal:13.2)
31
+ and [SUSE Linux Enterprise Server 12](https://www.suse.com/products/server/).
32
+ It may not work with other openSUSE versions, Linux distributions, or
33
+ operating systems.
34
+
35
+ The following steps will make Pennyworth run on a vanilla openSUSE 13.2 system.
36
+
37
+ 1. **Install required packages**
38
+
39
+ Install Git:
40
+
41
+ $ sudo zypper in git
42
+
43
+ Install basic Ruby environment:
44
+
45
+ $ sudo zypper in ruby rubygem-bundler
46
+
47
+ After the installation, make sure that your `ruby20` version is at least
48
+ `2.0.0.p247-3.11.1`:
49
+
50
+ $ rpm -q ruby20
51
+
52
+ With lower versions, `bundle install` won't work because of a
53
+ [bug](https://bugzilla.novell.com/show_bug.cgi?id=858100).
54
+
55
+ Install packages needed to detect a base system:
56
+
57
+ $ sudo zypper in lsb-release
58
+
59
+ Install packages needed to compile Gems with native extensions:
60
+
61
+ $ sudo zypper in gcc-c++ make ruby-devel libvirt-devel libxslt-devel libxml2-devel
62
+
63
+ 2. **Clone Pennyworth repository and install Gem dependencies required to run
64
+ the setup**
65
+
66
+ $ git clone https://github.com/SUSE/pennyworth.git
67
+ $ cd pennyworth
68
+ $ bundle config build.nokogiri --use-system-libraries
69
+ $ bundle install --without test
70
+
71
+ 3. **Run the setup**
72
+
73
+ $ bin/pennyworth setup
74
+
75
+ 4. **Install remaining Gem dependencies**
76
+
77
+ $ bundle install --without ""
78
+
79
+ Specifying an empty value with `--without ""` is necessary because this
80
+ option is “remembered”. If absent, Bundler would use its value from the
81
+ last invocation (`test`).
82
+
83
+ 5. **Restart your system**
84
+
85
+ This refreshes information about current user's groups and network setup.
86
+
87
+ 6. **Done!**
88
+
89
+ You can now start using Pennyworth.
90
+
91
+ ## Overview
92
+
93
+ Pennyworth is a command-line tool built around defining virtual machines,
94
+ building them, and running integration tests on them.
95
+
96
+ The usual workflow is:
97
+
98
+ 1. Define machines used to run integration tests and build them. The result
99
+ is a [Vagrant](http://www.vagrantup.com/) box.
100
+
101
+ 2. Import built boxes into Vagrant.
102
+
103
+ 3. Run the boxes as needed and execute your test on them. Ruby users can use a
104
+ RSpec helper to simplify this step.
105
+
106
+ All these tasks are driven by commands described in the [Usage](#usage) section.
107
+
108
+ ### Defining and Building Machines
109
+
110
+ To define and build machines, Pennyworth uses
111
+ [Kiwi](https://github.com/openSUSE/kiwi).
112
+
113
+ When a machine is built, the resulting Vagrant box can be uploaded to a web
114
+ server (manually). Pennyworth running on some other machine can then import it
115
+ instead of using a locally-built box, which can save time and ensure everyone
116
+ has exactly the same environment for running tests.
117
+
118
+ ### Running Boxes
119
+
120
+ To run the boxes, Pennyworth uses Vagrant. However, instead of the default
121
+ VirtualBox backend it uses KVM driven by libvirt. The theory is that using open
122
+ source and SUSE-supported technology will be more reliable and performant, which
123
+ should outweigh the somewhat complicated setup.
124
+
125
+ ## Usage
126
+
127
+ ### Command Line
128
+
129
+ Pennyworth is a command-line tool. You can invoke it by using the `bin/pennyworth`
130
+ command. It accepts subcommands (similarly to `git` or `bundle`).
131
+
132
+ For example:
133
+
134
+ - Building an image
135
+ `$pennyworth build_base example_image --definitions-dir=example_dir`
136
+
137
+ - Listing available VMs
138
+ `$pennyworth list --definitions-dir=example_dir`
139
+
140
+ - Starting a VM
141
+ `$pennyworth up my_machine`
142
+
143
+ For more information about the commands, see the Pennyworth man page.
144
+
145
+ ### RSpec Helper
146
+
147
+ Pennyworth contains an RSpec helper that helps with running integration tests
148
+ using Pennyworth.
149
+
150
+ To use the helper, first require it:
151
+
152
+ ```ruby
153
+ require "pennyworth/spec"
154
+ ```
155
+
156
+ Replace `<pennyworth-dir>` with a directory into which you installed Pennyworth.
157
+
158
+ In your specs, you can now use the `start_system` method to start a VM, e.g.:
159
+
160
+ ```ruby
161
+ describe "my pet feature" do
162
+ it "works flawlessly" do
163
+ vm = start_system(box: "box")
164
+
165
+ # ...
166
+ end
167
+ end
168
+ ```
169
+
170
+ The `start_system` method can either start an existing Vagrant box, a generic
171
+ VM image runnable by libvirt or connect to an already running system. The method
172
+ returns an object, which can be used to access the system for testing.
173
+
174
+ #### Using Vagrant VMs
175
+
176
+ To start a Vagrant VM, pass its name using the `box` option. The name is looked
177
+ up in the `Vagrantfile` in the directory provided with the `config.vagrant_dir`
178
+ option in RSpec.
179
+
180
+ #### Using generic VM images
181
+
182
+ To start a generic VM image, pass its file path using the `image` option. The
183
+ image is ran in KVM and made available for accessing it for tests.
184
+
185
+ #### Using existing hosts
186
+
187
+ For connecting to an existing running system, pass the name of the system with
188
+ the `host` option. The name is looked up in a configuration file, which by
189
+ default is `~/.pennyworth/hosts.yaml`. The system is accessed with the address
190
+ stored in this file, so that the same name can be used in the tests, even when
191
+ the actual system used for tests is changing.
192
+
193
+ To prevent tests running simultaneously on the same machine to interfere with
194
+ each other, there is a locking mechanism, which automatically makes sure that
195
+ only one test is running on a system at the same time. For this to work a lock
196
+ service is required. The address of the lock service is also defined in the
197
+ `hosts.yaml` configuration file. The lock service has to conform to the API
198
+ implemented by [glockd](https://github.com/apokalyptik/glockd) and has to run
199
+ at the address specified in the configuration file.
200
+
201
+ To simplify setup of tests with existing hosts, there are some helper commands
202
+ in the pennyworth command line application. Get an overview by running
203
+ `pennyworth host`.
204
+
205
+ To initially set up the test infrastructure run
206
+
207
+ pennyworth host setup http://ci.example.org/pennyworth/hosts.yaml
208
+
209
+ with a URL corresponding to where you store the configuration of your test
210
+ hosts. This will create a configuration file which includes the configuration
211
+ from `http://ci.example.com/pennyworth/hosts.yaml` as a reference. The
212
+ configuration will dynamically be fetched from the URL when tests are run.
213
+ You can add local configuration to the `~/.pennyworth/hosts.yaml` file. If it
214
+ defines values for keys from the remote file it overwrites the value by the
215
+ local attribute. This setup makes it easy to distribute a common configuration
216
+ between several systems and users, while still allowing users to have their
217
+ local settings.
218
+
219
+ Pennyworth automatically cleans up the hosts after running the tests using
220
+ snapper snapshots. The snapshot which the system is rolled back to is specified
221
+ by the `base_snapshot_id` of the host entries. Before rolling back a new
222
+ snapshot named `pennyworth` is created which can be used for debugging test
223
+ failures.
224
+
225
+ In some cases (e.g. while working on a test) the automatic rollback might not be
226
+ desired. It can easily be disabled temporarily by setting the
227
+ `SKIP_HOST_CLEANUP` environment variable, e.g.
228
+
229
+ SKIP_HOST_CLEANUP=true rspec
230
+
231
+ An example for the configuration file is:
232
+
233
+ ```yaml
234
+ ---
235
+ lock_server_address: lockserver.example.org:9999
236
+ hosts:
237
+ test_host_1:
238
+ address: host1.example.org
239
+ base_snapshot_id: 2
240
+ test_host_2:
241
+ address: host2.example.org
242
+ base_snapshot_id: 34
243
+ ```
244
+
245
+ In order to use a system as a pennyworth host it needs to be prepared like this:
246
+
247
+ 1. The root partition needs to be a Btrfs partition
248
+ 2. Snapper needs to be installed and configured for `/`:
249
+
250
+ 1. Enable snapper for root by running:
251
+
252
+ snapper create-config /
253
+
254
+ 2. Remove more than 5 Pennyworth snapshots and disable the timeline for the new config:
255
+
256
+ snapper set-config NUMBER_LIMIT=5 TIMELINE_CREATE=no
257
+
258
+ 3. Disable the automatic zypper snapshots by removing the plugin:
259
+
260
+ zypper rm snapper-zypp-plugin
261
+
262
+ For further details: [Snapper Automatic Snapshot Documentation](https://www.suse.com/documentation/sles-12/singlehtml/book_sle_admin/book_sle_admin.html#sec.snapper.setup.customize.auto_snapshots)
263
+
264
+ 3. There can't be any subvolumes below `/` besides `.snapshots`
265
+ 4. It's usually helpful to exclude `*/.ssh` from the rollback so that SSH
266
+ access is retained
267
+
268
+ echo "*/.ssh" > /etc/snapper/filters/ssh.txt
269
+
270
+ 5. There needs to be a snapper snapshot of the defined state which will be
271
+ configured in the `hosts.yaml`:
272
+
273
+ snapper create --description "Initial Snapshot"
274
+
275
+ The according snapshot id can be retrieved using
276
+
277
+ snapper list
278
+
279
+ #### Accessing test systems
280
+
281
+ Boxes, images and systems have the following requirements:
282
+
283
+ * ssh port is configured to be open in the firewall
284
+ * activated sshd service
285
+ * the public ssh key of the user running pennyworth/rspec tests in /root/.ssh.authorized_keys
286
+
287
+ For boxes handled by pennyworth the ssh key is copied into the target when creating the box,
288
+ for images or hosts this has to be done manually by e.g. running
289
+ `ssh-copy-id root@<HOST>`.
290
+
291
+ The `start_system` method returns a `VM` instance, which can be used to interact
292
+ with the running machine (via SSH). It supports the following methods:
293
+
294
+ * `stop`
295
+
296
+ Stops or disconnects the system. This stops running boxes or images and disconnects from
297
+ running systems.
298
+
299
+ * `run_command(command, *args, options = {})`
300
+ `run_command(command_and_args, options = {})`
301
+
302
+ Executes a command on the running machine. The execution is implemented
303
+ using [Cheetah](https://github.com/opensuse/cheetah) and the `run_command`
304
+ method behaves mostly the same as
305
+ [`Cheetah.run`](http://rubydoc.info/github/openSUSE/cheetah/master/Cheetah.run).
306
+
307
+ * `inject_file(source, destination)`
308
+
309
+ Injects a file from the machine running the specs into the VM.
310
+
311
+ * `inject_directory(source, destination, opts = {})`
312
+
313
+ Injects a file from the machine running the specs into the VM. The `:owner`
314
+ and `:group` options can be used to set the owner and the group of injected
315
+ files.
316
+
317
+ * `extract_file(source, destination)`
318
+
319
+ Extracts a file from the VM into the machine running the specs.
320
+
321
+ All machines started by `start_system` are stopped when the RSpec example group
322
+ containing the call is finished.
323
+
324
+ ## Terminology
325
+
326
+ (Vagrant) Box
327
+ : Base image used as a package format for Vagrant environments. Provides an
328
+ identical working environment on any platform. For more information please
329
+ visit the [Vagrant documentation](http://docs.vagrantup.com/v2/boxes.html)
330
+
331
+ VM
332
+ : Virtual machine ran in KVM. Pennyworth supports running VMs described in a
333
+ Vagrantfile as well as non vagrant managed ones.
334
+
335
+ ## Further information
336
+
337
+ Further information like a [FAQ](https://github.com/SUSE/pennyworth/wiki/Debugging)
338
+ or a [Troubleshooting guide](https://github.com/SUSE/pennyworth/wiki/Troubleshooting)
339
+ can be found in the [Pennyworth Wiki](https://github.com/SUSE/pennyworth/wiki/).
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ # Copyright (c) 2013-2014 SUSE LLC
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of version 3 of the GNU General Public License as
5
+ # published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ # GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License
13
+ # along with this program; if not, contact SUSE LLC.
14
+ #
15
+ # To contact SUSE about this file by physical or electronic mail,
16
+ # you may find current contact information at www.suse.com
17
+
18
+ require "rspec/core/rake_task"
19
+
20
+ RSpec::Core::RakeTask.new
21
+
22
+ namespace :man_pages do
23
+ task :build do
24
+ puts " Building man pages"
25
+ system "ronn man/*.md"
26
+ end
27
+ end
28
+
29
+ namespace :gem do
30
+ task :build => ["man_pages:build"] do
31
+ system "gem build pennyworth.gemspec"
32
+ end
33
+ end
data/bin/pennyworth ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2013-2014 SUSE LLC
4
+ #
5
+ # This program is free software; you can redistribute it and/or
6
+ # modify it under the terms of version 3 of the GNU General Public License as
7
+ # published by the Free Software Foundation.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, contact SUSE LLC.
16
+ #
17
+ # To contact SUSE about this file by physical or electronic mail,
18
+ # you may find current contact information at www.suse.com
19
+
20
+ require_relative "../lib/pennyworth"
21
+
22
+ Pennyworth::Cli.settings = Pennyworth::Settings.new
23
+
24
+ begin
25
+ Pennyworth::Cli.run(ARGV)
26
+ end
data/config/setup.yml ADDED
@@ -0,0 +1,17 @@
1
+ packages:
2
+ local:
3
+ - curl # Needed to download remote packages
4
+ - iptables # Needed by libvirt to configure network
5
+ - dnsmasq # Needed by libvirt to configure network
6
+ - libxml2-devel # Needed by libvirt plugin for Vagrant
7
+ - libxslt-devel # Needed by libvirt plugin for Vagrant
8
+ - libvirt-devel # Needed by libvirt plugin for Vagrant
9
+ - libvirt # Needed to run VMs
10
+ - expect # Needed to automate interactive commands like ssh-copy-id
11
+ "13.1":
12
+ - kvm # Needed to run VMs
13
+ - libvirt-daemon-qemu # Needed to run QEMU in 13.1
14
+ "13.2":
15
+ - qemu-kvm # Needed to run VMs
16
+ remote:
17
+ - https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.2_x86_64.rpm