vagrant-bolt 0.1.0 → 0.3.0

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.
@@ -9,12 +9,24 @@ class VagrantBolt::Config::Global < Vagrant.plugin('2', :config)
9
9
  # @return [String] The bolt working directory. Defaults to `.`
10
10
  attr_accessor :boltdir
11
11
 
12
+ # @!attribute [rw] host_key_check
13
+ # @return [String] If the connection should check the host key on the remote host (linux)
14
+ attr_accessor :connect_timeout
15
+
12
16
  # @!attribute [rw] host_key_check
13
17
  # @return [Boolean] If the connection should check the host key on the remote host (linux)
14
18
  attr_accessor :host_key_check
15
19
 
20
+ # @!attribute [rw] machine_alias
21
+ # @return [String] The alias of the machine to set in the bolt inventory
22
+ attr_accessor :machine_alias
23
+
24
+ # @!attribute [rw] machine_name
25
+ # @return [String] The name of the machine to set in the bolt inventory
26
+ attr_accessor :machine_name
27
+
16
28
  # @!attribute [rw] modulepath
17
- # @return [String] The path to the modules. Defaults to `modules`.
29
+ # @return [String] The path to the modules.
18
30
  attr_accessor :modulepath
19
31
 
20
32
  # @!attribute [rw] user
@@ -74,45 +86,60 @@ class VagrantBolt::Config::Global < Vagrant.plugin('2', :config)
74
86
  attr_accessor :features
75
87
 
76
88
  def initialize
77
- @bolt_exe = UNSET_VALUE
78
- @boltdir = UNSET_VALUE
79
- @host_key_check = UNSET_VALUE
80
- @modulepath = UNSET_VALUE
81
- @password = UNSET_VALUE
82
- @port = UNSET_VALUE
83
- @private_key = UNSET_VALUE
84
- @run_as = UNSET_VALUE
85
- @ssl = UNSET_VALUE
86
- @ssl_verify = UNSET_VALUE
87
- @sudo_password = UNSET_VALUE
88
- @tmpdir = UNSET_VALUE
89
- @user = UNSET_VALUE
90
- @verbose = UNSET_VALUE
91
- @debug = UNSET_VALUE
92
- @facts = UNSET_VALUE
93
- @vars = UNSET_VALUE
94
- @features = UNSET_VALUE
89
+ @bolt_exe = UNSET_VALUE
90
+ @boltdir = UNSET_VALUE
91
+ @connect_timeout = UNSET_VALUE
92
+ @host_key_check = UNSET_VALUE
93
+ @machine_alias = UNSET_VALUE
94
+ @machine_name = UNSET_VALUE
95
+ @modulepath = UNSET_VALUE
96
+ @password = UNSET_VALUE
97
+ @port = UNSET_VALUE
98
+ @private_key = UNSET_VALUE
99
+ @run_as = UNSET_VALUE
100
+ @ssl = UNSET_VALUE
101
+ @ssl_verify = UNSET_VALUE
102
+ @sudo_password = UNSET_VALUE
103
+ @tmpdir = UNSET_VALUE
104
+ @user = UNSET_VALUE
105
+ @verbose = UNSET_VALUE
106
+ @debug = UNSET_VALUE
107
+ @facts = UNSET_VALUE
108
+ @vars = UNSET_VALUE
109
+ @features = UNSET_VALUE
95
110
  end
96
111
 
97
112
  def finalize!
