jamie 0.1.0.alpha12 → 0.1.0.alpha13
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.
- data/lib/jamie/driver/vagrant.rb +4 -20
 - data/lib/jamie/version.rb +1 -1
 - data/lib/jamie.rb +70 -15
 - metadata +2 -2
 
    
        data/lib/jamie/driver/vagrant.rb
    CHANGED
    
    | 
         @@ -15,15 +15,15 @@ module Jamie 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                  def perform_create(instance, state)
         
     | 
| 
       17 
17 
     | 
    
         
             
                    state['name'] = instance.name
         
     | 
| 
       18 
     | 
    
         
            -
                     
     | 
| 
      
 18 
     | 
    
         
            +
                    run_command "vagrant up #{state['name']} --no-provision"
         
     | 
| 
       19 
19 
     | 
    
         
             
                  end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                  def perform_converge(instance, state)
         
     | 
| 
       22 
     | 
    
         
            -
                     
     | 
| 
      
 22 
     | 
    
         
            +
                    run_command "vagrant provision #{state['name']}"
         
     | 
| 
       23 
23 
     | 
    
         
             
                  end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                  def perform_destroy(instance, state)
         
     | 
| 
       26 
     | 
    
         
            -
                     
     | 
| 
      
 26 
     | 
    
         
            +
                    run_command "vagrant destroy #{state['name']} -f"
         
     | 
| 
       27 
27 
     | 
    
         
             
                    state.delete('name')
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
         @@ -34,23 +34,7 @@ module Jamie 
     | 
|
| 
       34 
34 
     | 
    
         
             
                  end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                  def ssh(ssh_args, cmd)
         
     | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  def run(cmd)
         
     | 
| 
       41 
     | 
    
         
            -
                    puts "       [vagrant command] '#{display_cmd(cmd)}'"
         
     | 
| 
       42 
     | 
    
         
            -
                    sh = Mixlib::ShellOut.new(cmd, :live_stream => STDOUT,
         
     | 
| 
       43 
     | 
    
         
            -
                      :timeout => 60000)
         
     | 
| 
       44 
     | 
    
         
            -
                    sh.run_command
         
     | 
| 
       45 
     | 
    
         
            -
                    puts "       [vagrant command] ran in #{sh.execution_time} seconds."
         
     | 
| 
       46 
     | 
    
         
            -
                    sh.error!
         
     | 
| 
       47 
     | 
    
         
            -
                  rescue Mixlib::ShellOut::ShellCommandFailed => ex
         
     | 
| 
       48 
     | 
    
         
            -
                    raise ActionFailed, ex.message
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                  def display_cmd(cmd)
         
     | 
| 
       52 
     | 
    
         
            -
                    parts = cmd.partition("\n")
         
     | 
| 
       53 
     | 
    
         
            -
                    parts[1] == "\n" ? "#{parts[0]}..." : cmd
         
     | 
