vanagon 0.17.0 → 0.20.0
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/README.md +2 -2
- data/bin/build +3 -1
- data/bin/build_host_info +3 -1
- data/bin/build_requirements +3 -1
- data/bin/inspect +3 -1
- data/bin/render +3 -1
- data/bin/repo +3 -1
- data/bin/ship +3 -1
- data/bin/sign +3 -1
- data/extras/completions/vanagon.bash +38 -0
- data/extras/completions/vanagon.zsh +41 -0
- data/lib/vanagon/cli.rb +12 -2
- data/lib/vanagon/cli/build.rb +12 -3
- data/lib/vanagon/cli/build_host_info.rb +12 -3
- data/lib/vanagon/cli/build_requirements.rb +13 -5
- data/lib/vanagon/cli/completion.rb +44 -0
- data/lib/vanagon/cli/inspect.rb +12 -3
- data/lib/vanagon/cli/list.rb +74 -0
- data/lib/vanagon/cli/render.rb +11 -2
- data/lib/vanagon/cli/ship.rb +5 -4
- data/lib/vanagon/cli/sign.rb +3 -2
- data/lib/vanagon/component.rb +13 -10
- data/lib/vanagon/component/dsl.rb +27 -20
- data/lib/vanagon/component/source.rb +2 -1
- data/lib/vanagon/component/source/git.rb +35 -10
- data/lib/vanagon/component/source/http.rb +3 -2
- data/lib/vanagon/component/source/local.rb +2 -1
- data/lib/vanagon/component/source/rewrite.rb +3 -2
- data/lib/vanagon/driver.rb +35 -34
- data/lib/vanagon/engine/always_be_scheduling.rb +12 -11
- data/lib/vanagon/engine/docker.rb +2 -1
- data/lib/vanagon/engine/ec2.rb +5 -4
- data/lib/vanagon/engine/hardware.rb +4 -3
- data/lib/vanagon/engine/pooler.rb +6 -5
- data/lib/vanagon/environment.rb +3 -2
- data/lib/vanagon/logger.rb +31 -0
- data/lib/vanagon/platform.rb +38 -5
- data/lib/vanagon/platform/deb.rb +2 -0
- data/lib/vanagon/platform/dsl.rb +23 -6
- data/lib/vanagon/platform/windows.rb +3 -1
- data/lib/vanagon/project.rb +25 -15
- data/lib/vanagon/project/dsl.rb +6 -5
- data/lib/vanagon/utilities.rb +5 -4
- data/resources/deb/control.erb +1 -1
- data/resources/deb/postinst.erb +24 -13
- data/resources/deb/postrm.erb +9 -6
- data/resources/deb/prerm.erb +18 -8
- data/resources/osx/postinstall.erb +5 -1
- data/resources/rpm/project.spec.erb +12 -12
- data/resources/solaris/10/depend.erb +2 -2
- data/resources/solaris/10/postinstall.erb +10 -2
- data/resources/solaris/11/p5m.erb +2 -2
- data/spec/lib/vanagon/cli_spec.rb +143 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +54 -10
- data/spec/lib/vanagon/component/source/git_spec.rb +4 -4
- data/spec/lib/vanagon/component_spec.rb +15 -2
- data/spec/lib/vanagon/driver_spec.rb +1 -1
- data/spec/lib/vanagon/engine/always_be_scheduling_spec.rb +4 -4
- data/spec/lib/vanagon/platform_spec.rb +80 -0
- data/spec/lib/vanagon/utilities_spec.rb +4 -1
- metadata +37 -32
    
        data/resources/deb/prerm.erb
    CHANGED
    
    | @@ -13,15 +13,25 @@ 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.eql?('systemd') -%>
         | 
| 17 | 
            +
            if [ -f '/proc/1/comm' ]; then
         | 
| 18 | 
            +
              init_comm=`cat /proc/1/comm`
         | 
| 19 | 
            +
              if [ "$init_comm" = "systemd" ]; then
         | 
| 20 | 
            +
                if [ "$1" = remove ]; then
         | 
| 21 | 
            +
                  systemctl --no-reload disable <%= service.name %>.service > /dev/null 2>&1 || :
         | 
| 22 | 
            +
                  systemctl stop <%= service.name %>.service > /dev/null 2>&1 || :
         | 
| 23 | 
            +
                fi
         | 
