Skip to content

Commit f7d6b29

Browse files
authored
Merge pull request #1 from jay7x/wip
Add start/stop/delete/list tasks
2 parents ba3cbf3 + c02610a commit f7d6b29

18 files changed

+713
-26
lines changed

Gemfile

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,32 @@ def location_for(place_or_version, fake_version = nil)
1313
end
1414
end
1515

16-
ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
17-
minor_version = ruby_version_segments[0..1].join('.')
18-
1916
group :development do
20-
gem "json", '= 2.0.4', require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
21-
gem "json", '= 2.1.0', require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
22-
gem "json", '= 2.3.0', require: false if Gem::Requirement.create(['>= 2.7.0', '< 2.8.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
23-
gem "puppet-module-posix-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
24-
gem "puppet-module-posix-dev-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
25-
gem "puppet-module-win-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
26-
gem "puppet-module-win-dev-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
27-
gem "voxpupuli-puppet-lint-plugins", '>= 3.0', require: false
28-
gem "github_changelog_generator", '~> 1.15', require: false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')
17+
gem "json", '= 2.1.0', require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
18+
gem "json", '= 2.3.0', require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
19+
gem "json", '= 2.5.1', require: false if Gem::Requirement.create(['>= 3.0.0', '< 3.0.5']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
20+
gem "json", '= 2.6.1', require: false if Gem::Requirement.create(['>= 3.1.0', '< 3.1.3']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
21+
gem "json", '= 2.6.3', require: false if Gem::Requirement.create(['>= 3.2.0', '< 4.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
22+
gem "voxpupuli-puppet-lint-plugins", '~> 3.1', require: false
23+
gem "facterdb", '~> 1.18', require: false
24+
gem "metadata-json-lint", '>= 2.0.2', '< 4.0.0', require: false
25+
gem "puppetlabs_spec_helper", '>= 3.0.0', '< 5.0.0', require: false
26+
gem "rspec-puppet-facts", '~> 2.0', require: false
27+
gem "codecov", '~> 0.2', require: false
28+
gem "dependency_checker", '~> 0.2', require: false
29+
gem "parallel_tests", '~> 3.4', require: false
30+
gem "pry", '~> 0.10', require: false
31+
gem "simplecov-console", '~> 0.5', require: false
32+
gem "puppet-debugger", '~> 1.0', require: false
33+
gem "rubocop", '= 1.6.1', require: false
34+
gem "rubocop-performance", '= 1.9.1', require: false
35+
gem "rubocop-rspec", '= 2.0.1', require: false
36+
gem "rb-readline", '= 0.5.5', require: false, platforms: [:mswin, :mingw, :x64_mingw]
37+
gem "github_changelog_generator", '~> 1.15', require: false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')
2938
end
3039
group :system_tests do
31-
gem "puppet-module-posix-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
32-
gem "puppet-module-win-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
40+
gem "puppet_litmus", '< 1.0.0', require: false, platforms: [:ruby]
41+
gem "serverspec", '~> 2.41', require: false
3342
end
3443

3544
puppet_version = ENV['PUPPET_GEM_VERSION']

REFERENCE.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,54 @@
66

77
### Tasks
88

9+
* [`delete`](#delete): Delete Lima VM
10+
* [`list`](#list): Return list of Lima VMs
911
* [`resolve_reference`](#resolve_reference): Generate Bolt targets from Lima VMs
12+
* [`start`](#start): Create or start Lima VM
13+
* [`stop`](#stop): Stop Lima VM
1014

1115
## Tasks
1216

17+
### <a name="delete"></a>`delete`
18+
19+
Delete Lima VM
20+
21+
**Supports noop?** false
22+
23+
#### Parameters
24+
25+
##### `limactl_path`
26+
27+
Data type: `Optional[String[1]]`
28+
29+
Location of the `limactl` binary if not in PATH
30+
31+
##### `name`
32+
33+
Data type: `String[1]`
34+
35+
VM name
36+
37+
### <a name="list"></a>`list`
38+
39+
Return list of Lima VMs
40+
41+
**Supports noop?** false
42+
43+
#### Parameters
44+
45+
##### `limactl_path`
46+
47+
Data type: `Optional[String[1]]`
48+
49+
Location of the `limactl` binary if not in PATH
50+
51+
##### `names`
52+
53+
Data type: `Optional[Array[String[1]]]`
54+
55+
VM names to list
56+
1357
### <a name="resolve_reference"></a>`resolve_reference`
1458

1559
Generate Bolt targets from Lima VMs
@@ -36,3 +80,67 @@ Data type: `Optional[Pattern]`
3680

3781
VMs with names matching this regex will be excluded from the inventory.
3882

83+
### <a name="start"></a>`start`
84+
85+
Create or start Lima VM
86+
87+
**Supports noop?** false
88+
89+
#### Parameters
90+
91+
##### `limactl_path`
92+
93+
Data type: `Optional[String[1]]`
94+
95+
Location of the `limactl` binary if not in PATH
96+
97+
##### `name`
98+
99+
Data type: `String[1]`
100+
101+
VM name
102+
103+
##### `timeout`
104+
105+
Data type: `Optional[String[1]]`
106+
107+
Duration to wait for the instance to be running before timing out
108+
109+
##### `url`
110+
111+
Data type: `Optional[String[1]]`
112+
113+
Remote URL containing YAML configuration to create the instance from
114+
115+
##### `template`
116+
117+
Data type: `Optional[String[1]]`
118+
119+
Lima template to create the instance from
120+
121+
##### `config`
122+
123+
Data type: `Optional[Hash]`
124+
125+
Configuration hash to create the instance from
126+
127+
### <a name="stop"></a>`stop`
128+
129+
Stop Lima VM
130+
131+
**Supports noop?** false
132+
133+
#### Parameters
134+
135+
##### `limactl_path`
136+
137+
Data type: `Optional[String[1]]`
138+
139+
Location of the `limactl` binary if not in PATH
140+
141+
##### `name`
142+
143+
Data type: `String[1]`
144+
145+
VM name
146+

metadata.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
"project_page": "https://github.com/jay7x/puppet-lima",
99
"issues_url": "https://github.com/jay7x/puppet-lima/issues",
1010
"dependencies": [
11-
{"name":"puppetlabs-ruby_task_helper","version_requirement":">= 0.1.0 < 1.0.0"}
11+
{
12+
"name": "puppetlabs-ruby_task_helper",
13+
"version_requirement": ">= 0.1.0 < 1.0.0"
14+
}
1215
],
1316
"operatingsystem_support": [
1417
{
@@ -72,7 +75,7 @@
7275
"version_requirement": ">= 4.10.0 < 9.0.0"
7376
}
7477
],
75-
"pdk-version": "2.5.0",
76-
"template-url": "https://github.com/puppetlabs/pdk-templates#2.5.0",
77-
"template-ref": "tags/2.5.0-0-g369d483"
78+
"pdk-version": "2.6.1",
79+
"template-url": "https://github.com/puppetlabs/pdk-templates#2.7.1",
80+
"template-ref": "tags/2.7.1-0-g9a16c87"
7881
}

spec/tasks/lima_delete_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
require_relative '../../tasks/delete.rb'
5+
6+
describe LimaDelete do
7+
let(:task) { described_class.new }
8+
let(:lima_stdout) { 'Lima message' }
9+
let(:lima_stderr) { '' }
10+
let(:lima_code) { 0 }
11+
let(:lima_response) { [lima_stdout, lima_stderr, lima_code] }
12+
let(:success_result) { { stdout: lima_stdout } }
13+
14+
describe '#delete' do
15+
context 'with name specified' do
16+
vm_name = 'test'
17+
let(:opts) { { name: vm_name } }
18+
19+
it "invokes `lima delete #{vm_name}`" do
20+
expect(Open3).to receive(:capture3).with('limactl', 'delete', vm_name).and_return(lima_response)
21+
result = task.delete(opts)
22+
expect(result).to eq(success_result)
23+
end
24+
end
25+
end
26+
end

spec/tasks/lima_list_spec.rb

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
require_relative '../../tasks/list.rb'
5+
6+
describe LimaList do
7+
let(:task) { described_class.new }
8+
let(:vms) do
9+
[
10+
{ 'name': 'default' },
11+
{ 'name': 'test' },
12+
{ 'name': 'example' },
13+
]
14+
end
15+
let(:lima_stdout) do
16+
<<~LIMASTR
17+
{"name":"default"}
18+
{"name":"test"}
19+
{"name":"example"}
20+
LIMASTR
21+
end
22+
let(:lima_stderr) { '' }
23+
let(:lima_code) { 0 }
24+
let(:lima_response) { [lima_stdout, lima_stderr, lima_code] }
25+
let(:success_result) { { list: vms.map { |x| x.transform_keys(&:to_s) } } }
26+
27+
describe '#list' do
28+
context 'with names specified' do
29+
let(:opts) { { names: ['test', 'example'] } }
30+
31+
it 'returns VM list' do
32+
expect(Open3).to receive(:capture3).with('limactl', 'list', '--json', *opts[:names]).and_return(lima_response)
33+
result = task.list(opts)
34+
expect(result).to eq(success_result)
35+
end
36+
end
37+
38+
context 'without names specified' do
39+
let(:opts) { {} }
40+
41+
it 'returns VM list' do
42+
expect(Open3).to receive(:capture3).with('limactl', 'list', '--json').and_return(lima_response)
43+
result = task.list(opts)
44+
expect(result).to eq(success_result)
45+
end
46+
end
47+
end
48+
end

0 commit comments

Comments
 (0)