| 
      
 37 
     | 
    
         
            +
                    run_command %{vagrant ssh #{ssh_args.first} --command '#{cmd}'}
         
     | 
| 
       54 
38 
     | 
    
         
             
                  end
         
     | 
| 
       55 
39 
     | 
    
         
             
                end
         
     | 
| 
       56 
40 
     | 
    
         
             
              end
         
     | 
    
        data/lib/jamie/version.rb
    CHANGED
    
    
    
        data/lib/jamie.rb
    CHANGED
    
    | 
         @@ -555,6 +555,59 @@ module Jamie 
     | 
|
| 
       555 
555 
     | 
    
         
             
                end
         
     | 
| 
       556 
556 
     | 
    
         
             
              end
         
     | 
| 
       557 
557 
     | 
    
         | 
| 
      
 558 
     | 
    
         
            +
              # Stateless utility methods used in different contexts. Essentially a mini
         
     | 
| 
      
 559 
     | 
    
         
            +
              # PassiveSupport library.
         
     | 
| 
      
 560 
     | 
    
         
            +
              module Util
         
     | 
| 
      
 561 
     | 
    
         
            +
             
     | 
| 
      
 562 
     | 
    
         
            +
                def self.to_camel_case(str)
         
     | 
| 
      
 563 
     | 
    
         
            +
                  str.split('_').map { |w| w.capitalize }.join
         
     | 
| 
      
 564 
     | 
    
         
            +
                end
         
     | 
| 
      
 565 
     | 
    
         
            +
             
     | 
| 
      
 566 
     | 
    
         
            +
                def self.to_snake_case(str)
         
     | 
| 
      
 567 
     | 
    
         
            +
                  str.split('::').
         
     | 
| 
      
 568 
     | 
    
         
            +
                    last.
         
     | 
| 
      
 569 
     | 
    
         
            +
                    gsub(/([A-Z+])([A-Z][a-z])/, '\1_\2').
         
     | 
| 
      
 570 
     | 
    
         
            +
                    gsub(/([a-z\d])([A-Z])/, '\1_\2').
         
     | 
| 
      
 571 
     | 
    
         
            +
                    downcase
         
     | 
| 
      
 572 
     | 
    
         
            +
                end
         
     | 
| 
      
 573 
     | 
    
         
            +
              end
         
     | 
| 
      
 574 
     | 
    
         
            +
             
     | 
| 
      
 575 
     | 
    
         
            +
              # Mixin that wraps a command shell out invocation, providing a #run_command
         
     | 
| 
      
 576 
     | 
    
         
            +
              # method.
         
     | 
| 
      
 577 
     | 
    
         
            +
              module ShellOut
         
     | 
| 
      
 578 
     | 
    
         
            +
             
     | 
| 
      
 579 
     | 
    
         
            +
                # Wrapped exception for any interally raised shell out commands.
         
     | 
| 
      
 580 
     | 
    
         
            +
                class ShellCommandFailed < StandardError ; end
         
     | 
| 
      
 581 
     | 
    
         
            +
             
     | 
| 
      
 582 
     | 
    
         
            +
                # Executes a command in a subshell on the local running system.
         
     | 
| 
      
 583 
     | 
    
         
            +
                #
         
     | 
| 
      
 584 
     | 
    
         
            +
                # @param cmd [String] command to be executed locally
         
     | 
| 
      
 585 
     | 
    
         
            +
                # @param use_sudo [TrueClass, FalseClass] whether or not to use sudo
         
     | 
| 
      
 586 
     | 
    
         
            +
                # @param log_subject [String] used in the output or log header for clarity
         
     | 
| 
      
 587 
     | 
    
         
            +
                #   and context
         
     | 
| 
      
 588 
     | 
    
         
            +
                def run_command(cmd, use_sudo = false, log_subject = "local")
         
     | 
| 
      
 589 
     | 
    
         
            +
                  cmd = "sudo #{cmd}" if use_sudo
         
     | 
| 
      
 590 
     | 
    
         
            +
                  subject = "       [#{log_subject} command]"
         
     | 
| 
      
 591 
     | 
    
         
            +
             
     | 
| 
      
 592 
     | 
    
         
            +
                  $stdout.puts "#{subject} (#{display_cmd(cmd)})"
         
     | 
| 
      
 593 
     | 
    
         
            +
                  sh = Mixlib::ShellOut.new(cmd, :live_stream => $stdout, :timeout => 60000)
         
     | 
| 
      
 594 
     | 
    
         
            +
                  sh.run_command
         
     | 
| 
      
 595 
     | 
    
         
            +
                  puts "#{subject} ran in #{sh.execution_time} seconds."
         
     | 
| 
      
 596 
     | 
    
         
            +
                  sh.error!
         
     | 
| 
      
 597 
     | 
    
         
            +
                rescue Mixlib::ShellOut::ShellCommandFailed => ex
         
     | 
| 
      
 598 
     | 
    
         
            +
                  raise ShellCommandFailed, ex.message
         
     | 
| 
      
 599 
     | 
    
         
            +
                end
         
     | 
| 
      
 600 
     | 
    
         
            +
             
     | 
| 
      
 601 
     | 
    
         
            +
                private
         
     | 
| 
      
 602 
     | 
    
         
            +
             
     | 
| 
      
 603 
     | 
    
         
            +
                def display_cmd(cmd)
         
     | 
| 
      
 604 
     | 
    
         
            +
                  first_line, newline, rest = cmd.partition("\n")
         
     | 
| 
      
 605 
     | 
    
         
            +
                  last_char = cmd[cmd.size - 1]
         
     | 
| 
      
 606 
     | 
    
         
            +
             
     | 
| 
      
 607 
     | 
    
         
            +
                  newline == "\n" ? "#{first_line}\\n...#{last_char}" : cmd
         
     | 
| 
      
 608 
     | 
    
         
            +
                end
         
     | 
| 
      
 609 
     | 
    
         
            +
              end
         
     | 
| 
      
 610 
     | 
    
         
            +
             
     | 
| 
       558 
611 
     | 
    
         
             
              module Driver
         
     | 
| 
       559 
612 
     | 
    
         | 
| 
       560 
613 
     | 
    
         
             
                # Wrapped exception for any internally raised driver exceptions.
         
     | 
| 
         @@ -567,7 +620,7 @@ module Jamie 
     | 
|
| 
       567 
620 
     | 
    
         
             
                def self.for_plugin(plugin, config)
         
     | 
| 
       568 
621 
     | 
    
         
             
                  require "jamie/driver/#{plugin}"
         
     | 
| 
       569 
622 
     | 
    
         | 
| 
       570 
     | 
    
         
            -
                  klass = self.const_get( 
     | 
| 
      
 623 
     | 
    
         
            +
                  klass = self.const_get(Util.to_camel_case(plugin))
         
     | 
| 
       571 
624 
     | 
    
         
             
                  klass.new(config)
         
     | 
| 
       572 
625 
     | 
    
         
             
                end
         
     | 
| 
       573 
626 
     | 
    
         | 
| 
         @@ -576,6 +629,8 @@ module Jamie 
     | 
|
| 
       576 
629 
     | 
    
         
             
                # destroying an instance.
         
     | 
| 
       577 
630 
     | 
    
         
             
                class Base
         
     | 
| 
       578 
631 
     | 
    
         | 
| 
      
 632 
     | 
    
         
            +
                  include ShellOut
         
     | 
| 
      
 633 
     | 
    
         
            +
             
     | 
| 
       579 
634 
     | 
    
         
             
                  def initialize(config)
         
     | 
| 
       580 
635 
     | 
    
         
             
                    @config = config
         
     | 
| 
       581 
636 
     | 
    
         
             
                    self.class.defaults.each do |attr, value|
         
     | 
| 
         @@ -673,6 +728,13 @@ module Jamie 
     | 
|
| 
       673 
728 
     | 
    
         
             
                    ))
         
     | 