| 24 | 
            +
              fi
         | 
| 20 25 | 
             
            fi
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              <%-  | 
| 23 | 
            -
            if [ - | 
| 24 | 
            -
               | 
| 26 | 
            +
              <%- end -%>
         | 
| 27 | 
            +
              <%- if service.init_system.nil? || service.init_system.eql?('sysv') -%>
         | 
| 28 | 
            +
            if [ -f '/proc/1/comm' ]; then
         | 
| 29 | 
            +
              init_comm=`cat /proc/1/comm`
         | 
| 30 | 
            +
              if [ "$init_comm" = "init" ]; then
         | 
| 31 | 
            +
                if [ -x "<%= service.service_file %>" ] && [ "$1" = remove ]; then
         | 
| 32 | 
            +
                  invoke-rc.d <%= service.name %> stop || true
         | 
| 33 | 
            +
                fi
         | 
| 34 | 
            +
              fi
         | 
| 25 35 | 
             
            fi
         | 
| 26 36 | 
             
              <%- end -%>
         | 
| 27 37 | 
             
            <%- end -%>
         | 
| @@ -6,7 +6,11 @@ | |
| 6 6 | 
             
            dest_file = config.path.gsub(/\.pristine$/, '') -%>
         | 
| 7 7 |  | 
| 8 8 | 
             
            if [ -f "<%= dest_file %>" ]; then
         | 
| 9 | 
            -
               | 
| 9 | 
            +
              if diff "<%= config.path %>" "<%= dest_file %>" > /dev/null; then
         | 
| 10 | 
            +
                rm -f "<%= config.path %>"
         | 
| 11 | 
            +
              else
         | 
| 12 | 
            +
                echo "Detected file at '<%= dest_file %>'; updated file at '<%= config.path %>'."
         | 
| 13 | 
            +
              fi
         | 
| 10 14 | 
             
            else
         | 
| 11 15 | 
             
              mv '<%= config.path %>' '<%= dest_file %>'
         | 
| 12 16 | 
             
            fi
         | 
| @@ -77,7 +77,7 @@ Source1:        file-list-for-rpm | |
| 77 77 | 
             
            Autoprov: 0
         | 
| 78 78 | 
             
            Autoreq: 0
         | 
| 79 79 | 
             
            <%- get_requires.each do |requires| -%>
         | 
| 80 | 
            -
            Requires:  <%= requires %>
         | 
| 80 | 
            +
            Requires:  <%= requires.requirement %><%= requires.version ? " #{requires.version}" : "" %>
         | 
| 81 81 | 
             
            <%- end -%>
         | 
| 82 82 |  | 
| 83 83 | 
             
            # All rpm packages built by vanagon have the pre-/post-install script
         | 
| @@ -98,7 +98,7 @@ Requires(post): /bin/touch | |
| 98 98 | 
             
            <%- end -%>
         | 
| 99 99 |  | 
| 100 100 | 
             
            <%- if has_services? -%>
         | 
| 101 | 
            -
              <%- if @platform. | 
| 101 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 102 102 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 103 103 | 
             
            BuildRequires:    systemd
         | 
| 104 104 | 
             
            %{?systemd_requires}
         | 
| @@ -108,7 +108,7 @@ Requires(post):   systemd | |
| 108 108 | 
             
            Requires(preun):  systemd
         | 
| 109 109 | 
             
            Requires(postun): systemd
         | 
| 110 110 | 
             
                <%- end -%>
         | 
| 111 | 
            -
              <%- elsif @platform. | 
| 111 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 112 112 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 113 113 | 
             
            Requires: aaa_base
         | 
| 114 114 | 
             
                <%- elsif @platform.is_linux? -%>
         | 
| @@ -256,15 +256,15 @@ fi | |
| 256 256 | 
             
            <%- get_services.each do |service| -%>
         | 
| 257 257 | 
             
              # switch based on systemd vs systemv vs smf vs aix
         | 
| 258 258 | 
             
              #
         | 
| 259 | 
            -
              <%- if @platform. | 
| 259 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 260 260 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 261 261 | 
             
                  %service_add_post <%= service.name %>.service
         | 
| 262 262 | 
             
                <%- else -%>
         | 
| 263 263 | 
             
                  %systemd_post <%= service.name %>.service
         | 
| 264 264 | 
             
                <%- end -%>
         | 
| 265 | 
            -
              <%- elsif @platform. | 
| 265 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 266 266 | 
             
                chkconfig --add <%= service.name %> >/dev/null 2>&1 || :
         | 
| 267 | 
            -
              <%- elsif @platform. | 
| 267 | 
            +
              <%- elsif @platform.get_service_types.include?("aix") -%>
         | 
| 268 268 | 
             
                if /usr/bin/lssrc -s <%= service.name -%> > /dev/null 2>&1; then
         | 
| 269 269 | 
             
                  /usr/bin/chssys -s <%= service.name -%> -p <%= service.service_command -%> -w 7 -S -n 15 -f 9 > /dev/null 2>&1 || :
         | 
| 270 270 | 
             
                else
         | 
| @@ -305,17 +305,17 @@ fi | |
| 305 305 | 
             
            <%- get_services.each do |service| -%>
         | 
| 306 306 | 
             
              # switch based on systemd vs systemv vs smf vs aix
         | 
| 307 307 | 
             
              #
         | 
| 308 | 
            -
              <%- if @platform. | 
| 308 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 309 309 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 310 310 | 
             
                  %service_del_postun <%= service.name %>.service
         | 
| 311 311 | 
             
                <%- else -%>
         | 
| 312 312 | 
             
                  %systemd_postun_with_restart <%= service.name %>.service
         | 
| 313 313 | 
             
                <%- end -%>
         | 
| 314 | 
            -
              <%- elsif @platform. | 
| 314 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 315 315 | 
             
                if [ "$1" -eq 1 ]; then
         | 
| 316 316 | 
             
                  /sbin/service <%= service.name %> condrestart || :
         | 
| 317 317 | 
             
                fi
         | 
| 318 | 
            -
              <%- elsif @platform. | 
| 318 | 
            +
              <%- elsif @platform.get_service_types.include?("aix") -%>
         | 
| 319 319 | 
             
                if  [ "$1" -eq 0 ]; then
         | 
| 320 320 | 
             
                  /usr/bin/rmssys -s <%= service.name -%> > /dev/null 2>&1 || :
         | 
| 321 321 | 
             
                  /usr/sbin/rmitab <%= service.name -%> > /dev/null 2>&1 || :
         | 
| @@ -336,18 +336,18 @@ if [ "$1" -eq 0 ] ; then | |
| 336 336 | 
             
            fi
         | 
| 337 337 |  | 
| 338 338 | 
             
            <%- get_services.each do |service| -%>
         | 
| 339 | 
            -
              <%- if @platform. | 
| 339 | 
            +
              <%- if @platform.get_service_types.include?("systemd") -%>
         | 
| 340 340 | 
             
                <%- if @platform.is_sles? -%>
         | 
| 341 341 | 
             
                  %service_del_preun <%= service.name %>.service
         | 
| 342 342 | 
             
                <%- else -%>
         | 
| 343 343 | 
             
                  %systemd_preun <%= service.name %>.service
         | 
| 344 344 | 
             
                <%- end -%>
         | 
| 345 | 
            -
              <%- elsif @platform. | 
| 345 | 
            +
              <%- elsif @platform.get_service_types.include?("sysv") -%>
         | 
| 346 346 | 
             
                if [ "$1" -eq 0 ]; then
         | 
| 347 347 | 
             
                  /sbin/service <%= service.name %> stop >/dev/null 2>&1 || :
         | 
| 348 348 | 
             
                  chkconfig --del <%= service.name %> || :
         | 
| 349 349 | 
             
                fi
         | 
| 350 | 
            -
              <%- elsif @platform. | 
| 350 | 
            +
              <%- elsif @platform.get_service_types.include?("aix") -%>
         | 
| 351 351 | 
             
                  # stop the service only on a real uninstall, not on upgrades
         | 
| 352 352 | 
             
                  if [ "$1" -eq 0 ] ; then
         | 
| 353 353 | 
             
                      /usr/bin/stopsrc -s <%= service.name -%> > /dev/null 2>&1 || :
         | 
| @@ -1,3 +1,3 @@ | |
| 1 | 
            -
            <%- get_requires.each do | | 
| 2 | 
            -
            P <%= requirement %>
         | 
| 1 | 
            +
            <%- get_requires.each do |requires| -%>
         | 
| 2 | 
            +
            P <%= requires.requirement %>
         | 
| 3 3 | 
             
            <%- end -%>
         | 
| @@ -10,7 +10,11 @@ | |
| 10 10 | 
             
            dest_file = config.path.gsub(/\.pristine$/, '') -%>
         | 
| 11 11 |  | 
| 12 12 | 
             
            if [ -f "<%= dest_file %>" ]; then
         | 
| 13 | 
            -
               | 
| 13 | 
            +
              if diff "<%= config.path %>" "<%= dest_file %>" > /dev/null; then
         | 
| 14 | 
            +
                rm -f "<%= config.path %>"
         | 
| 15 | 
            +
              else
         | 
| 16 | 
            +
                echo "Detected file at '<%= dest_file %>'; updated file at '<%= config.path %>'."
         | 
| 17 | 
            +
              fi
         | 
| 14 18 | 
             
            else
         | 
| 15 19 | 
             
              cp -pr '<%= config.path %>' '<%= dest_file %>'
         | 
| 16 20 | 
             
            fi
         | 
| @@ -19,7 +23,11 @@ fi | |
| 19 23 |  | 
| 20 24 | 
             
            # Set up any specific permissions needed...
         | 
| 21 25 | 
             
            <%- (get_directories + get_configfiles + get_files).select { |pathname| pathname.has_overrides? }.uniq.each do |file_or_directory| -%>
         | 
| 22 | 
            -
               | 
| 26 | 
            +
              <%- if file_or_directory.mode -%>
         | 
| 27 | 
            +
              if [ -f "<%= file_or_directory.path %>" ] || [ -d "<%= file_or_directory.path %>" ]; then
         | 
| 28 | 
            +
                chmod '<%= file_or_directory.mode %>' '<%= file_or_directory.path %>'
         | 
| 29 | 
            +
              fi
         | 
| 30 | 
            +
              <%- end -%>
         | 
| 23 31 | 
             
              <%- if file_or_directory.owner -%>
         | 
| 24 32 | 
             
                if getent passwd '<%= file_or_directory.owner %>' &> /dev/null; then
         | 
| 25 33 | 
             
                  chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>'
         | 
| @@ -17,8 +17,8 @@ set name=variant.opensolaris.zone value=global value=nonglobal | |
| 17 17 | 
             
            %>
         | 
| 18 18 |  | 
| 19 19 | 
             
            # Add any needed dependencies
         | 
| 20 | 
            -
            <%- get_requires.each do | | 
| 21 | 
            -
            depend fmri=pkg:/<%= requirement %> type=require
         | 
| 20 | 
            +
            <%- get_requires.each do |requires| -%>
         | 
| 21 | 
            +
            depend fmri=pkg:/<%= requires.requirement %> type=require
         | 
| 22 22 | 
             
            <%- end -%>
         | 
| 23 23 |  | 
| 24 24 | 
             
            # Always drop /etc, /usr, and /var, it will cause conflicts with other system packages
         | 
| @@ -78,3 +78,146 @@ describe Vanagon::CLI do | |
| 78 78 | 
             
                end
         | 
| 79 79 | 
             
              end
         | 
| 80 80 | 
             
            end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            describe Vanagon::CLI::List do 
         | 
| 83 | 
            +
              let(:cli) { Vanagon::CLI::List.new }
         | 
| 84 | 
            +
              
         | 
| 85 | 
            +
              describe "#output" do 
         | 
| 86 | 
            +
                  let(:list) { ['a', 'b', 'c']}
         | 
| 87 | 
            +
                  it "returns an array if space is false" do 
         | 
| 88 | 
            +
                      expect(cli.output(list, false)).to eq(list)
         | 
| 89 | 
            +
                  end 
         | 
| 90 | 
            +
                  it "returns space separated if space is true" do 
         | 
| 91 | 
            +
                      expect(cli.output(list, true)).to eq('a b c')
         | 
| 92 | 
            +
                  end 
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
              describe "#run" do 
         | 
| 96 | 
            +
                let(:projects){ ['foo', 'bar', 'baz'] }
         | 
| 97 | 
            +
                let(:platforms){ ['1', '2', '3'] }
         | 
| 98 | 
            +
                let(:output_both){
         | 
| 99 | 
            +
            "- Projects
         | 
| 100 | 
            +
            foo
         | 
| 101 | 
            +
            bar
         | 
| 102 | 
            +
            baz
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            - Platforms
         | 
| 105 | 
            +
            1
         | 
| 106 | 
            +
            2
         | 
| 107 | 
            +
            3
         | 
| 108 | 
            +
            "
         | 
| 109 | 
            +
            }
         | 
| 110 | 
            +
                context "specs with standard config path" do
         | 
| 111 | 
            +
                  before(:each) do
         | 
| 112 | 
            +
                    expect(Dir).to receive(:exist?)
         | 
| 113 | 
            +
                      .with("#{File.join(Dir.pwd, 'configs', 'platforms')}")
         | 
| 114 | 
            +
                      .and_return(true)
         | 
| 115 | 
            +
                    expect(Dir).to receive(:exist?)
         | 
| 116 | 
            +
                      .with("#{File.join(Dir.pwd, 'configs', 'projects')}")
         | 
| 117 | 
            +
                      .and_return(true)
         | 
| 118 | 
            +
                    expect(Dir).to receive(:children)
         | 
| 119 | 
            +
                      .with("#{File.join(Dir.pwd, 'configs', 'projects')}")
         | 
| 120 | 
            +
                      .and_return(projects)
         | 
| 121 | 
            +
                    expect(Dir).to receive(:children)
         | 
| 122 | 
            +
                      .with("#{File.join(Dir.pwd, 'configs', 'platforms')}")
         | 
| 123 | 
            +
                      .and_return(platforms)
         | 
| 124 | 
            +
                  end
         | 
| 125 | 
            +
                  let(:options_empty) { {
         | 
| 126 | 
            +
                    nil=>false, 
         | 
| 127 | 
            +
                    :configdir=>"#{Dir.pwd}/configs", 
         | 
| 128 | 
            +
                    :platforms=>false, 
         | 
| 129 | 
            +
                    :projects=>false, 
         | 
| 130 | 
            +
                    :use_spaces=>false
         | 
| 131 | 
            +
                  } }
         | 
| 132 | 
            +
                  let(:options_platforms_only) { {
         | 
| 133 | 
            +
                    nil=>false, 
         | 
| 134 | 
            +
                    :configdir=>"#{Dir.pwd}/configs", 
         | 
| 135 | 
            +
                    :platforms=>true, 
         | 
| 136 | 
            +
                    :projects=>false, 
         | 
| 137 | 
            +
                    :use_spaces=>false
         | 
| 138 | 
            +
                  } }
         | 
| 139 | 
            +
                  let(:options_projects_only) { {
         | 
| 140 | 
            +
                    nil=>false, 
         | 
| 141 | 
            +
                    :configdir=>"#{Dir.pwd}/configs", 
         | 
| 142 | 
            +
                    :platforms=>false, 
         | 
| 143 | 
            +
                    :projects=>true, 
         | 
| 144 | 
            +
                    :use_spaces=>false
         | 
| 145 | 
            +
                  } }
         | 
| 146 | 
            +
                  let(:options_space_only) { {
         | 
| 147 | 
            +
                    nil=>false, 
         | 
| 148 | 
            +
                    :configdir=>"#{Dir.pwd}/configs", 
         | 
| 149 | 
            +
                    :platforms=>false, 
         | 
| 150 | 
            +
                    :projects=>false, 
         | 
| 151 | 
            +
                    :use_spaces=>true
         | 
| 152 | 
            +
                  } }
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  it "outputs projects and platforms with no options passed" do 
         | 
| 155 | 
            +
                    expect do
         | 
| 156 | 
            +
                      cli.run(options_empty)
         | 
| 157 | 
            +
                    end.to output(output_both).to_stdout
         | 
| 158 | 
            +
                  end
         | 
| 159 | 
            +
                  
         | 
| 160 | 
            +
                  let(:output_both_space){
         | 
| 161 | 
            +
            "- Projects
         | 
| 162 | 
            +
            foo bar baz
         | 
| 163 | 
            +
             | 
| 164 | 
            +
            - Platforms
         | 
| 165 | 
            +
            1 2 3
         | 
| 166 | 
            +
            "
         | 
| 167 | 
            +
            }
         | 
| 168 | 
            +
                  it "outputs projects and platforms space separated" do 
         | 
| 169 | 
            +
                    expect do
         | 
| 170 | 
            +
                      cli.run(options_space_only)
         | 
| 171 | 
            +
                    end.to output(output_both_space).to_stdout
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                  let(:output_platforms){
         | 
| 175 | 
            +
            "- Platforms
         | 
| 176 | 
            +
            1
         | 
| 177 | 
            +
            2
         | 
| 178 | 
            +
            3
         | 
| 179 | 
            +
            "
         | 
| 180 | 
            +
            }
         | 
| 181 | 
            +
                  it "outputs only platforms when platforms is passed" do 
         | 
| 182 | 
            +
                    expect do
         | 
| 183 | 
            +
                      cli.run(options_platforms_only)
         | 
| 184 | 
            +
                    end.to output(output_platforms).to_stdout
         | 
| 185 | 
            +
                  end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                  let(:output_projects){
         | 
| 188 | 
            +
            "- Projects
         | 
| 189 | 
            +
            foo
         | 
| 190 | 
            +
            bar
         | 
| 191 | 
            +
            baz
         | 
| 192 | 
            +
            "
         | 
| 193 | 
            +
            }
         | 
| 194 | 
            +
                  it "outputs only projects when projects is passed" do 
         | 
| 195 | 
            +
                    expect do
         | 
| 196 | 
            +
                      cli.run(options_projects_only)
         | 
| 197 | 
            +
                    end.to output(output_projects).to_stdout
         | 
| 198 | 
            +
                  end
         | 
| 199 | 
            +
                end
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                context "spec with a configdir specified" do
         | 
| 202 | 
            +
                  let(:options_configdir) { {
         | 
| 203 | 
            +
                    nil=>false, 
         | 
| 204 | 
            +
                    :configdir=> '/configs', 
         | 
| 205 | 
            +
                    :platforms=>false, 
         | 
| 206 | 
            +
                    :projects=>false, 
         | 
| 207 | 
            +
                    :use_spaces=>false} }
         | 
| 208 | 
            +
                  it "it successfully takes the configs directory" do 
         | 
| 209 | 
            +
                    expect(Dir).to receive(:exist?).with('/configs' + '/platforms')
         | 
| 210 | 
            +
                      .and_return(true)
         | 
| 211 | 
            +
                    expect(Dir).to receive(:exist?).with('/configs' + '/projects')
         | 
| 212 | 
            +
                      .and_return(true)
         | 
| 213 | 
            +
                    expect(Dir).to receive(:children).with('/configs' + '/projects')
         | 
| 214 | 
            +
                      .and_return(projects)
         | 
| 215 | 
            +
                    expect(Dir).to receive(:children).with('/configs' + '/platforms')
         | 
| 216 | 
            +
                      .and_return(platforms)
         | 
| 217 | 
            +
                    expect do
         | 
| 218 | 
            +
                      cli.run(options_configdir)
         | 
| 219 | 
            +
                    end.to output(output_both).to_stdout
         | 
| 220 | 
            +
                  end
         | 
| 221 | 
            +
                end
         | 
| 222 | 
            +
              end
         | 
| 223 | 
            +
            end
         | 
| @@ -34,6 +34,16 @@ end" } | |
| 34 34 | 
             
                plat._platform
         | 
| 35 35 | 
             
              }
         | 