98
- @bolt_exe = 'bolt' if @bolt_exe == UNSET_VALUE
99
- @boltdir = '.' if @boltdir == UNSET_VALUE
100
- @host_key_check = nil if @host_key_check == UNSET_VALUE
101
- @modulepath = 'modules' if @modulepath == UNSET_VALUE
102
- @port = nil if @port == UNSET_VALUE
103
- @password = nil if @password == UNSET_VALUE
104
- @private_key = nil if @private_key == UNSET_VALUE
105
- @run_as = nil if @run_as == UNSET_VALUE
106
- @ssl = nil if @ssl == UNSET_VALUE
107
- @ssl_verify = nil if @ssl_verify == UNSET_VALUE
108
- @sudo_password = nil if @sudo_password == UNSET_VALUE
109
- @tmpdir = nil if @tmpdir == UNSET_VALUE
110
- @user = nil if @user == UNSET_VALUE
111
- @verbose = nil if @verbose == UNSET_VALUE
112
- @debug = nil if @debug == UNSET_VALUE
113
- @facts = nil if @facts == UNSET_VALUE
114
- @features = nil if @features == UNSET_VALUE
115
- @vars = nil if @vars == UNSET_VALUE
113
+ @bolt_exe = bolt_exe_path if @bolt_exe == UNSET_VALUE
114
+ @boltdir = '.' if @boltdir == UNSET_VALUE
115
+ @connect_timeout = nil if @connect_timeout == UNSET_VALUE
116
+ @host_key_check = nil if @host_key_check == UNSET_VALUE
117
+ @machine_alias = nil if @machine_alias == UNSET_VALUE
118
+ @machine_name = nil if @machine_name == UNSET_VALUE
119
+ @modulepath = nil if @modulepath == UNSET_VALUE
120
+ @port = nil if @port == UNSET_VALUE
121
+ @password = nil if @password == UNSET_VALUE
122
+ @private_key = nil if @private_key == UNSET_VALUE
123
+ @run_as = nil if @run_as == UNSET_VALUE
124
+ @ssl = nil if @ssl == UNSET_VALUE
125
+ @ssl_verify = nil if @ssl_verify == UNSET_VALUE
126
+ @sudo_password = nil if @sudo_password == UNSET_VALUE
127
+ @tmpdir = nil if @tmpdir == UNSET_VALUE
128
+ @user = nil if @user == UNSET_VALUE
129
+ @verbose = nil if @verbose == UNSET_VALUE
130
+ @debug = nil if @debug == UNSET_VALUE
131
+ @facts = nil if @facts == UNSET_VALUE
132
+ @features = nil if @features == UNSET_VALUE
133
+ @vars = nil if @vars == UNSET_VALUE
134
+ end
135
+
136
+ # Get the full path to the bolt executable
137
+ # @return [String] The path to the bolt exe
138
+ def bolt_exe_path
139
+ unless Vagrant::Util::Platform.windows?
140
+ return '/opt/puppetlabs/bin/bolt' if File.file?('/opt/puppetlabs/bin/bolt')
141
+ end
142
+ Vagrant::Util::Which.which('bolt') || 'bolt'
116
143
  end
117
144
 
118
145
  def validate(_machine)
@@ -127,10 +154,12 @@ class VagrantBolt::Config::Global < Vagrant.plugin('2', :config)
127
154
  group_objects = ['facts', 'features', 'vars']
128
155
  config = {}
129
156
  instance_variables_hash.each do |key, value|
130
- next if value.nil?
157
+ next if value.nil? || (value == UNSET_VALUE)
131
158
 
132
159
  if group_objects.include?(key)
133
160
  config[key] = value
161
+ elsif %r{machine_\w+}.match?(key)
162
+ config[key.sub('machine_', '')] = value
134
163
  else
135
164
  setting_map.each do |transport, settings|
136
165
  next unless settings.include?(key)
@@ -154,6 +183,7 @@ class VagrantBolt::Config::Global < Vagrant.plugin('2', :config)
154
183
  'run_as',
155
184
  'port',
156
185
  'private_key',
186
+ 'connect_timeout',
157
187
  'host_key_check',
158
188
  'sudo_password',
159
189
  'tmpdir',
@@ -20,12 +20,24 @@ class VagrantBolt::ConfigBuilder::Config < ConfigBuilder::Model::Base
20
20
  # @return [Boolean] Shows debug logging
21
21
  def_model_attribute :debug
22
22
 
