pennyworth-tool 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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