| 
       674 
729 
     | 
    
         
             
                  end
         
     | 
| 
       675 
730 
     | 
    
         | 
| 
      
 731 
     | 
    
         
            +
                  def run_command(cmd, use_sudo = nil, log_subject = nil)
         
     | 
| 
      
 732 
     | 
    
         
            +
                    use_sudo = config['use_sudo'] if use_sudo.nil?
         
     | 
| 
      
 733 
     | 
    
         
            +
                    log_subject = Util.to_snake_case(self.class.to_s)
         
     | 
| 
      
 734 
     | 
    
         
            +
             
     | 
| 
      
 735 
     | 
    
         
            +
                    super(cmd, use_sudo, log_subject)
         
     | 
| 
      
 736 
     | 
    
         
            +
                  end
         
     | 
| 
      
 737 
     | 
    
         
            +
             
     | 
| 
       676 
738 
     | 
    
         
             
                  def self.defaults
         
     | 
| 
       677 
739 
     | 
    
         
             
                    @defaults ||= Hash.new
         
     | 
| 
       678 
740 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -810,6 +872,8 @@ module Jamie 
     | 
|
| 
       810 
872 
     | 
    
         
             
              # instance over SSH.
         
     | 
| 
       811 
873 
     | 
    
         
             
              class ChefDataUploader
         
     | 
| 
       812 
874 
     | 
    
         | 
| 
      
 875 
     | 
    
         
            +
                include ShellOut
         
     | 
| 
      
 876 
     | 
    
         
            +
             
     | 
| 
       813 