23
+ # @!attribute [rw] connect_timeout
24
+ # @return [String] The timeout for the ssh connection (linux)
25
+ def_model_attribute :connect_timeout
26
+
23
27
  # @!attribute [rw] host_key_check
24
28
  # @return [Boolean] If the connection should check the host key on the remote host (linux)
25
29
  def_model_attribute :host_key_check
26
30
 
31
+ # @!attribute [rw] machine_alias
32
+ # @return [String] The alias of the machine to set in the bolt inventory
33
+ def_model_attribute :machine_alias
34
+
35
+ # @!attribute [rw] machine_name
36
+ # @return [String] The name of the machine to set in the bolt inventory
37
+ def_model_attribute :machine_name
38
+
27
39
  # @!attribute [rw] modulepath
28
- # @return [String] The path to the modules. Defaults to `modules`.
40
+ # @return [String] The path to the modules.
29
41
  def_model_attribute :modulepath
30
42
 
31
43
  # @!attribute [rw] name
@@ -33,21 +45,23 @@ class VagrantBolt::ConfigBuilder::Config < ConfigBuilder::Model::Base
33
45
  def_model_attribute :name
34
46
 
35
47
  # @!attribute [rw] nodes
48
+ # DEPRECATED. Use `targets` instead.
36
49
  # Note: The `node_list` will override this setting.
37
50
  # @return [Array<String, Symbol>, "ALL"] The nodes to run the task or plan on.
38
51
  # Valid values are an array of machine names or the string "ALL".
39
52
  def_model_attribute :nodes
40
53
 
41
54
  # @!attribute [rw] excludes
42
- # Note: The `node_list` will override this setting.
43
- # Note: This will be merged with `nodes`, with `excludes` taking precidence.
44
- # @return [Array<String, Symbol>] The nodes to exclude from running this task or plan on.
55
+ # Note: The `target_list` will override this setting.
56
+ # Note: This will be merged with `targets`, with `excludes` taking precidence.
57
+ # @return [Array<String, Symbol>] The targets to exclude from running this task or plan on.
45
58
  # Valid values are an array of machine names.
46
59
  def_model_attribute :excludes
47
60
 
48
61
  # @!attribute [rw] node_list
62
+ # DEPRECATED. Use `target_list` instead.
49
63
  # This setting overrides `nodes` and needs to be in the `protocol://ipaddress:port` URI format
50
- # @return [String] The bolt node list. This defaults to the currnet node.
64
+ # @return [String] The bolt node list. This defaults to the current node.
51
65
  def_model_attribute :node_list
52
66
 
53
67
  # @!attribute [rw] noop
@@ -94,6 +108,17 @@ class VagrantBolt::ConfigBuilder::Config < ConfigBuilder::Model::Base
94
108
  # @return [Boolean] If the connection should verify SSL on with WinRM (Windows)
95
109
  def_model_attribute :ssl_verify
96
110
 
111
+ # @!attribute [rw] targets
112
+ # Note: The `target_list` will override this setting.
113
+ # @return [Array<String, Symbol>, "ALL"] The targets to run the task or plan on.
114
+ # Valid values are an array of machine names or the string "ALL".
115
+ def_model_attribute :targets
116
+
117
+ # @!attribute [rw] target_list
118
+ # This setting overrides `targets` and needs to be in the `protocol://ipaddress:port` URI format
119
+ # @return [String] The bolt target list. This defaults to the current target.
120
+ def_model_attribute :target_list
121
+
97
122
  # @!attribute [rw] tmpdir
98
123
  # @return [String] The directory to upload and execute temporary files on the target
99
124
  def_model_attribute :tmpdir
@@ -118,32 +143,37 @@ class VagrantBolt::ConfigBuilder::Config < ConfigBuilder::Model::Base
118
143
  def to_proc
119
144
  proc do |config|
120
145
  bolt = config.bolt
121
- with_attr(:args) { |val| bolt.args = val }
122
- with_attr(:bolt_exe) { |val| bolt.bolt_exe = val }
123
- with_attr(:command) { |val| bolt.command = val }
124
- with_attr(:boltdir) { |val| bolt.boltdir = val }
125
- with_attr(:debug) { |val| bolt.debug = val }
126
- with_attr(:host_key_check) { |val| bolt.host_key_check = val }
127
- with_attr(:modulepath) { |val| bolt.modulepath = val }
128
- with_attr(:name) { |val| bolt.name = val }
129
- with_attr(:nodes) { |val| bolt.nodes = val }
130
- with_attr(:noop) { |val| bolt.noop = val }
131
- with_attr(:excludes) { |val| bolt.excludes = val }
132
- with_attr(:node_list) { |val| bolt.node_list = val }
133
- with_attr(:params) { |val| bolt.params = val }
134
- with_attr(:user) { |val| bolt.user = val }
135
- with_attr(:password) { |val| bolt.password = val }
136
- with_attr(:port) { |val| bolt.port = val }
137
- with_attr(:private_key) { |val| bolt.private_key = val }
138
- with_attr(:run_as) { |val| bolt.run_as = val }
139
- with_attr(:sudo_password) { |val| bolt.sudo_password = val }
140
- with_attr(:ssl) { |val| bolt.ssl = val }
141
- with_attr(:ssl_verify) { |val| bolt.ssl_verify = val }
142
- with_attr(:tmpdir) { |val| bolt.tmpdir = val }
143
- with_attr(:verbose) { |val| bolt.verbose = val }
144
- with_attr(:facts) { |val| bolt.facts = val }
145
- with_attr(:features) { |val| bolt.features = val }
146
- with_attr(:vars) { |val| bolt.vars = val }
146
+ with_attr(:args) { |val| bolt.args = val }
147
+ with_attr(:bolt_exe) { |val| bolt.bolt_exe = val }
148
+ with_attr(:command) { |val| bolt.command = val }
149
+ with_attr(:boltdir) { |val| bolt.boltdir = val }
150
+ with_attr(:debug) { |val| bolt.debug = val }
151
+ with_attr(:connect_timeout) { |val| bolt.connect_timeout = val }
152
+ with_attr(:host_key_check) { |val| bolt.host_key_check = val }
153
+ with_attr(:machine_alias) { |val| bolt.machine_alias = val }
154
+ with_attr(:machine_name) { |val| bolt.machine_name = val }
155
+ with_attr(:modulepath) { |val| bolt.modulepath = val }
156
+ with_attr(:name) { |val| bolt.name = val }
157
+ with_attr(:nodes) { |val| bolt.nodes = val }
158
+ with_attr(:noop) { |val| bolt.noop = val }
159
+ with_attr(:excludes) { |val| bolt.excludes = val }
160
+ with_attr(:node_list) { |val| bolt.node_list = val }
161
+ with_attr(:params) { |val| bolt.params = val }
162
+ with_attr(:user) { |val| bolt.user = val }
163
+ with_attr(:password) { |val| bolt.password = val }
164
+ with_attr(:port) { |val| bolt.port = val }
165
+ with_attr(:private_key) { |val| bolt.private_key = val }
166
+ with_attr(:run_as) { |val| bolt.run_as = val }
167
+ with_attr(:sudo_password) { |val| bolt.sudo_password = val }
168
+ with_attr(:ssl) { |val| bolt.ssl = val }
169
+ with_attr(:ssl_verify) { |val| bolt.ssl_verify = val }
170
+ with_attr(:targets) { |val| bolt.targets = val }
171
+ with_attr(:target_list) { |val| bolt.target_list = val }
172
+ with_attr(:tmpdir) { |val| bolt.tmpdir = val }
173
+ with_attr(:verbose) { |val| bolt.verbose = val }
174
+ with_attr(:facts) { |val| bolt.facts = val }
175
+ with_attr(:features) { |val| bolt.features = val }
176
+ with_attr(:vars) { |val| bolt.vars = val }
147
177
  end
148
178
  end
149
179
  # rubocop:enable Metrics/BlockLength
@@ -29,7 +29,7 @@ module VagrantBolt::ConfigBuilder::MonkeyPatches
29
29
 
30
30
  def eval_bolt_triggers_root(vm_root_config)
31
31
  # Configure the vm bolt object if the options exist
32
- triggers = attr(:bolt_triggers) || [] # rubocop:disable Style/Attr
32
+ triggers = attr(:bolt_triggers) || []
33
33
  triggers.each do |config|
34
34
  f = VagrantBolt::ConfigBuilder::Triggers.new_from_hash(config)
35
35
  f.call(vm_root_config)
@@ -20,12 +20,24 @@ class VagrantBolt::ConfigBuilder::Provisioner < ConfigBuilder::Model::Provisione
20
20
  # @return [Boolean] Shows debug logging
21
21
  def_model_attribute :debug
22
22
 
23
+ # @!attribute [rw] connect_timeout
24
+ # @return [String] The ssh connection timeout (linux)
25
+ def_model_attribute :connect_timeout
26
+
23
27
  # @!attribute [rw] host_key_check
24
28
  # @return [Boolean] If the connection should check the host key on the remote host (linux)
25
29
  def_model_attribute :host_key_check
26
30
 
31
+ # @!attribute [rw] machine_alias
32
+ # @return [String] The alias of the machine to set in the bolt inventory
33
+ def_model_attribute :machine_alias
34
+
35
+ # @!attribute [rw] machine_name
36
+ # @return [String] The name of the machine to set in the bolt inventory
37
+ def_model_attribute :machine_name
38
+
27
39
  # @!attribute [rw] modulepath
28
- # @return [String] The path to the modules. Defaults to `modules`.
40
+ # @return [String] The path to the modules.
29
41
  def_model_attribute :modulepath
30
42
 
31
43
  # @!attribute [rw] name
@@ -33,6 +45,7 @@ class VagrantBolt::ConfigBuilder::Provisioner < ConfigBuilder::Model::Provisione
33
45
  def_model_attribute :name
34
46
 
35
47
  # @!attribute [rw] nodes
48
+ # DEPRECATED. Use `targets` instead.
36
49
  # Note: The `node_list` will override this setting.
37
50
  # @return [Array<String, Symbol>, "ALL"] The nodes to run the task or plan on.
38
51
  # Valid values are an array of machine names or the string "ALL".
@@ -43,9 +56,9 @@ class VagrantBolt::ConfigBuilder::Provisioner < ConfigBuilder::Model::Provisione
43
56
  def_model_attribute :noop
44
57
 
45
58
  # @!attribute [rw] excludes
46
- # Note: The `node_list` will override this setting.
47
- # Note: This will be merged with `nodes`, with `excludes` taking precidence.
48
- # @return [Array<String, Symbol>] The nodes to exclude from running this task or plan on.
59
+ # Note: The `target_list` will override this setting.
60
+ # Note: This will be merged with `targets`, with `excludes` taking precidence.
61
+ # @return [Array<String, Symbol>] The targets to exclude from running this task or plan on.
49
62
  # Valid values are an array of machine names.
50
63
  def_model_attribute :excludes
51
64
 
@@ -94,6 +107,17 @@ class VagrantBolt::ConfigBuilder::Provisioner < ConfigBuilder::Model::Provisione
94
107
  # @return [Boolean] If the connection should verify SSL on with WinRM (Windows)
95
108
  def_model_attribute :ssl_verify
96
109
 
110
+ # @!attribute [rw] targets
111
+ # Note: The `target_list` will override this setting.
112
+ # @return [Array<String, Symbol>, "ALL"] The targets to run the task or plan on.
113
+ # Valid values are an array of machine names or the string "ALL".
114
+ def_model_attribute :targets
115
+
116
+ # @!attribute [rw] target_list
117
+ # This setting overrides `targets` and needs to be in the `protocol://ipaddress:port` URI format
118
+ # @return [String] The bolt target list. This defaults to the current target.
119
+ def_model_attribute :target_list
120
+
97
121
  # @!attribute [rw] tmpdir