| 36 36 |  | 
| 37 | 
            +
              let (:dummy_platform_sysv_or_systemd) {
         | 
| 38 | 
            +
                plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
         | 
| 39 | 
            +
                plat.instance_eval("platform 'debian-8-x86_64' do |plat|
         | 
| 40 | 
            +
                                   plat.servicetype 'sysv', servicedir: '/etc/init.d'
         | 
| 41 | 
            +
                                   plat.servicetype 'systemd', servicedir: '/usr/lib/systemd/system'
         | 
| 42 | 
            +
                                   plat.defaultdir '/etc/default'
         | 
| 43 | 
            +
                                   end")
         | 
| 44 | 
            +
                plat._platform
         | 
| 45 | 
            +
              }
         | 
| 46 | 
            +
             | 
| 37 47 | 
             
              let (:dummy_platform_smf) {
         | 
| 38 48 | 
             
                plat = Vanagon::Platform::DSL.new('debian-11-i386')
         | 
| 39 49 | 
             
                plat.instance_eval("platform 'debian-11-i386' do |plat|
         | 
| @@ -313,11 +323,18 @@ end" } | |
| 313 323 | 
             
                  comp = Vanagon::Component::DSL.new('requires-test', {}, {})
         | 
| 314 324 | 
             
                  comp.requires('library1')
         | 
| 315 325 | 
             
                  comp.requires('library2')
         | 
| 316 | 
            -
                  expect(comp._component.requires).to include('library1')
         | 
| 317 | 
            -
                  expect(comp._component.requires).to include('library2')
         | 
| 326 | 
            +
                  expect(comp._component.requires.first.requirement).to include('library1')
         | 
| 327 | 
            +
                  expect(comp._component.requires.last.requirement).to include('library2')
         | 
| 318 328 | 
             
                end
         | 
| 319 329 | 
             
              end
         | 
| 320 330 |  | 
| 331 | 
            +
                it 'supports versioned requires' do
         | 
| 332 | 
            +
                  comp = Vanagon::Component::DSL.new('requires-test', {}, {})
         | 
| 333 | 
            +
                  comp.requires('library1', '1.2.3')
         | 
| 334 | 
            +
                  expect(comp._component.requires.first.requirement).to eq('library1')
         | 
| 335 | 
            +
                  expect(comp._component.requires.first.version).to eq('1.2.3')
         | 
| 336 | 
            +
                end
         | 
| 337 | 
            +
             | 
| 321 338 | 
             
              describe '#provides' do
         | 
| 322 339 | 
             
                it 'adds the package provide to the list of provides' do
         | 
| 323 340 | 
             
                  comp = Vanagon::Component::DSL.new('provides-test', {}, {})
         | 
| @@ -568,15 +585,15 @@ end" } | |
| 568 585 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
         | 
| 569 586 |  | 
| 570 587 | 
             
                  # The component should now have a service registered
         | 
| 571 | 
            -
                  expect(comp._component.service.name).to  | 
| 588 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 572 589 | 
             
                end
         | 
| 573 590 |  | 
| 574 591 | 
             
                it 'reads from a file when the OS is AIX for services' do
         | 
| 575 592 | 
             
                  comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_aix)
         | 
| 576 593 | 
             
                  comp.install_service('spec/fixtures/component/mcollective.service', nil, 'mcollective')
         | 
| 577 | 
            -
                  expect(comp._component.service.name).to  | 
| 578 | 
            -
                  expect(comp._component.service.service_command).to include('/opt/puppetlabs/puppet/bin/ruby')
         | 
| 579 | 
            -
                  expect(comp._component.service.service_command).not_to include("\n")
         | 
| 594 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('mcollective')
         | 
| 595 | 
            +
                  expect(comp._component.service.flat_map(&:service_command).compact.first).to include('/opt/puppetlabs/puppet/bin/ruby')
         | 
| 596 | 
            +
                  expect(comp._component.service.flat_map(&:service_command).compact.first).not_to include("\n")
         | 
| 580 597 | 
             
                end
         | 
| 581 598 |  | 
| 582 599 | 
             
                it 'adds the correct command to the install for the component for systemd platforms' do
         | 
| @@ -595,7 +612,34 @@ end" } | |
| 595 612 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
         | 
| 596 613 |  | 
| 597 614 | 
             
                  # The component should now have a service registered
         | 
| 598 | 
            -
                  expect(comp._component.service.name).to  | 
| 615 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 616 | 
            +
                end
         | 
| 617 | 
            +
             | 
| 618 | 
            +
                it 'adds the correct command when installing both systemd and sysv' do
         | 
| 619 | 
            +
                  comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_sysv_or_systemd)
         | 
| 620 | 
            +
                  comp.install_service('component-client.init', 'component-client.sysconfig', init_system: 'sysv')
         | 
| 621 | 
            +
                  comp.install_service('component-client.service', 'component-client.sysconfig', init_system: 'systemd')
         | 
| 622 | 
            +
                  # Look for servicedir creation and copy - sysv
         | 
| 623 | 
            +
                  expect(comp._component.install).to include("install -d '/etc/init.d'")
         | 
| 624 | 
            +
                  expect(comp._component.install).to include("cp -p 'component-client.init' '/etc/init.d/service-test'")
         | 
| 625 | 
            +
             | 
| 626 | 
            +
                  # Look for servicedir creation and copy - systemd
         | 
| 627 | 
            +
                  expect(comp._component.install).to include("install -d '/usr/lib/systemd/system'")
         | 
| 628 | 
            +
                  expect(comp._component.install).to include("cp -p 'component-client.service' '/usr/lib/systemd/system/service-test.service'")
         | 
| 629 | 
            +
             | 
| 630 | 
            +
                  # Look for defaultdir creation and copy
         | 
| 631 | 
            +
                  expect(comp._component.install).to include("install -d '/etc/default'")
         | 
| 632 | 
            +
                  expect(comp._component.install).to include("cp -p 'component-client.sysconfig' '/etc/default/service-test'")
         | 
| 633 | 
            +
             | 
| 634 | 
            +
                  # Look for files and configfiles - sysv
         | 
| 635 | 
            +
                  expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/etc/default/service-test'))
         | 
| 636 | 
            +
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
         | 
| 637 | 
            +
             | 
| 638 | 
            +
                  # Look for files and configfiles - systemd
         | 
| 639 | 
            +
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
         | 
| 640 | 
            +
             | 
| 641 | 
            +
                  # The component should now have a service registered
         | 
| 642 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 599 643 | 
             
                end
         | 
| 600 644 |  | 
| 601 645 | 
             
                it 'adds the correct command to the install for smf services using a service_type' do
         | 
| @@ -614,7 +658,7 @@ end" } | |
| 614 658 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/network/service-test.xml', mode: '0644'))
         | 
| 615 659 |  | 
| 616 660 | 
             
                  # The component should now have a service registered
         | 
| 617 | 
            -
                  expect(comp._component.service.name).to  | 
| 661 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 618 662 | 
             
                end
         | 
| 619 663 |  | 
| 620 664 | 
             
                it 'adds the correct command to the install for smf services' do
         | 
| @@ -633,7 +677,7 @@ end" } | |
| 633 677 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/service-test.xml', mode: '0644'))
         | 
| 634 678 |  | 
| 635 679 | 
             
                  # The component should now have a service registered
         | 
| 636 | 
            -
                  expect(comp._component.service.name).to  | 
| 680 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 637 681 | 
             
                end
         | 
| 638 682 |  | 
| 639 683 | 
             
                it 'installs the file as a link when link_target is specified' do
         | 
| @@ -654,7 +698,7 @@ end" } | |
| 654 698 | 
             
                  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test'))
         | 
| 655 699 |  | 
| 656 700 | 
             
                  # The component should now have a service registered
         | 
| 657 | 
            -
                  expect(comp._component.service.name).to  | 
| 701 | 
            +
                  expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
         | 
| 658 702 | 
             
                end
         | 
| 659 703 | 
             
              end
         | 
| 660 704 |  | 
| @@ -14,8 +14,8 @@ describe "Vanagon::Component::Source::Git" do | |
| 14 14 |  | 
| 15 15 | 
             
              # before(:each) blocks are run before each example
         | 
| 16 16 | 
             
              before :each do
         | 
| 17 | 
            -
                allow(Git)
         | 
| 18 | 
            -
                  .to receive(: | 
| 17 | 
            +
                allow(Vanagon::Component::Source::Git)
         | 
| 18 | 
            +
                  .to receive(:valid_remote?)
         | 
| 19 19 | 
             
                        .and_return(true)
         | 
| 20 20 |  | 
| 21 21 | 
             
                allow(File).to receive(:realpath).and_return(@workdir)
         | 
| @@ -24,8 +24,8 @@ describe "Vanagon::Component::Source::Git" do | |
| 24 24 | 
             
              describe "#initialize" do
         | 
| 25 25 | 
             
                it "raises error on initialization with an invalid repo" do
         | 
| 26 26 | 
             
                  # Ensure initializing a repo fails without calling over the network
         | 
| 27 | 
            -
                  allow(Git)
         | 
| 28 | 
            -
                    .to receive(: | 
| 27 | 
            +
                  allow(Vanagon::Component::Source::Git)
         | 
| 28 | 
            +
                    .to receive(:valid_remote?)
         | 
| 29 29 | 
             
                          .and_return(false)
         | 
| 30 30 |  | 
| 31 31 | 
             
                  expect { @klass.new(@url, ref: @ref_tag, workdir: @workdir) }
         |