vanagon 0.15.8 → 0.15.9
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 +4 -4
- data/lib/vanagon/component.rb +1 -0
- data/lib/vanagon/component/dsl.rb +20 -16
- data/lib/vanagon/platform.rb +32 -0
- data/lib/vanagon/platform/dsl.rb +18 -2
- data/lib/vanagon/project.rb +5 -1
- data/resources/deb/postinst.erb +18 -13
- data/resources/deb/postrm.erb +6 -6
- data/resources/deb/prerm.erb +12 -8
- data/resources/rpm/project.spec.erb +11 -11
- data/spec/lib/vanagon/component/dsl_spec.rb +45 -8
- data/spec/lib/vanagon/platform_spec.rb +80 -0
- metadata +31 -31
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d495893440327f099e0b318c1d7e5966a7c186e6
         | 
| 4 | 
            +
              data.tar.gz: c626b8ca9a1e48dbe0d08d6bc3857e7226223233
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 78aee1207d6b21ac432bf07bda73f9491d1b19ae80271b545fad51e1cffcf27e8b3f5adba2a3b70bf1713c555feb5000a6b8f50a0f40b0fc184d9e49b3c21127
         | 
| 7 | 
            +
              data.tar.gz: b81d5f2cf49c8de57cbbc4d5b952eaecaed7af319a03b500c9aaa1c001b91cff03584e20976470caf84dccae6858cf1572dad59e2f26553ee5c1c1939b00a51f
         | 
    
        data/lib/vanagon/component.rb
    CHANGED
    
    
| @@ -163,36 +163,40 @@ class Vanagon | |
| 163 163 | 
             
                  #
         | 
| 164 164 | 
             
                  # @param service_file [String] path to the service file relative to the source
         | 
| 165 165 | 
             
                  # @param default_file [String] path to the default file relative to the source
         | 
| 166 | 
            -
                  # @param  | 
| 167 | 
            -
                  #  | 
| 168 | 
            -
                  #  | 
| 169 | 
            -
                   | 
| 170 | 
            -
             | 
| 166 | 
            +
                  # @param options optional extra parameters
         | 
| 167 | 
            +
                  #        service_name [String] name of the service
         | 
| 168 | 
            +
                  #        service_type [String] type of the service (network, application, system, etc)
         | 
| 169 | 
            +
                  #        link_target [String] executable service file should be linked to
         | 
| 170 | 
            +
                  def install_service(service_file, default_file = nil, service_name = @component.name, **options) # rubocop:disable Metrics/AbcSize
         | 
| 171 | 
            +
                    init_system = options[:init_system] || @component.platform.servicetype
         | 
| 172 | 
            +
                    servicedir = @component.platform.get_service_dir(init_system)
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                    case init_system
         | 
| 171 175 | 
             
                    when "sysv"
         | 