98
122
  # @return [String] The directory to upload and execute temporary files on the target
99
123
  def_model_attribute :tmpdir
@@ -16,12 +16,12 @@ class VagrantBolt::Runner
16
16
  # @param [Symbol, String] command The command of bolt to run; task or plan
17
17
  # @param [String] name The name of the bolt task or plan to run
18
18
  # @param [Hash] args A optional hash of bolt config overrides. No merging will be done with the overrides
19
- # @example run('task', 'facts', {node_list: "machinename"})
19
+ # @example run('task', 'facts', {targets: ["machinename"]})
20
20
  def run(command, name, **args)
21
21
  @boltconfig = setup_overrides(command, name, **args)
22
- # Don't run anything if there are nodes to run it on
23
- # TODO: Gate this in a more efficient manner. It is possible to run plans without a node list.
24
- return if @boltconfig.node_list.nil?
22
+ # Don't run anything if there are targets to run it on
23
+ # TODO: Gate this in a more efficient manner. It is possible to run plans without a target list.
24
+ return if @boltconfig.target_list.nil?
25
25
 
26
26
  @inventory_path = VagrantBolt::Util::Bolt.update_inventory_file(@env)
27
27
  validate
@@ -44,14 +44,14 @@ class VagrantBolt::Runner
44
44
  config = VagrantBolt::Util::Config.merge_config(config, @env.vagrantfile.config.bolt)
45
45
  # Add any additional arguments to the config object
46
46
  config.set_options(args) unless args.nil?
47
- # Configure the node_list based on the config
48
- config.node_list ||= [config.nodes - config.excludes].flatten.join(',') unless config.nodes.empty? || config.nodes.to_s.casecmp("all").zero?
49
- config.node_list ||= [VagrantBolt::Util::Machine.nodes_in_environment(@env).map(&:name) - config.excludes].flatten.join(',') if config.nodes.to_s.casecmp("all").zero?
50
- config.node_list ||= @machine.name.to_s unless config.excludes.include?(@machine.name.to_s)
47
+ # Configure the target_list based on the config
48
+ config.target_list ||= [config.targets - config.excludes].flatten.join(',') unless config.targets.empty? || config.targets.to_s.casecmp("all").zero?
49
+ config.target_list ||= [VagrantBolt::Util::Machine.machines_in_environment(@env).map(&:name) - config.excludes].flatten.join(',') if config.targets.to_s.casecmp("all").zero?
50
+ config.target_list ||= @machine.name.to_s unless config.excludes.include?(@machine.name.to_s)
51
51
 
52
52
  # Ensure these are absolute paths to allow for running vagrant commands outside of the root dir
53
- config.modulepath = VagrantBolt::Util::Config.full_path(config.modulepath, @env.root_path)
54
- config.boltdir = VagrantBolt::Util::Config.full_path(config.boltdir, @env.root_path)
53
+ config.modulepath = VagrantBolt::Util::Config.relative_path(config.modulepath, @env.root_path)
54
+ config.boltdir = VagrantBolt::Util::Config.relative_path(config.boltdir, @env.root_path)
55
55
 
56
56
  config
57
57
  end
@@ -36,7 +36,7 @@ module VagrantBolt::Util
36
36
  end
37
37
 
38
38
  command << "--inventoryfile \'#{inventory_path}\'" unless inventory_path.nil?
39
- command << "--nodes \'#{config.node_list}\'" unless config.node_list.nil?
39
+ command << "--targets \'#{config.target_list}\'" unless config.target_list.nil?
40
40
  command << config.args unless config.args.nil?
41
41
  command.flatten.join(" ")
42
42
  end
@@ -45,12 +45,12 @@ module VagrantBolt::Util
45
45
  # @param env [Object] The env object
