BryanDavis has uploaded a new change for review. https://gerrit.wikimedia.org/r/157705
Change subject: Add command line tool to manage hiera settings ...................................................................... Add command line tool to manage hiera settings Make managing hiera settings easier by providing a vagrant command to add and delete settings in the vagrant-managed.yaml hiera file. Change-Id: I2cf01b68897dbc9780fb92c8c8b13e4e32262920 --- M lib/mediawiki-vagrant.rb M lib/mediawiki-vagrant/environment.rb A lib/mediawiki-vagrant/hiera.rb M lib/mediawiki-vagrant/version.rb M puppet/hiera.yaml 5 files changed, 101 insertions(+), 13 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant refs/changes/05/157705/1 diff --git a/lib/mediawiki-vagrant.rb b/lib/mediawiki-vagrant.rb index a0c7da2..3e06ce1 100644 --- a/lib/mediawiki-vagrant.rb +++ b/lib/mediawiki-vagrant.rb @@ -52,6 +52,11 @@ ImportDump end + command 'hiera' do + require 'mediawiki-vagrant/hiera' + Hiera + end + action_hook(self::ALL_ACTIONS) do |hook| require 'mediawiki-vagrant/middleware' hook.before(Vagrant::Action::Builtin::Provision, Middleware) diff --git a/lib/mediawiki-vagrant/environment.rb b/lib/mediawiki-vagrant/environment.rb index 051ffa9..ac96fa8 100644 --- a/lib/mediawiki-vagrant/environment.rb +++ b/lib/mediawiki-vagrant/environment.rb @@ -55,9 +55,10 @@ # def roles_enabled migrate_roles - return [] unless hiera_data.exist? - hiera = hiera_data.open('r') { |io| YAML.load(io) } + hiera = hiera_load + return [] unless hiera.key?('classes') + roles = hiera['classes'].map do |r| r.match(/^role::(\S+)/) { |m| m[1] } end @@ -67,17 +68,10 @@ # Updates the enabled Puppet roles to the given set. # def update_roles(roles) - if hiera_data.exist? - hiera = hiera_data.open('r') { |io| YAML.load(io) } - else - hiera = {'classes' => []} - end - hiera['classes'] = roles.sort.uniq.map do |r| + classes = roles.sort.uniq.map do |r| "role::#{r.sub(/^role::/, '')}" end - - yaml = YAML.dump(hiera) - hiera_data.open('w') { |f| f.write(yaml) } + hiera_set('classes', classes) end # If it has been a week or more since remote commits have been fetched, @@ -104,6 +98,26 @@ FileUtils.rm_r Dir[path('settings.d/wikis')] end + def hiera_get(key) + hiera_load.key(key) + end + + def hiera_set(key, value) + hiera = hiera_load + hiera[key] = value + hiera_save(hiera) + end + + def hiera_delete(key) + if hiera_data.exist? + hiera = hiera_load + if hiera.key?(key) + hiera.delete(key) + hiera_save(hiera) + end + end + end + private def module_path(*subpaths) @@ -114,6 +128,15 @@ path('puppet/hieradata/vagrant-managed.yaml') end + def hiera_load + return {} unless hiera_data.exist? + hiera_data.open('r') { |io| YAML.load(io) } + end + + def hiera_save(data) + hiera_data.open('w') { |f| f.write(YAML.dump(data)) } + end + def stale_head? head = path('.git/FETCH_HEAD') head.exist? && (Time.now - head.mtime) > STALENESS diff --git a/lib/mediawiki-vagrant/hiera.rb b/lib/mediawiki-vagrant/hiera.rb new file mode 100644 index 0000000..e37f040 --- /dev/null +++ b/lib/mediawiki-vagrant/hiera.rb @@ -0,0 +1,60 @@ +require "mediawiki-vagrant/plugin_environment" +require "optparse" + +module MediaWikiVagrant + # Provides a command-line interface for configuration of hiera settings. + # + class Hiera < Vagrant.plugin(2, :command) + include PluginEnvironment + + def self.synopsis + "configures hiera settings" + end + + def execute + options = { + unset: [], + } + + opts = OptionParser.new do |o| + o.banner = "Usage: vagrant hiera [options] [key] [value]" + o.separator "" + o.separator "Options:" + o.separator "" + + o.on("--unset NAME", "Remove a configured key") do |name| + options[:unset] << name + end + end + + argv = parse_options(opts) + return if !argv + + if options[:unset].any? + unset_key(options[:unset]) + elsif argv.length == 2 + set_key(*argv) + else + @env.ui.error opts + return 1 + end + + 0 + end + + private + + # Configures the given key with the given value. + # + def set_key(name, value) + @mwv.hiera_set(name, value) + end + + # Unsets the given keys. + # + def unset_key(names) + names.each { |name| @mwv.hiera_delete(name) } + end + end +end + diff --git a/lib/mediawiki-vagrant/version.rb b/lib/mediawiki-vagrant/version.rb index 7975f6e..6c62800 100644 --- a/lib/mediawiki-vagrant/version.rb +++ b/lib/mediawiki-vagrant/version.rb @@ -1,3 +1,3 @@ module MediaWikiVagrant - VERSION = '0.1.2' + VERSION = '0.1.3' end diff --git a/puppet/hiera.yaml b/puppet/hiera.yaml index ac28abd..974c96f 100644 --- a/puppet/hiera.yaml +++ b/puppet/hiera.yaml @@ -5,7 +5,7 @@ :datadir: /vagrant/puppet/hieradata :hierarchy: - local - - "environment/%{::environment}" - vagrant-managed + - "environment/%{::environment}" - common :logger: console -- To view, visit https://gerrit.wikimedia.org/r/157705 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2cf01b68897dbc9780fb92c8c8b13e4e32262920 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/vagrant Gerrit-Branch: master Gerrit-Owner: BryanDavis <bda...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits