require 'pp' module Catfish class CLI class Init attr_reader :options, :thor def initialize(options, thor) @options = options @thor = thor end def run p 'Initializing Catfish repository' provisioners = options[:provisioners] || [] plugins = options[:plugins] || [] # Shorthand aliases options[:communicator] = 'winrm' if options[:windows] provisioners << 'shell' if options[:shell] provisioners << 'puppet' if options[:puppet] plugins << 'vagrant-librarian-puppet' if options['puppet-librarian-puppet'] opts = { provisioners: provisioners || [], shell_paths: options['shell-paths'] || ['{{PATH_TO_YOUR_SCRIPT}}'], puppet_hiera: options['puppet-hiera'], puppet_librarian_puppet: options['puppet-librarian-puppet'], communicator: options[:communicator] || 'ssh', winrm_username: options['winrm-username'] || '{{YOUR_WINRM_USERNAME}}', winrm_password: options['winrm-password'] || '{{YOUR_WINRM_PASSWORD}}', ssh_username: options['ssh-username'] || '{{YOUR_SSH_USERNAME}}', ssh_private_key_path: options['ssh-private-key-path'] || '{{PATH_TO_YOUR_SSH_PRIVATE_KEY}}', servers: options['servers'] || [], plugins: plugins || [] } templates = { 'Catfishfile.tt' => 'Catfishfile', 'Vagrantfile.tt' => 'Vagrantfile' } if provisioners.include? 'puppet' templates.merge!('puppet/manifests/default.pp.tt' => 'manifests/default.pp') templates.merge!('puppet/Puppetfile.tt' => 'Puppetfile') if options['puppet-librarian-puppet'] if options['puppet-hiera'] templates.merge!('puppet/hiera.yaml.tt' => 'hiera.yaml') templates.merge!('puppet/hiera/common.yaml.tt' => 'hiera/common.yaml') end end templates.each do |src, dst| thor.template(src, dst, opts) end puts 'Repository initialized. Remember to:' puts ' - Check your Vagrantfile and replace any placeholders' puts ' - Edit your Catfish file and list target servers' end end end end