46
46
  # @return [Hash] The hash of config options for the inventory.yaml
47
47
  def self.generate_inventory_hash(env)
48
- inventory = { 'nodes' => [] }
48
+ inventory = { 'version' => 2, 'targets' => [] }
49
49
  inventory.merge!(env.vagrantfile.config.bolt.inventory_config.compact)
50
- VagrantBolt::Util::Machine.nodes_in_environment(env).each do |vm|
50
+ VagrantBolt::Util::Machine.machines_in_environment(env).each do |vm|
51
51
  next unless VagrantBolt::Util::Machine.running?(vm)
52
52
 
53
- inventory['nodes'] << generate_node_hash(vm)
53
+ inventory['targets'] << generate_node_hash(vm)
54
54
  end
55
55
  inventory.compact
56
56
  end
@@ -64,18 +64,19 @@ module VagrantBolt::Util
64
64
  ssh_info = machine.ssh_info
65
65
  return node_hash if ssh_info.nil?
66
66
 
67
- node_hash['alias'] = machine.name.to_s
68
67
  machine_config = machine.config.bolt.inventory_config
69
68
  node_hash['config'] = {}
70
69
  transport = VagrantBolt::Util::Machine.windows?(machine) ? 'winrm' : 'ssh'
71
70
  node_hash['config'][transport] = machine_transport_hash(machine, machine_config, ssh_info).compact
72
71
  node_hash['config']['transport'] = transport
73
- node_hash['name'] = "#{transport}://#{ssh_info[:host]}:#{node_hash['config'][transport]['port']}"
72
+ node_hash['uri'] = "#{transport}://#{ssh_info[:host]}:#{node_hash['config'][transport]['port']}"
74
73
  machine_config.each do |key, value|
75
74
  next if key == 'config' || value.nil? || value.empty?
76
75
 
77
76
  node_hash[key] = value
78
77
  end
78
+ node_hash['name'] ||= machine.name.to_s
79
+ node_hash['alias'] = machine.name.to_s if node_hash['alias'].nil? && node_hash['name'] != machine.name.to_s
79
80
  node_hash.compact
80
81
  end
81
82
 
@@ -108,7 +109,7 @@ module VagrantBolt::Util
108
109
  # @param env [Object] The environment
109
110
  # @return [String] The path to the inventory file
110
111
  def self.inventory_file(env)
111
- File.join(env.local_data_path, 'bolt_inventory.yaml')
112
+ VagrantBolt::Util::Config.relative_path('bolt_inventory.yaml', env.local_data_path)
112
113
  end
113
114
 
114
115
  # Update and write the inventory file for the current running machines
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'pathname'
4
+
3
5
  module VagrantBolt::Util
4
6
  module Config
5
7
  # Config Utility Functions
@@ -30,14 +32,25 @@ module VagrantBolt::Util
30
32
  result
31
33
  end
32
34
 
33
- # Convert a path to the absolute path of the inventory if it is relative
35
+ # Convert a path to the absolute path if it is relative
34
36
  # @param path [String] The path to convert
35
37
  # @param root_path [Object] The root path to append
36
38
  # @return [String] The absolute path or nil if path is nil
37
39
  def self.full_path(path, root_path)
38
40
  return path if path.nil? || root_path.nil?
39
41
 
40
- %r{^/.*}.match?(path) ? path : "#{root_path}/#{path}"
42
+ (Pathname.new path).absolute? ? path : File.expand_path(path, root_path)
43
+ end
44
+
45
+ # Convert a path to the relative path from the current directory
46
+ # @param path [String] The path to convert
47
+ # @param root_path [Object] The root path to append
48
+ # @return [String] The relative path or nil if path is nil
49
+ def self.relative_path(path, root_path)
50
+ return path if path.nil?
51
+
52
+ absolute_path = Pathname.new full_path(path, root_path)
53
+ absolute_path.relative_path_from(Pathname.getwd).to_s
41
54
  end
42
55
  end
43
56
  end