| 172 | 
            -
                      target_service_file = File.join( | 
| 176 | 
            +
                      target_service_file = File.join(servicedir, service_name)
         | 
| 173 177 | 
             
                      target_default_file = File.join(@component.platform.defaultdir, service_name)
         | 
| 174 178 | 
             
                      target_mode = '0755'
         | 
| 175 179 | 
             
                      default_mode = '0644'
         | 
| 176 180 | 
             
                    when "systemd"
         | 
| 177 | 
            -
                      target_service_file = File.join( | 
| 181 | 
            +
                      target_service_file = File.join(servicedir, "#{service_name}.service")
         | 
| 178 182 | 
             
                      target_default_file = File.join(@component.platform.defaultdir, service_name)
         | 
| 179 183 | 
             
                      target_mode = '0644'
         | 
| 180 184 | 
             
                      default_mode = '0644'
         | 
| 181 185 | 
             
                    when "launchd"
         | 
| 182 | 
            -
                      target_service_file = File.join( | 
| 186 | 
            +
                      target_service_file = File.join(servicedir, "#{service_name}.plist")
         | 
| 183 187 | 
             
                      target_mode = '0644'
         | 
| 184 188 | 
             
                      default_mode = '0644'
         | 
| 185 189 | 
             
                    when "smf"
         | 
| 186 | 
            -
                      target_service_file = File.join( | 
| 190 | 
            +
                      target_service_file = File.join(servicedir, options[:service_type].to_s, "#{service_name}.xml")
         | 
| 187 191 | 
             
                      target_default_file = File.join(@component.platform.defaultdir, service_name)
         | 
| 188 192 | 
             
                      target_mode = '0644'
         | 
| 189 193 | 
             
                      default_mode = '0755'
         | 
| 190 194 | 
             
                    when "aix"
         | 
| 191 | 
            -
                      @component.service  | 
| 195 | 
            +
                      @component.service << OpenStruct.new(:name => service_name, :service_command => File.read(service_file).chomp)
         | 
| 192 196 | 
             
                      # Return here because there is no file to install, just a string read in
         | 
| 193 197 | 
             
                      return
         | 
| 194 198 | 
             
                    when "windows"
         | 
| 195 | 
            -
                      @component.service  | 
| 199 | 
            +
                      @component.service << OpenStruct.new(\
         | 
| 196 200 | 
             
                        :bindir_id => "#{service_name.gsub(/[^A-Za-z0-9]/, '').upcase}BINDIR", \
         | 
| 197 201 | 
             
                        :service_file => service_file, \
         | 
| 198 202 | 
             
                        :component_group_id => "#{service_name.gsub(/[^A-Za-z0-9]/, '')}Component"\
         | 
| @@ -200,13 +204,13 @@ class Vanagon | |
| 200 204 | 
             
                      # return here as we are just collecting the name of the service file to put into the harvest filter list.
         | 
| 201 205 | 
             
                      return
         | 
| 202 206 | 
             
                    else
         | 
| 203 | 
            -
                      fail "Don't know how to install the #{ | 
| 207 | 
            +
                      fail "Don't know how to install the #{init_system}. Please teach #install_service how to do this."
         | 
| 204 208 | 
             
                    end
         | 
| 205 209 |  | 
| 206 210 | 
             
                    # Install the service and default files
         | 
| 207 | 
            -
                    if link_target
         | 
| 208 | 
            -
                      install_file(service_file, link_target, mode: target_mode)
         | 
| 209 | 
            -
                      link link_target, target_service_file
         | 
| 211 | 
            +
                    if options[:link_target]
         | 
| 212 | 
            +
                      install_file(service_file, options[:link_target], mode: target_mode)
         | 
| 213 | 
            +
                      link options[:link_target], target_service_file
         | 
| 210 214 | 
             
                    else
         | 
| 211 215 | 
             
                      install_file(service_file, target_service_file, mode: target_mode)
         | 
| 212 216 | 
             
                    end
         | 
| @@ -217,7 +221,7 @@ class Vanagon | |
| 217 221 | 
             
                    end
         | 
| 218 222 |  | 
| 219 223 | 
             
                    # Register the service for use in packaging
         | 
| 220 | 
            -
                    @component.service  | 
| 224 | 
            +
                    @component.service << OpenStruct.new(:name => service_name, :service_file => target_service_file, :type => options[:service_type])
         | 
| 221 225 | 
             
                  end
         | 
| 222 226 |  | 
| 223 227 | 
             
                  # Copies a file from source to target during the install phase of the component
         | 
    
        data/lib/vanagon/platform.rb
    CHANGED
    
    | @@ -32,6 +32,9 @@ class Vanagon | |
| 32 32 | 
             
                # Where does a given platform expect to find init scripts/service files?
         | 
| 33 33 | 
             
                # e.g. /etc/init.d, /usr/lib/systemd/system
         | 
| 34 34 | 
             
                attr_accessor :servicedir
         | 
| 35 | 
            +
                # Array of OpenStructs containing the servicetype and the corresponding
         | 
| 36 | 
            +
                # servicedir
         | 
| 37 | 
            +
                attr_accessor :servicetypes
         | 
| 35 38 | 
             
                # Where does a given platform's init system expect to find
         | 
| 36 39 | 
             
                # something resembling 'defaults' files. Most likely to apply
         | 
| 37 40 | 
             
                # to Linux systems that use SysV-ish, upstart, or systemd init systems.
         | 
| @@ -239,6 +242,7 @@ class Vanagon | |
| 239 242 | 
             
                  # Our first attempt at defining metadata about a platform
         | 
| 240 243 | 
             
                  @cross_compiled ||= false
         | 
| 241 244 | 
             
                  @valid_operators ||= ['<', '>', '<=', '>=', '=']
         | 
| 245 | 
            +
                  @servicetypes = []
         | 
| 242 246 | 
             
                end
         | 
| 243 247 |  | 
| 244 248 | 
             
                def shell # rubocop:disable Lint/DuplicateMethods
         | 
| @@ -530,5 +534,33 @@ class Vanagon | |
| 530 534 | 
             
                def validate_operator(operator_string)
         | 
| 531 535 | 
             
                  valid_operators.include?(operator_string)
         | 
| 532 536 | 
             
                end
         | 
| 537 | 
            +
             | 
| 538 | 
            +
                # Get all configured service types (added through plat.servicetype)
         | 
| 539 | 
            +
                # @return array of service types, empty array if none have been configured
         | 
| 540 | 
            +
                def get_service_types
         | 
| 541 | 
            +
                  if @servicetypes.any?
         | 
| 542 | 
            +
                    @servicetypes.flat_map(&:servicetype).compact
         | 
| 543 | 
            +
                  elsif @servicetype
         | 
| 544 | 
            +
                    [@servicetype]
         | 
| 545 | 
            +
                  else
         | 
| 546 | 
            +
                    []
         | 
| 547 | 
            +
                  end
         | 
| 548 | 
            +
                end
         | 
| 549 | 
            +
             | 
| 550 | 
            +
                # Get configured service dir (added through plat.servicedir, or plat.servicetype 'foo', servicedir: 'bar')
         | 
| 551 | 
            +
                # @param servicetype the service type you want the service dir for (optional)
         | 
| 552 | 
            +
                # @raises VanagonError if more than one service dir is found
         | 
| 553 | 
            +
                def get_service_dir(servicetype = '')
         | 
| 554 | 
            +
                  if @servicetypes.empty?
         | 
| 555 | 
            +
                    return @servicedir
         | 
| 556 | 
            +
                  end
         | 
| 557 | 
            +
                  servicedir = @servicetypes.select { |s| s.servicetype.include?(servicetype) }.flat_map(&:servicedir).compact
         | 
| 558 | 
            +
             | 
| 559 | 
            +
                  if servicedir.size > 1
         | 
| 560 | 
            +
                    raise Vanagon::Error, "You can only have one service dir for each service type. Found '#{servicedir.join(',')}' for service type #{servicetype}"
         | 
| 561 | 
            +
                  end
         | 
| 562 | 
            +
             | 
| 563 | 
            +
                  servicedir.first
         | 
| 564 | 
            +
                end
         | 
| 533 565 | 
             
              end
         | 
| 534 566 | 
             
            end
         | 
    
        data/lib/vanagon/platform/dsl.rb
    CHANGED
    
    | @@ -9,6 +9,7 @@ require 'vanagon/platform/solaris_10' | |
| 9 9 | 
             
            require 'vanagon/platform/solaris_11'
         | 
| 10 10 | 
             
            require 'vanagon/platform/windows'
         | 
| 11 11 | 
             
            require 'securerandom'
         | 
| 12 | 
            +
            require 'ostruct'
         | 
| 12 13 | 
             
            require 'uri'
         | 
| 13 14 |  | 
| 14 15 | 
             
            class Vanagon
         | 
| @@ -218,6 +219,11 @@ class Vanagon | |
| 218 219 | 
             
                  # @param dir [String] Directory where service files live on the platform
         | 
| 219 220 | 
             
                  def servicedir(dir)
         | 
| 220 221 | 
             
                    @platform.servicedir = dir
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                    # Add to the servicetypes array if we haven't already
         | 
| 224 | 
            +
                    if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
         | 
| 225 | 
            +
                      @platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
         | 
| 226 | 
            +
                    end
         | 
| 221 227 | 
             
                  end
         | 
| 222 228 |  | 
| 223 229 | 
             
                  # Set the directory where default or sysconfig files live for the platform
         | 
| @@ -230,8 +236,18 @@ class Vanagon | |
| 230 236 | 
             
                  # Set the servicetype for the platform so that services can be installed correctly.
         | 
| 231 237 | 
             
                  #
         | 
| 232 238 | 
             
                  # @param type [String] service type for the platform ('sysv' for example)
         | 
| 233 | 
            -
                   | 
| 234 | 
            -
             | 
| 239 | 
            +
                  # @param servicedir [String] service dir for this platform and service type ('/etc/init.d' for example). Optional.
         | 
| 240 | 
            +
                  def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize
         | 
| 241 | 
            +
                    if servicedir
         | 
| 242 | 
            +
                      @platform.servicetypes << OpenStruct.new(:servicetype => type, :servicedir => servicedir)
         | 
| 243 | 
            +
                    else
         | 
| 244 | 
            +
                      @platform.servicetype = type
         | 
| 245 | 
            +
                    end
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                    # Add to the servicetypes array if we haven't already
         | 
| 248 | 
            +
                    if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
         | 
| 249 | 
            +
                      @platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
         | 
| 250 | 
            +
                    end
         | 
| 235 251 | 
             
                  end
         | 
| 236 252 |  | 
| 237 253 | 
             
                  # Set the list of possible host to perform a build on (when not using
         | 
    
        data/lib/vanagon/project.rb
    CHANGED
    
    | @@ -289,10 +289,14 @@ class Vanagon | |
| 289 289 | 
             
                # will return nil
         | 
| 290 290 | 
             
                #
         | 
| 291 291 | 
             
                # @param [string] name of service to grab
         | 
| 292 | 
            -
                # @return [@component.service obj] specific service
         | 
| 292 | 
            +
                # @return [@component.service obj] specific service, or array of services
         | 
| 293 | 
            +
                #         if there's more than one
         | 
| 293 294 | 
             
                def get_service(name)
         | 
| 294 295 | 
             
                  components.each do |component|
         | 
| 295 296 | 
             
                    if component.name == name
         | 
| 297 | 
            +
                      if component.service.size == 1
         | 
| 298 | 
            +
                        return component.service.first
         | 
| 299 | 
            +
                      end
         | 
| 296 300 | 
             
                      return component.service
         | 
| 297 301 | 
             
                    end
         | 
| 298 302 | 
             
                  end
         | 
    
        data/resources/deb/postinst.erb
    CHANGED
    
    | @@ -2,18 +2,23 @@ | |
| 2 2 | 
             
            <%- get_services.each do |service| -%>
         | 
| 3 3 | 
             
              # switch based on systemd vs systemv
         | 
| 4 4 | 
             
              #
         | 
| 5 | 
            -
              <%- if  | 
| 6 | 
            -
            if [ - | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
               | 
| 5 | 
            +
              <%- if service.init_system.nil? || service.init_system.eq?('systemd') -%>
         | 
| 6 | 
            +
            if [ -d '/run/systemd/system' ] ; then
         | 
| 7 | 
            +
              if [ -z "$2" ]; then
         | 
| 8 | 
            +
                systemctl enable <%= service.name %>.service >/dev/null || :
         | 
| 9 | 
            +
              else
         | 
| 10 | 
            +
                systemctl try-restart <%= service.name %>.service >/dev/null || :
         | 
| 11 | 
            +
              fi
         | 
| 10 12 | 
             
            fi
         | 
| 11 | 
            -
              <%-  | 
| 12 | 
            -
            if  | 
| 13 | 
            -
             | 
| 13 | 
            +
              <%- end -%>
         | 
| 14 | 
            +
              <%- if service.init_system.nil? || service.init_system.eq?('sysv') -%>
         | 
| 15 | 
            +
            if [ ! -d '/run/systemd/system' ] ; then
         | 
| 16 | 
            +
              if [ -x "<%= service.service_file %>" ]; then
         | 
| 17 | 
            +
                update-rc.d <%= service.name %> defaults > /dev/null
         | 
| 14 18 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 19 | 
            +
                if [ -n "$2" ]; then
         | 
| 20 | 
            +
                  invoke-rc.d <%= service.name %> condrestart || true
         | 
| 21 | 
            +
                fi
         | 
| 17 22 | 
             
              fi
         | 
| 18 23 | 
             
            fi
         | 
| 19 24 | 
             
              <%- end -%>
         | 
| @@ -27,17 +32,17 @@ fi | |
| 27 32 |  | 
| 28 33 | 
             
            # Set up any specific permissions needed...
         | 
| 29 34 | 
             
            <%- (get_directories + get_configfiles + get_files).select { |pathname| pathname.has_overrides? }.uniq.each do |file_or_directory| -%>
         | 
| 30 | 
            -
              <%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}'" if file_or_directory.mode %>
         | 
| 35 | 
            +
              <%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}' &>/dev/null ||:" if file_or_directory.mode %>
         | 
| 31 36 | 
             
              <%- if file_or_directory.owner -%>
         | 
| 32 37 | 
             
                if getent passwd '<%= file_or_directory.owner %>' &> /dev/null; then
         | 
| 33 | 
            -
                  chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>'
         | 
| 38 | 
            +
                  chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>' &>/dev/null ||:
         | 
| 34 39 | 
             
                else
         | 
| 35 40 | 
             
                  echo "Error updating '<%= file_or_directory.path %>': user '<%= file_or_directory.owner %>' does not exist."
         | 
| 36 41 | 
             
                fi
         | 
| 37 42 | 
             
              <%- end -%>
         | 
| 38 43 | 
             
              <%- if file_or_directory.group -%>
         | 
| 39 44 | 
             
                if getent group '<%= file_or_directory.group %>' &> /dev/null; then
         | 
| 40 | 
            -
                  chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>'
         | 
| 45 | 
            +
                  chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>' &>/dev/null ||:
         | 
| 41 46 | 
             
                else
         | 
| 42 47 | 
             
                  echo "Error updating '<%= file_or_directory.path %>': group '<%= file_or_directory.group %>' does not exist."
         | 
| 43 48 | 
             
                fi
         | 
    
        data/resources/deb/postrm.erb
    CHANGED
    
    | @@ -13,11 +13,11 @@ fi | |
| 13 13 | 
             
            <%- get_services.each do |service| -%>
         | 
| 14 14 | 
             
              # switch based on systemd vs systemv
         | 
| 15 15 | 
             
              #
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            systemctl daemon-reload >/dev/null 2>&1 || :
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            if [ "$1" = "purge" ] ; then
         | 
| 20 | 
            -
             | 
| 16 | 
            +
            if [ -d '/run/systemd/system' ] ; then
         | 
| 17 | 
            +
              systemctl daemon-reload >/dev/null 2>&1 || :
         | 
| 18 | 
            +
            else
         | 
| 19 | 
            +
              if [ "$1" = "purge" ] ; then
         | 
| 20 | 
            +
                update-rc.d <%= service.name %> remove > /dev/null
         | 
| 21 | 
            +
              fi
         | 
| 21 22 | 
             
            fi
         | 
| 22 | 
            -
              <%- end -%>
         | 
| 23 23 | 
             
            <%- end -%>
         | 
    
        data/resources/deb/prerm.erb
    CHANGED
    
    | @@ -13,15 +13,19 @@ fi | |
| 13 13 | 
             
            <%- get_services.each do |service| -%>
         | 
| 14 14 | 
             
              # switch based on systemd vs systemv
         | 
| 15 15 | 
             
              #
         | 
| 16 | 
            -
              <%- if  | 
| 17 | 
            -
            if [  | 
| 18 | 
            -
               | 
| 19 | 
            -
             | 
| 16 | 
            +
              <%- if service.init_system.nil? || service.init_system.eq?('systemd') -%>
         | 
| 17 | 
            +
            if [ -d '/run/systemd/system' ] ; then
         | 
| 18 | 
            +
              if [ "$1" = remove ]; then
         | 
| 19 | 
            +
                systemctl --no-reload disable <%= service.name %>.service > /dev/null 2>&1 || :
         | 
| 20 | 
            +
                systemctl stop <%= service.name %>.service > /dev/null 2>&1 || :
         | 
| 21 | 
            +
              fi
         | 
| 20 22 | 
             
            fi
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              <%-  | 
| 23 | 
            -
            if [ - | 
| 24 | 
            -
               | 
| 23 | 
            +
              <%- end -%>
         | 
| 24 | 
            +
              <%- if service.init_system.nil? || service.init_system.eq?('sysv') -%>
         | 
| 25 | 
            +
            if [ ! -d '/run/systemd/system' ] ; then
         | 
| 26 | 
            +
              if [ -x "<%= service.service_file %>" ] && [ "$1" = remove ]; then
         | 
| 27 | 
            +
                invoke-rc.d <%= service.name %> stop || true
         | 
| 28 | 
            +
              fi
         | 
| 25 29 | 
             
            fi
         | 
| 26 30 | 
             
              <%- end -%>
         | 
| 27 31 | 
             
            <%- end -%>
         | 
| @@ -76,7 +76,7 @@ Requires(post): /bin/touch | |
| 76 76 | 
             
            <%- end -%>
         | 
| 77 77 |  | 
| 78 78 | 
             
            <%- if has_services? -%>
         | 
| 79 | 
            -
              <%- if @platform. | 
| 79 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 80 80 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 81 81 | 
             
            BuildRequires:    systemd
         | 
| 82 82 | 
             
            %{?systemd_requires}
         | 
| @@ -86,7 +86,7 @@ Requires(post):   systemd | |
| 86 86 | 
             
            Requires(preun):  systemd
         | 
| 87 87 | 
             
            Requires(postun): systemd
         | 
| 88 88 | 
             
                <%- end -%>
         | 
| 89 | 
            -
              <%- elsif @platform. | 
| 89 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 90 90 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 91 91 | 
             
            Requires: aaa_base
         | 
| 92 92 | 
             
                <%- elsif @platform.is_linux? -%>
         | 
| @@ -230,15 +230,15 @@ fi | |
| 230 230 | 
             
            <%- get_services.each do |service| -%>
         | 
| 231 231 | 
             
              # switch based on systemd vs systemv vs smf vs aix
         | 
| 232 232 | 
             
              #
         | 
| 233 | 
            -
              <%- if @platform. | 
| 233 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 234 234 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 235 235 | 
             
                  %service_add_post <%= service.name %>.service
         | 
| 236 236 | 
             
                <%- else -%>
         | 
| 237 237 | 
             
                  %systemd_post <%= service.name %>.service
         | 
| 238 238 | 
             
                <%- end -%>
         | 
| 239 | 
            -
              <%- elsif @platform. | 
| 239 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 240 240 | 
             
                chkconfig --add <%= service.name %> >/dev/null 2>&1 || :
         | 
| 241 | 
            -
              <%- elsif @platform. | 
| 241 | 
            +
              <%- elsif @platform.get_service_types.include?("aix") -%>
         | 
| 242 242 | 
             
                if /usr/bin/lssrc -s <%= service.name -%> > /dev/null 2>&1; then
         | 
| 243 243 | 
             
                  /usr/bin/chssys -s <%= service.name -%> -p <%= service.service_command -%> -w 7 -S -n 15 -f 9 > /dev/null 2>&1 || :
         | 
| 244 244 | 
             
                else
         | 
| @@ -279,17 +279,17 @@ fi | |
| 279 279 | 
             
            <%- get_services.each do |service| -%>
         | 
| 280 280 | 
             
              # switch based on systemd vs systemv vs smf vs aix
         | 
| 281 281 | 
             
              #
         | 
| 282 | 
            -
              <%- if @platform. | 
| 282 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 283 283 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 284 284 | 
             
                  %service_del_postun <%= service.name %>.service
         | 
| 285 285 | 
             
                <%- else -%>
         | 
| 286 286 | 
             
                  %systemd_postun_with_restart <%= service.name %>.service
         | 
| 287 287 | 
             
                <%- end -%>
         | 
| 288 | 
            -
              <%- elsif @platform. | 
| 288 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 289 289 | 
             
                if [ "$1" -eq 1 ]; then
         | 
| 290 290 | 
             
                  /sbin/service <%= service.name %> condrestart || :
         | 
| 291 291 | 
             
                fi
         | 
| 292 | 
            -
              <%- elsif @platform. | 
| 292 | 
            +
              <%- elsif @platform.get_service_types.include?("aix") -%>
         | 
| 293 293 | 
             
                if  [ "$1" -eq 0 ]; then
         | 
| 294 294 | 
             
                  /usr/bin/rmssys -s <%= service.name -%> > /dev/null 2>&1 || :
         | 
| 295 295 | 
             
                  /usr/sbin/rmitab <%= service.name -%> > /dev/null 2>&1 || :
         | 
| @@ -310,18 +310,18 @@ if [ "$1" -eq 0 ] ; then | |
| 310 310 | 
             
            fi
         | 
| 311 311 |  | 
| 312 312 | 
             
            <%- get_services.each do |service| -%>
         | 
| 313 | 
            -
              <%- if @platform. | 
| 313 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 314 314 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 315 315 | 
             
                  %service_del_preun <%= service.name %>.service
         | 
| 316 316 | 
             
                <%- else -%>
         | 
| 317 317 | 
             
                  %systemd_preun <%= service.name %>.service
         | 
| 318 318 | 
             
                <%- end -%>
         | 
| 319 | 
            -
              <%- elsif @platform. | 
| 319 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 320 320 | 
             
                if [ "$1" -eq 0 ]; then
         | 
| 321 321 | 
             
                  /sbin/service <%= service.name %> stop >/dev/null 2>&1 || :
         | 
| 322 322 | 
             
                  chkconfig --del <%= service.name %> || :
         | 
| 323 323 | 
             
                fi
         | 
| 324 | 
            -
              <%- elsif @platform. | 
| 324 | 
            +
              <%- elsif @platform.get_service_types.include?("aix") -%>
         | 
| 325 325 | 
             
                  # stop the service only on a real uninstall, not on upgrades
         | 
| 326 326 | 
             
                  if [ "$1" -eq 0 ] ; then
         | 
| 327 327 | 
             
                      /usr/bin/stopsrc -s <%= service.name -%> > /dev/null 2>&1 || :
         | 
| @@ -33,6 +33,16 @@ end" } | |
| 33 33 | 
             
                plat._platform
         | 
| 34 34 | 
             
              }
         | 
| 35 35 |  | 
| 36 | 
            +
              let (:dummy_platform_sysv_or_systemd) {
         | 
| 37 | 
            +
                plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 38 | 
            +
                plat.instance_eval("platform 'debian-8-x86_64' do |plat|
         | 
| 39 | 
            +
                                   plat.servicetype 'sysv', servicedir: '/etc/init.d'
         | 
| 40 | 
            +
                                   plat.servicetype 'systemd', servicedir: '/usr/lib/systemd/system'
         | 
| 41 | 
            +
                                   plat.defaultdir '/etc/default'
         | 
| 42 | 
            +
                                   end")
         | 
| 43 | 
            +
                plat._platform
         | 
| 44 | 
            +
              }
         | 
| 45 | 
            +
             | 
| 36 46 | 
             
              let (:dummy_platform_smf) {
         | 
| 37 47 | 
             
                plat = Vanagon::Platform::DSL.new('debian-11-i386')
         | 
| 38 48 | 
             
                plat.instance_eval("platform 'debian-11-i386' do |plat|
         | 
| @@ -567,15 +577,15 @@ end" } | |
| 567 577 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
         | 
| 568 578 |  | 
| 569 579 | 
             
                  # The component should now have a service registered
         | 
| 570 | 
            -
                  expect(comp._component.service.name).to  | 
| 580 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 571 581 | 
             
                end
         | 
| 572 582 |  | 
| 573 583 | 
             
                it 'reads from a file when the OS is AIX for services' do
         | 
| 574 584 | 
             
                  comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_aix)
         | 
| 575 585 | 
             
                  comp.install_service('spec/fixtures/component/mcollective.service', nil, 'mcollective')
         | 
| 576 | 
            -
                  expect(comp._component.service.name).to  | 
| 577 | 
            -
                  expect(comp._component.service.service_command).to include('/opt/puppetlabs/puppet/bin/ruby')
         | 
| 578 | 
            -
                  expect(comp._component.service.service_command).not_to include("\n")
         | 
| 586 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('mcollective')
         | 
| 587 | 
            +
                  expect(comp._component.service.flat_map(&:service_command).compact.first).to include('/opt/puppetlabs/puppet/bin/ruby')
         | 
| 588 | 
            +
                  expect(comp._component.service.flat_map(&:service_command).compact.first).not_to include("\n")
         | 
| 579 589 | 
             
                end
         | 
| 580 590 |  | 
| 581 591 | 
             
                it 'adds the correct command to the install for the component for systemd platforms' do
         | 
| @@ -594,7 +604,34 @@ end" } | |
| 594 604 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
         | 
| 595 605 |  | 
| 596 606 | 
             
                  # The component should now have a service registered
         | 
| 597 | 
            -
                  expect(comp._component.service.name).to  | 
| 607 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 608 | 
            +
                end
         | 
| 609 | 
            +
             | 
| 610 | 
            +
                it 'adds the correct command when installing both systemd and sysv' do
         | 
| 611 | 
            +
                  comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_sysv_or_systemd)
         | 
| 612 | 
            +
                  comp.install_service('component-client.init', 'component-client.sysconfig', init_system: 'sysv')
         | 
| 613 | 
            +
                  comp.install_service('component-client.service', 'component-client.sysconfig', init_system: 'systemd')
         | 
| 614 | 
            +
                  # Look for servicedir creation and copy - sysv
         | 
| 615 | 
            +
                  expect(comp._component.install).to include("install -d '/etc/init.d'")
         | 
| 616 | 
            +
                  expect(comp._component.install).to include("cp -p 'component-client.init' '/etc/init.d/service-test'")
         | 
| 617 | 
            +
             | 
| 618 | 
            +
                  # Look for servicedir creation and copy - systemd
         | 
| 619 | 
            +
                  expect(comp._component.install).to include("install -d '/usr/lib/systemd/system'")
         | 
| 620 | 
            +
                  expect(comp._component.install).to include("cp -p 'component-client.service' '/usr/lib/systemd/system/service-test.service'")
         | 
| 621 | 
            +
             | 
| 622 | 
            +
                  # Look for defaultdir creation and copy
         | 
| 623 | 
            +
                  expect(comp._component.install).to include("install -d '/etc/default'")
         | 
| 624 | 
            +
                  expect(comp._component.install).to include("cp -p 'component-client.sysconfig' '/etc/default/service-test'")
         | 
| 625 | 
            +
             | 
| 626 | 
            +
                  # Look for files and configfiles - sysv
         | 
| 627 | 
            +
                  expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/etc/default/service-test'))
         | 
| 628 | 
            +
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
         | 
| 629 | 
            +
             | 
| 630 | 
            +
                  # Look for files and configfiles - systemd
         | 
| 631 | 
            +
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
         | 
| 632 | 
            +
             | 
| 633 | 
            +
                  # The component should now have a service registered
         | 
| 634 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 598 635 | 
             
                end
         | 
| 599 636 |  | 
| 600 637 | 
             
                it 'adds the correct command to the install for smf services using a service_type' do
         | 
| @@ -613,7 +650,7 @@ end" } | |
| 613 650 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/network/service-test.xml', mode: '0644'))
         | 
| 614 651 |  | 
| 615 652 | 
             
                  # The component should now have a service registered
         | 
| 616 | 
            -
                  expect(comp._component.service.name).to  | 
| 653 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 617 654 | 
             
                end
         | 
| 618 655 |  | 
| 619 656 | 
             
                it 'adds the correct command to the install for smf services' do
         | 
| @@ -632,7 +669,7 @@ end" } | |
| 632 669 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/service-test.xml', mode: '0644'))
         | 
| 633 670 |  | 
| 634 671 | 
             
                  # The component should now have a service registered
         | 
| 635 | 
            -
                  expect(comp._component.service.name).to  | 
| 672 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 636 673 | 
             
                end
         | 
| 637 674 |  | 
| 638 675 | 
             
                it 'installs the file as a link when link_target is specified' do
         | 
| @@ -653,7 +690,7 @@ end" } | |
| 653 690 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test'))
         | 
| 654 691 |  | 
| 655 692 | 
             
                  # The component should now have a service registered
         | 
| 656 | 
            -
                  expect(comp._component.service.name).to  | 
| 693 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 657 694 | 
             
                end
         | 
| 658 695 | 
             
              end
         | 
| 659 696 |  | 
| @@ -1,6 +1,33 @@ | |
| 1 1 | 
             
            require 'vanagon/platform'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe "Vanagon::Platform" do
         | 
| 4 | 
            +
              let(:deb_platform_just_servicedir) { "platform 'debian-test-fixture' do |plat|
         | 
| 5 | 
            +
                                                   plat.servicedir '/etc/init.d'
         | 
| 6 | 
            +
                                                   end
         | 
| 7 | 
            +
                                                   "}
         | 
| 8 | 
            +
              let(:deb_platform_just_servicetype) { "platform 'debian-test-fixture' do |plat|
         | 
| 9 | 
            +
                                                   plat.servicetype 'sysv'
         | 
| 10 | 
            +
                                                   end
         | 
| 11 | 
            +
                                                   "}
         | 
| 12 | 
            +
              let(:deb_platform_multi_servicetypes) { "platform 'debian-test-fixture' do |plat|
         | 
| 13 | 
            +
                                                   plat.servicetype 'sysv', servicedir: '/etc/init.d'
         | 
| 14 | 
            +
                                                   plat.servicetype 'systemd', servicedir: '/lib/systemd/system'
         | 
| 15 | 
            +
                                                   end
         | 
| 16 | 
            +
                                                   "}
         | 
| 17 | 
            +
              let(:deb_platform_no_service) { "platform 'debian-test-fixture' do |plat|
         | 
| 18 | 
            +
                                                   end
         | 
| 19 | 
            +
                                                   "}
         | 
| 20 | 
            +
              let(:deb_platform_servicetype) { "platform 'debian-test-fixture' do |plat|
         | 
| 21 | 
            +
                                                   plat.servicetype 'sysv'
         | 
| 22 | 
            +
                                                   plat.servicedir '/etc/init.d'
         | 
| 23 | 
            +
                                                   end
         | 
| 24 | 
            +
                                                   "}
         | 
| 25 | 
            +
              let(:deb_platform_bad_servicedir_block) { "platform 'debian-test-fixture' do |plat|
         | 
| 26 | 
            +
                                                        plat.servicetype 'sysv', servicedir: '/etc/init.d'
         | 
| 27 | 
            +
                                                        plat.servicetype 'sysv', servicedir: '/etc/rc.d'
         | 
| 28 | 
            +
                                                        end
         | 
| 29 | 
            +
                                                        "}
         | 
| 30 | 
            +
             | 
| 4 31 | 
             
              let(:platforms) do
         | 
| 5 32 | 
             
                [
         | 
| 6 33 | 
             
                  {
         | 
| @@ -172,4 +199,57 @@ describe "Vanagon::Platform" do | |
| 172 199 | 
             
                  end
         | 
| 173 200 | 
             
                end
         | 
| 174 201 | 
             
              end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
              describe "#get_service_type" do
         | 
| 204 | 
            +
                it "returns plat.servicetype if that's the only thing set" do
         | 
| 205 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 206 | 
            +
                  plat.instance_eval(deb_platform_just_servicetype)
         | 
| 207 | 
            +
                  expect(plat._platform.get_service_types).to include('sysv')
         | 
| 208 | 
            +
                end
         | 
| 209 | 
            +
             | 
| 210 | 
            +
                it "returns from servicetypes if that's set" do
         | 
| 211 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 212 | 
            +
                  plat.instance_eval(deb_platform_servicetype)
         | 
| 213 | 
            +
                  expect(plat._platform.get_service_types).to include('sysv')
         | 
| 214 | 
            +
                end
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                it "returns multiples if there's more than one" do
         | 
| 217 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 218 | 
            +
                  plat.instance_eval(deb_platform_multi_servicetypes)
         | 
| 219 | 
            +
                  expect(plat._platform.get_service_types).to include('sysv')
         | 
| 220 | 
            +
                  expect(plat._platform.get_service_types).to include('systemd')
         | 
| 221 | 
            +
                end
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                it "returns an empty array if nothing is set" do
         | 
| 224 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 225 | 
            +
                  plat.instance_eval(deb_platform_no_service)
         | 
| 226 | 
            +
                  expect(plat._platform.get_service_types.size).to eq(0)
         | 
| 227 | 
            +
                end
         | 
| 228 | 
            +
              end
         | 
| 229 | 
            +
             | 
| 230 | 
            +
              describe "#get_service_dir" do
         | 
| 231 | 
            +
                it "returns plat.servicedir if that's the only thing set" do
         | 
| 232 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 233 | 
            +
                  plat.instance_eval(deb_platform_just_servicedir)
         | 
| 234 | 
            +
                  expect(plat._platform.get_service_dir).to eq('/etc/init.d')
         | 
| 235 | 
            +
                end
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                it "returns servicedirs set via servicetype" do
         | 
| 238 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 239 | 
            +
                  plat.instance_eval(deb_platform_servicetype)
         | 
| 240 | 
            +
                  expect(plat._platform.get_service_dir).to eq('/etc/init.d')
         | 
| 241 | 
            +
                end
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                it "returns the servicedir based on servicetype" do
         | 
| 244 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 245 | 
            +
                  plat.instance_eval(deb_platform_multi_servicetypes)
         | 
| 246 | 
            +
                  expect(plat._platform.get_service_dir('systemd')).to eq('/lib/systemd/system')
         | 
| 247 | 
            +
                end
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                it "fails if there are >1 servicedir for a service type" do
         | 
| 250 | 
            +
                  plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 251 | 
            +
                  plat.instance_eval(deb_platform_bad_servicedir_block)
         | 
| 252 | 
            +
                  expect { plat._platform.get_service_dir('sysv') }.to raise_error(Vanagon::Error)
         | 
| 253 | 
            +
                end
         | 
| 254 | 
            +
              end
         | 
| 175 255 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: vanagon
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.15. | 
| 4 | 
            +
              version: 0.15.9
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Puppet Labs
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018- | 
| 11 | 
            +
            date: 2018-05-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: git
         | 
| @@ -264,41 +264,41 @@ signing_key: | |
| 264 264 | 
             
            specification_version: 3
         | 
| 265 265 | 
             
            summary: All of your packages will fit into this van with this one simple trick.
         | 
| 266 266 | 
             
            test_files:
         | 
| 267 | 
            -
            - spec/lib/ | 
| 268 | 
            -
            - spec/lib/ | 
| 269 | 
            -
            - spec/lib/vanagon/ | 
| 270 | 
            -
            - spec/lib/vanagon/ | 
| 271 | 
            -
            - spec/lib/vanagon/ | 
| 272 | 
            -
            - spec/lib/vanagon/ | 
| 273 | 
            -
            - spec/lib/vanagon/platform/solaris_11_spec.rb
         | 
| 274 | 
            -
            - spec/lib/vanagon/platform/solaris_10_spec.rb
         | 
| 275 | 
            -
            - spec/lib/vanagon/platform/dsl_spec.rb
         | 
| 276 | 
            -
            - spec/lib/vanagon/platform/osx_spec.rb
         | 
| 277 | 
            -
            - spec/lib/vanagon/platform/deb_spec.rb
         | 
| 278 | 
            -
            - spec/lib/vanagon/platform/rpm_spec.rb
         | 
| 279 | 
            -
            - spec/lib/vanagon/platform/rpm/aix_spec.rb
         | 
| 280 | 
            -
            - spec/lib/vanagon/component/source/rewrite_spec.rb
         | 
| 267 | 
            +
            - spec/lib/git/rev_list_spec.rb
         | 
| 268 | 
            +
            - spec/lib/makefile_spec.rb
         | 
| 269 | 
            +
            - spec/lib/vanagon/common/pathname_spec.rb
         | 
| 270 | 
            +
            - spec/lib/vanagon/common/user_spec.rb
         | 
| 271 | 
            +
            - spec/lib/vanagon/component/dsl_spec.rb
         | 
| 272 | 
            +
            - spec/lib/vanagon/component/rules_spec.rb
         | 
| 281 273 | 
             
            - spec/lib/vanagon/component/source/git_spec.rb
         | 
| 282 | 
            -
            - spec/lib/vanagon/component/source/local_spec.rb
         | 
| 283 274 | 
             
            - spec/lib/vanagon/component/source/http_spec.rb
         | 
| 284 | 
            -
            - spec/lib/vanagon/component/ | 
| 275 | 
            +
            - spec/lib/vanagon/component/source/local_spec.rb
         | 
| 276 | 
            +
            - spec/lib/vanagon/component/source/rewrite_spec.rb
         | 
| 285 277 | 
             
            - spec/lib/vanagon/component/source_spec.rb
         | 
| 286 | 
            -
            - spec/lib/vanagon/ | 
| 287 | 
            -
            - spec/lib/vanagon/ | 
| 288 | 
            -
            - spec/lib/vanagon/extensions/set/json_spec.rb
         | 
| 289 | 
            -
            - spec/lib/vanagon/extensions/ostruct/json_spec.rb
         | 
| 290 | 
            -
            - spec/lib/vanagon/project/dsl_spec.rb
         | 
| 291 | 
            -
            - spec/lib/vanagon/utilities/shell_utilities_spec.rb
         | 
| 292 | 
            -
            - spec/lib/vanagon/utilities_spec.rb
         | 
| 293 | 
            -
            - spec/lib/vanagon/common/pathname_spec.rb
         | 
| 294 | 
            -
            - spec/lib/vanagon/common/user_spec.rb
         | 
| 295 | 
            -
            - spec/lib/vanagon/platform_spec.rb
         | 
| 278 | 
            +
            - spec/lib/vanagon/component_spec.rb
         | 
| 279 | 
            +
            - spec/lib/vanagon/driver_spec.rb
         | 
| 296 280 | 
             
            - spec/lib/vanagon/engine/always_be_scheduling_spec.rb
         | 
| 281 | 
            +
            - spec/lib/vanagon/engine/base_spec.rb
         | 
| 297 282 | 
             
            - spec/lib/vanagon/engine/docker_spec.rb
         | 
| 298 283 | 
             
            - spec/lib/vanagon/engine/ec2_spec.rb
         | 
| 299 284 | 
             
            - spec/lib/vanagon/engine/hardware_spec.rb
         | 
| 300 285 | 
             
            - spec/lib/vanagon/engine/local_spec.rb
         | 
| 301 | 
            -
            - spec/lib/vanagon/engine/base_spec.rb
         | 
| 302 286 | 
             
            - spec/lib/vanagon/engine/pooler_spec.rb
         | 
| 303 | 
            -
            - spec/lib/ | 
| 304 | 
            -
            - spec/lib/ | 
| 287 | 
            +
            - spec/lib/vanagon/environment_spec.rb
         | 
| 288 | 
            +
            - spec/lib/vanagon/extensions/ostruct/json_spec.rb
         | 
| 289 | 
            +
            - spec/lib/vanagon/extensions/set/json_spec.rb
         | 
| 290 | 
            +
            - spec/lib/vanagon/extensions/string_spec.rb
         | 
| 291 | 
            +
            - spec/lib/vanagon/optparse_spec.rb
         | 
| 292 | 
            +
            - spec/lib/vanagon/platform/deb_spec.rb
         | 
| 293 | 
            +
            - spec/lib/vanagon/platform/dsl_spec.rb
         | 
| 294 | 
            +
            - spec/lib/vanagon/platform/osx_spec.rb
         | 
| 295 | 
            +
            - spec/lib/vanagon/platform/rpm/aix_spec.rb
         | 
| 296 | 
            +
            - spec/lib/vanagon/platform/rpm_spec.rb
         | 
| 297 | 
            +
            - spec/lib/vanagon/platform/solaris_10_spec.rb
         | 
| 298 | 
            +
            - spec/lib/vanagon/platform/solaris_11_spec.rb
         | 
| 299 | 
            +
            - spec/lib/vanagon/platform/windows_spec.rb
         | 
| 300 | 
            +
            - spec/lib/vanagon/platform_spec.rb
         | 
| 301 | 
            +
            - spec/lib/vanagon/project/dsl_spec.rb
         | 
| 302 | 
            +
            - spec/lib/vanagon/project_spec.rb
         | 
| 303 | 
            +
            - spec/lib/vanagon/utilities/shell_utilities_spec.rb
         | 
| 304 | 
            +
            - spec/lib/vanagon/utilities_spec.rb
         |