vagrant-flow 1.0.6 → 1.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46d12223aa802b6bc1cb214ed04de5b5663f78c5
4
- data.tar.gz: c0eed0a83ea084a0df6d2b10e44a209205a715d8
3
+ metadata.gz: 987d348d2383b329ac2e6d646ffb9a84da357da2
4
+ data.tar.gz: 11aaca9f68aa6db12f372e3eb92c29c1c8fd6395
5
5
  SHA512:
6
- metadata.gz: 4e1f371af3f7581d71fdb5c2cb597ad6063375eeb05df6381fbfe2ebbf713a77284c06d6c373e63d3f215de4ebfe35e85e9098c2fd441ee0892bc565842b05cc
7
- data.tar.gz: d7cd6f083e7bb8f7a9e75ab4a2d5a5cb99baca2b081453fb026d2e3076b00ca10ab131dc2fbb7877c5492fcd65f5a0bb0c1589c4b69de8edb61a9bf9ff179b07
6
+ metadata.gz: 4c335c7777a4c0f1684b3dbda635c78b14877aa679754d2fffdc2a672c9f9285d57611ea019090597165ff0cbc136e4e15d8c8d75e5893700a3009d064170aa5
7
+ data.tar.gz: 21e55b67a680606edccfbe4cb57e7dbf8735eac405117de095fadeae97f0e46b443c3f7522e7955b7dda7db11d63ac7a4bbb58452760b691d18b39e79cd3269e
data/README.md CHANGED
@@ -24,18 +24,66 @@ Or install it yourself as:
24
24
 
25
25
  ## Usage
26
26
  ```
27
+ Usage: vagrant ansible-inventory [-hgpq]
28
+ This plugin looks for groupconfig.yml as the default configuration
29
+ Do not use -p and -g options together!
30
+
31
+ -g, --group_config_file FILEPATH (Optional) YAML file containing group config
32
+ -p, --vagrantfileparse (Optional) Read in the VAGRANTFILE's ansible group config
33
+ -q, --quiet (Optional) Suppress output to STDOUT and STDERR
34
+ -h, --help (Optional) Print this help
35
+ ```
36
+
37
+ ## Example usages
38
+ This will look for a file in the pwd named groupconfig.yml and attempt to make the inventory
39
+ ```
40
+ vagrant ansible-inventory
41
+ ```
42
+
43
+
44
+
45
+ This will look for a file in the pwd named myOwnGroupConfig.yml and attempt to make the inventory
46
+ ```
47
+ vagrant ansible-inventory -g myOwnGroupConfig.yml
48
+ ```
49
+
50
+
51
+
52
+ This will parse the vagrant file for ansible group configs
53
+ ```
54
+ vagrant ansible-inventory -p
55
+ ```
56
+
57
+
58
+
59
+
60
+
61
+ ## Use case
62
+ ```
27
63
  #Bring up your vagrant machines
28
64
  vagrant up
29
- #Run ansible inventory
65
+ #Run ansible inventory (this assumes the file groupconfig.yml exists)
30
66
  vagrant ansible-inventory
31
67
  #point ansible-playbook to the generated vagrant-flow_ansible_inventory, and point them to whatever playbook you'd like
32
68
  ansible-playbook -i path/to/vagrant-flow_ansible_inventory my_playbook.yml
33
69
  ```
34
70
  ## Usage Expectations
71
+ #### Don't mix the -p and -g options. Unexpected things will happen.
35
72
 
36
- This plugin expects your vagrantfile to contain a configuration to define groups for all your VMs.
73
+ Example groupconfig.yml file (for use with no optional command line arguments or by pointing to non-default file with -g option)
74
+ ```
75
+ ---
76
+ common:children:
77
+ - testgroup
78
+ - servergroup
79
+ testgroup:
80
+ - testbox
81
+ servergroup:
82
+ - server1
83
+ - server2
84
+ ```
37
85
 
38
- Example VAGRANTFILE excerpt:
86
+ Example VAGRANTFILE excerpt (for use with -p option):
39
87
  ```
40
88
  config.vm.provision "ansible" do |ansible|
41
89
  #ansible.playbook is required, but emptyplaybook.yml can do nothing,
@@ -49,7 +97,7 @@ config.vm.provision "ansible" do |ansible|
49
97
  end
50
98
  ```
51
99
 