877 
     | 
    
         
             
                def initialize(instance, ssh_args, jamie_root, chef_home)
         
     | 
| 
       814 
878 
     | 
    
         
             
                  @instance = instance
         
     | 
| 
       815 
879 
     | 
    
         
             
                  @ssh_args = ssh_args
         
     | 
| 
         @@ -891,30 +955,21 @@ module Jamie 
     | 
|
| 
       891 
955 
     | 
    
         | 
| 
       892 
956 
     | 
    
         
             
                def run_berks(tmpdir)
         
     | 
| 
       893 
957 
     | 
    
         
             
                  begin
         
     | 
| 
       894 
     | 
    
         
            -
                     
     | 
| 
      
 958 
     | 
    
         
            +
                    run_command "if ! command -v berks >/dev/null; then exit 1; fi"
         
     | 
| 
       895 
959 
     | 
    
         
             
                  rescue Mixlib::ShellOut::ShellCommandFailed
         
     | 
| 
       896 
960 
     | 
    
         
             
                    abort ">>>>>> Berkshelf must be installed, add it to your Gemfile."
         
     | 
| 
       897 
961 
     | 
    
         
             
                  end
         
     | 
| 
       898 
     | 
    
         
            -
                   
     | 
| 
      
 962 
     | 
    
         
            +
                  run_command "berks install --path #{tmpdir}"
         
     | 
| 
       899 
963 
     | 
    
         
             
                end
         
     | 
| 
       900 
964 
     | 
    
         | 
| 
       901 
965 
     | 
    
         
             
                def run_librarian(tmpdir)
         
     | 
| 
       902 
966 
     | 
    
         
             
                  begin
         
     | 
| 
       903 
     | 
    
         
            -
                     
     | 
| 
      
 967 
     | 
    
         
            +
                    run_command "if ! command -v librarian-chef >/dev/null; then exit 1; fi"
         
     | 
| 
       904 
968 
     | 
    
         
             
                  rescue Mixlib::ShellOut::ShellCommandFailed
         
     | 
| 
       905 
969 
     | 
    
         
             
                    abort ">>>>>> Librarian must be installed, add it to your Gemfile."
         
     | 
| 
       906 
970 
     | 
    
         
             
                  end
         
     | 
| 
       907 
     | 
    
         
            -
                   
     | 
| 
       908 
     | 
    
         
            -
                end
         
     | 
| 
       909 
     | 
    
         
            -
             
     | 
| 
       910 
     | 
    
         
            -
                def run(cmd)
         
     | 
| 
       911 
     | 
    
         
            -
                  puts "       [local command] '#{cmd}'"
         
     | 
| 
       912 
     | 
    
         
            -
                  sh = Mixlib::ShellOut.new(cmd, :live_stream => STDOUT)
         
     | 
| 
       913 
     | 
    
         
            -
                  sh.run_command
         
     | 
| 
       914 
     | 
    
         
            -
                  puts "       [local command] ran in #{sh.execution_time} seconds."
         
     | 
| 
       915 
     | 
    
         
            -
                  sh.error!
         
     | 
| 
       916 
     | 
    
         
            -
                rescue Mixlib::ShellOut::ShellCommandFailed => ex
         
     | 
| 
       917 
     | 
    
         
            -
                  raise ActionFailed, ex.message
         
     | 
| 
      
 971 
     | 
    
         
            +
                  run_command "librarian-chef install --path #{tmpdir}"
         
     | 
| 
       918 
972 
     | 
    
         
             
                end
         
     | 
| 
       919 
973 
     | 
    
         
             
              end
         
     | 
| 
      
 974 
     | 
    
         
            +
             
     | 
| 
       920 
975 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: jamie
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0.alpha13
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 6
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -194,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       194 
194 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       195 
195 
     | 
    
         
             
                  segments:
         
     | 
| 
       196 
196 
     | 
    
         
             
                  - 0
         
     | 
| 
       197 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 197 
     | 
    
         
            +
                  hash: -1363591312854279086
         
     | 
| 
       198 
198 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       199 
199 
     | 
    
         
             
              none: false
         
     | 
| 
       200 
200 
     | 
    
         
             
              requirements:
         
     |