52
- Example playbook.yml:
100
+ Example playbook.yml to use after ansible-inventory has run with command `ansible-playbook -i vagrant-flow_ansible_inventory playbook.yml`:
53
101
  ```
54
102
  ---
55
103
  #Configures the groups defined in common:children
@@ -0,0 +1,26 @@
1
+ require 'yaml'
2
+
3
+
4
+
5
+ ###This shows how to make a valid configuration file in YAML format for vagrant-flow to consume with the ansible-inventory command
6
+
7
+ x = {
8
+ "common:children"=>["jenkins","server"],
9
+ "jenkins"=>["jenkinsdp"],
10
+ "server"=>["sparkngin1","sparkngin2"],
11
+ }
12
+
13
+ begin
14
+ File.open('groupconfig.yml', 'w') {|f| f.write x.to_yaml }
15
+ rescue
16
+ warn "Could not write file groupconfig.yml"
17
+ end
18
+
19
+ y = YAML.load(x.to_yaml)
20
+
21
+ y.each {|key,value|
22
+ puts key
23
+ puts value
24
+ puts "\n"
25
+ }
26
+
@@ -1,5 +1,6 @@
1
1
  require 'optparse'
2
2
  require "vagrant"
3
+ require "yaml"
3
4
 
4
5
  module VagrantPlugins
5
6
  module VagrantFlow
@@ -19,28 +20,37 @@ module VagrantPlugins
19
20
  machines_configs = {}
20
21
  inventory_configs = {}
21
22
 
23
+ default_group_config_file = "groupconfig.yml"
22
24
  options = {}
23
25
  options[:destroy_on_error] = true
24
26
  options[:parallel] = false
25
27
  options[:provision_ignore_sentinel] = false
26
-
28
+ options[:quiet] = false
29
+
30
+ #Setting to read in a file other than default_group_config_File
31
+ options[:custom_config_file] = false
32
+ #Setting to parse the VAGRANTFILE's ansible group config
33
+ options[:vagrantFileAnsibleConfig] = false
34
+
35
+ #Parse option, look up OptionParser documentation
27
36
  opts = OptionParser.new do |o|
28
37
  # o.banner = "Usage: vagrant ansible-inventory [vm-name] [options] [-h]"
29
- o.banner = "Usage: vagrant ansible-inventory [-h]"
38
+ o.banner = "A NeverWinterDP technology from the Department of Badass.\n\n"+
39
+ "Usage: vagrant ansible-inventory [-hgpq]\nThis looks for groupconfig.yml as the default configuration\n"+
40
+ "Do not use -p and -g options together!"
30
41
  o.separator ""
31
-
32
- # Don't use either of these, just keeping them here as examples of what options are possible
33
- #o.on("--provision-with x,y,z", Array,
34
- # "Enable only certain provisioners, by type.") do |list|
35
- # options[:provision_types] = list.map { |type| type.to_sym }
36
- #end
42
+ o.on("-g", "--group_config_file FILEPATH", "(Optional) YAML file containing group config") do |f|
43
+ options[:custom_config_file] = f
44
+ end
45
+
46
+ o.on("-p", "--vagrantfileparse", "(Optional) Read in the VAGRANTFILE's ansible group config") do |f|
47
+ options[:vagrantFileAnsibleConfig] = true
48
+ end
49
+
50
+ o.on("-q", "--quiet", "(Optional) Suppress output to STDOUT and STDERR") do |f|
51
+ options[:quiet] = true
52
+ end
37
53
 
38
- # This option isn't used.
39
- #o.on("--[no-]parallel",
40
- # "Enable or disable parallelism if provider supports it.") do |parallel|
41
- # options[:parallel] = parallel
42
- #end
43
-
44
54
  end
45
55
 
46
56
  # Parse the options # Builtin from the Command Class
@@ -48,6 +58,8 @@ module VagrantPlugins
48
58
  # Automatically detects -h for help
49
59
  argv = parse_options(opts)
50
60
  return if !argv
61
+
62
+
51
63
 
52
64
  # The following are already setup by the parent class
53
65
  # @env
@@ -56,10 +68,11 @@ module VagrantPlugins
56
68
 
57
69
  # Go over each VM and bring it up
58
70
  @logger.debug("'ansible-inventory' created for the whole env")
59
-
60
71
 
72
+ #Initialize group_machines, the has containing group=>machinename configs
73
+ group_machines={}
61
74
 
62
- provisioners = {}
75
+ #Get info about the vagrant boxes
63
76
  with_target_vms(argv, :provider => options[:provider]) do |machine|
64
77
  # @env.ui
65
78
  # output methods: :ask, :detail, :warn, :error, :info, :output, :success
@@ -79,9 +92,6 @@ module VagrantPlugins
79
92
  }
80
93
  # Outputs to the stdout
81
94
 
82
- #The provisioning information from teh vagrant file, this will contain our defined ansible groups
83
- provisioners = machine.config.vm.provisioners
84
-
85
95
  inventory_configs = {
86
96
  :vagrant_file_dir => machine.env.root_path,
87
97
  :vagrant_flow_file => machine.env.root_path.join("vagrant-flow_ansible_inventory")
@@ -90,6 +100,43 @@ module VagrantPlugins
90
100
  machines_configs[variables[:host_key]]= variables
91
101
  end
92
102
 
103
+ #Hash containing group/machine configuration
104
+ group_machines={}
105
+ #Determine group_machines based on what config options are passed in
106
+ #Read in config from vagrantfile's ansible config
107
+ if options[:vagrantFileAnsibleConfig] == true
108
+ provisioners = []
109
+ with_target_vms(argv, :provider => options[:provider]) do |machine|
110
+ #The provisioning information from teh vagrant file, this will contain our defined ansible groups
111
+ #Concatenate all the provisioner configs together
112
+ if machine.config.vm.provisioners
113
+ provisioners.concat(machine.config.vm.provisioners)
114
+ end
115
+ end
116
+ #Since Vagrant machines will likely contain the same configs,
117
+ #Merge the config together to remove duplicate entries in our
118
+ #group/machine configuration
119
+ provisioners.each {|prov|
120
+ group_machines = group_machines.merge(prov.config.groups)
121
+ }
122
+ #Read in config from yaml file
123
+ else
124
+ #Use config option if specified
125
+ if options[:custom_config_file] != false
126
+ default_group_config_file = options[:custom_config_file]
127
+ end
128
+ begin
129
+ #Load YAML
130
+ group_machines = YAML.load_file(default_group_config_file)
131
+ rescue
132
+ #Give warning if no file could be found
133
+ if not options[:quiet]
134
+ warn "Could not open file: "+default_group_config_file.to_s
135
+ end
136
+ end
137
+ end
138
+
139
+
93
140
 
94
141
  # Outputs to the stdout
95
142
  # @env.ui.info(machine.name)
@@ -120,33 +167,43 @@ module VagrantPlugins
120
167
  #PP.pp(outputs)
121
168
  #puts "\n\n"
122
169
 
170
+
171
+
123
172
  inventory_configs[:vagrant_flow_file].open('w') do |file|
124
173
  header_txt="# Generated by vagrant-flow, part of NeverwinterDP\n\n"
125
- safe_puts(header_txt)
174
+ if not options[:quiet]
175
+ safe_puts(header_txt)
176
+ end
126
177
  file.write(header_txt)
127
178
 
128
179
  #Now we maps from our VAGRANTFILE defined groups in our provisioners.config.groups
129
180
  #To our configuration strings we got from outputs
130
- provisioners.each do |prov|
131
- prov.config.groups.each do |groupname,machines|
181
+ group_machines.each do |groupname,machines|
182
+ if not options[:quiet]
132
183
  puts "["+groupname+"]\n"
133
- file.write "["+groupname+"]\n"
134
- machines.each do |machinename|
135
- #if we match :children, then we have an ansible config that's
136
- #pointing to another group, not a specific machine
137
- if /:children/.match(groupname)
184
+ end
185
+ file.write "["+groupname+"]\n"
186
+ machines.each do |machinename|
187
+ #if we match :children, then we have an ansible config that's
188
+ #pointing to another group, not a specific machine
189
+ if /:children/.match(groupname)
190
+ if not options[:quiet]
138
191
  puts machinename
139
- file.write machinename+"\n"
140
- else
192
+ end
193
+ file.write machinename+"\n"
194
+ else
195
+ if not options[:quiet]
141
196
  puts outputs[machinename.to_sym]+"\n"
142
- file.write outputs[machinename.to_sym]+"\n"
143
197
  end
198
+ file.write outputs[machinename.to_sym]+"\n"
144
199
  end
200
+ end
201
+ if not options[:quiet]
145
202
  puts "\n"
146
- file.write "\n"
147
- end
148
- end
149
- end
203
+ end
204
+ file.write "\n"
205
+ end
206
+ end
150
207
  0
151
208
  end # End Execute
152
209
 
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VagrantFlow
3
- VERSION = "1.0.6"
3
+ VERSION = "1.0.7"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-flow
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Morin
@@ -50,6 +50,7 @@ files:
50
50
  - NEVERWINTERDP
51
51
  - README.md
52
52
  - Rakefile
53
+ - create_sample_ansible-inventory_input-file.rb
53
54
  - lib/vagrant-flow.rb
54
55
  - lib/vagrant-flow/command.rb
55
56
  - lib/vagrant-flow/plugin.rb