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
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6fb1135d000a2b468d3a998b6ef1e7547d26f835d06b67f2ba502fb710d1f06b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ffac33c290bc103a851d8bc9f468ec8a838465ac0e12125446c86a2b22cbde9e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 388e8520c4231c89b4170d3f99ac590caea60e98ebe5ccd2a0b5cee159c595b80b897d45c91dfda3b063da2c636420ae1c8e96a52eb87b17fef1d99d8848ba15
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1ca438d9b68285bfcf8b269d1fe8217736bad75d868ecb7452fac4a499dab15d3eae8200ab9a4860763c0a5217335f17b4f7561ce58c0984f331356be594607a
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -197,8 +197,8 @@ Port of the system where redis is running. Defaults to *6379*. 
     | 
|
| 
       197 
197 
     | 
    
         
             
            ##### `VANAGON_USE_MIRRORS`
         
     | 
| 
       198 
198 
     | 
    
         
             
            Controls whether component sources are downloaded directly from upstream URLs
         
     | 
| 
       199 
199 
     | 
    
         
             
            or from configured mirrors. Most Puppet projects using Vanagon default to
         
     | 
| 
       200 
     | 
    
         
            -
            fetching components from internal mirrors. Set this variable to `n`  
     | 
| 
       201 
     | 
    
         
            -
            building outside of the Puppet private network to download directly from
         
     | 
| 
      
 200 
     | 
    
         
            +
            fetching components from internal mirrors. Set this variable to `n` or `false`
         
     | 
| 
      
 201 
     | 
    
         
            +
            when building outside of the Puppet private network to download directly from
         
     | 
| 
       202 
202 
     | 
    
         
             
            upstream sources.
         
     | 
| 
       203 
203 
     | 
    
         | 
| 
       204 
204 
     | 
    
         
             
            ##### `VANAGON_RETRY_COUNT`
         
     | 
    
        data/bin/build
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
    
        data/bin/build_host_info
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
    
        data/bin/build_requirements
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
    
        data/bin/inspect
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
    
        data/bin/render
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
    
        data/bin/repo
    CHANGED
    
    | 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            ENV["PROJECT_ROOT"] = Dir.pwd
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
7 
     | 
    
         
             
            # Begin warning: This ship script is an internal tool.
         
     | 
| 
         @@ -21,7 +23,7 @@ when 'rpm' 
     | 
|
| 
       21 
23 
     | 
    
         
             
            when 'deb'
         
     | 
| 
       22 
24 
     | 
    
         
             
              Pkg::Util::RakeUtils.invoke_task('pl:jenkins:deb_repos')
         
     | 
| 
       23 
25 
     | 
    
         
             
            when 'none'
         
     | 
| 
       24 
     | 
    
         
            -
               
     | 
| 
      
 26 
     | 
    
         
            +
              VanagonLogger.warn "Skipping repo generation since repo target is set to 'none'"
         
     | 
| 
       25 
27 
     | 
    
         
             
            else
         
     | 
| 
       26 
28 
     | 
    
         
             
              Pkg::Util::RakeUtils.invoke_task('pl:jenkins:rpm_repos')
         
     | 
| 
       27 
29 
     | 
    
         
             
              Pkg::Util::RakeUtils.invoke_task('pl:jenkins:deb_repos')
         
     | 
    
        data/bin/ship
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
    
        data/bin/sign
    CHANGED
    
    | 
         @@ -1,8 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            script = File.basename($0)
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            VanagonLogger.info "#{script}: Warning: use of stand alone '#{script}' command is deprecated and may be removed.
         
     | 
| 
       6 
8 
     | 
    
         
             
                 Use: 'vanagon #{script}' instead."
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            exec "vanagon", script, *ARGV
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env bash
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            _vanagon()
         
     | 
| 
      
 4 
     | 
    
         
            +
            {
         
     | 
| 
      
 5 
     | 
    
         
            +
              local cur prev projects commands template_arg_commands 
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              # COMREPLY is an array variable used to store completions  
         
     | 
| 
      
 8 
     | 
    
         
            +
              # the completion mechanism uses COMPRELY to display its contents as completions
         
     | 
| 
      
 9 
     | 
    
         
            +
              # COMP_WORDS is an array of all the words typed after the name of the program 
         
     | 
| 
      
 10 
     | 
    
         
            +
              # COMP_CWORD is an index of the COMP_WORDS array pointing to the current word
         
     | 
| 
      
 11 
     | 
    
         
            +
              COMPREPLY=()
         
     | 
| 
      
 12 
     | 
    
         
            +
              cur="${COMP_WORDS[COMP_CWORD]}"
         
     | 
| 
      
 13 
     | 
    
         
            +
              prev="${COMP_WORDS[COMP_CWORD-1]}"
         
     | 
| 
      
 14 
     | 
    
         
            +
              projects=($({ vanagon list -r | sed 1d; } 2>/dev/null))
         
     | 
| 
      
 15 
     | 
    
         
            +
              commands="build build_host_info build_requirements completion inspect list render sign ship help"
         
     | 
| 
      
 16 
     | 
    
         
            +
              template_arg_commands="build build_host_info build_requirements inspect render "
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              # completes with a project if the previous word was a command in template_arg_commands
         
     | 
| 
      
 19 
     | 
    
         
            +
              if [[ $template_arg_commands =~ (^| )$prev($| ) ]] ; then
         
     | 
| 
      
 20 
     | 
    
         
            +
                  _vanagon_avail_templates_projects=$({ vanagon list -r | sed 1d; } 2>/dev/null)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # compgen generates completions filtered based on what has been typed by the user
         
     | 
| 
      
 22 
     | 
    
         
            +
                  COMPREPLY=( $(compgen -W "${_vanagon_avail_templates_projects}" -- "${cur}") )
         
     | 
| 
      
 23 
     | 
    
         
            +
              fi 
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              # allows multiple platforms to be tab completed 
         
     | 
| 
      
 26 
     | 
    
         
            +
              if [[ ${#COMP_WORDS[@]} -gt 3 ]] ; then 
         
     | 
| 
      
 27 
     | 
    
         
            +
                _vanagon_avail_templates_platforms=$({ vanagon list -l | sed 1d; } 2>/dev/null)
         
     | 
| 
      
 28 
     | 
    
         
            +
                COMPREPLY=( $(compgen -W "${_vanagon_avail_templates_platforms}" -- "${cur}") )
         
     | 
| 
      
 29 
     | 
    
         
            +
              fi
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              if [[ $1 == $prev ]] ; then
         
     | 
| 
      
 32 
     | 
    
         
            +
                # only show top level commands we are at root
         
     | 
| 
      
 33 
     | 
    
         
            +
                COMPREPLY=( $(compgen -W "${commands}" -- "${cur}") )
         
     | 
| 
      
 34 
     | 
    
         
            +
              fi
         
     | 
| 
      
 35 
     | 
    
         
            +
            }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            # assign tab complete function `_vanagon ` to `vanagon` command 
         
     | 
| 
      
 38 
     | 
    
         
            +
            complete -F _vanagon vanagon
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            _vanagon()
         
     | 
| 
      
 2 
     | 
    
         
            +
            {
         
     | 
| 
      
 3 
     | 
    
         
            +
              local line commands template_arg_commands projects
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              commands="build build_host_info build_requirements completion inspect list render sign ship help"
         
     | 
| 
      
 6 
     | 
    
         
            +
              template_arg_commands=("build" "build_host_info" "build_requirements" "inspect"  "render")
         
     | 
| 
      
 7 
     | 
    
         
            +
              projects=($({ vanagon list -r | sed 1d; } 2>/dev/null))
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              # '%p:globbed-files:' sets completion to only offer files matching a 
         
     | 
| 
      
 10 
     | 
    
         
            +
              # described pattern.
         
     | 
| 
      
 11 
     | 
    
         
            +
              zstyle ':completion:*' file-patterns '%p:globbed-files:'
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              # arguments function provides potential completions to zsh 
         
     | 
| 
      
 14 
     | 
    
         
            +
              # specs are of the form n:message:action 
         
     | 
| 
      
 15 
     | 
    
         
            +
              _arguments -C \
         
     | 
| 
      
 16 
     | 
    
         
            +
                ": :(${commands})" \
         
     | 
| 
      
 17 
     | 
    
         
            +
                "*::arg:->args" 
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              # (Ie)prevents "invalid subscript"
         
     | 
| 
      
 20 
     | 
    
         
            +
              if ((template_arg_commands[(Ie)$line[1]])); then
         
     | 
| 
      
 21 
     | 
    
         
            +
                _vanagon_template_sub_projects
         
     | 
| 
      
 22 
     | 
    
         
            +
              fi
         
     | 
| 
      
 23 
     | 
    
         
            +
              if [[ $projects  =~ (^| )$line[2]($| ) ]]; then
         
     | 
| 
      
 24 
     | 
    
         
            +
                _vanagon_template_sub_platforms
         
     | 
| 
      
 25 
     | 
    
         
            +
              fi
         
     | 
| 
      
 26 
     | 
    
         
            +
            }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            _vanagon_template_sub_projects()
         
     | 
| 
      
 29 
     | 
    
         
            +
            {
         
     | 
| 
      
 30 
     | 
    
         
            +
              # -W look in certain path but don't append path to tab compelte 
         
     | 
| 
      
 31 
     | 
    
         
            +
              # -g enables file matching pattern 
         
     | 
| 
      
 32 
     | 
    
         
            +
              # (:r) removes the file extension `.rb` from the completion 
         
     | 
| 
      
 33 
     | 
    
         
            +
              _arguments "1: :_files -W $(PWD)/configs/projects/ -g '*.rb(:r)'"
         
     | 
| 
      
 34 
     | 
    
         
            +
            }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            _vanagon_template_sub_platforms()
         
     | 
| 
      
 37 
     | 
    
         
            +
            {
         
     | 
| 
      
 38 
     | 
    
         
            +
              _arguments "*: :_files -W $(PWD)/configs/platforms/ -g '*.rb(:r)'"
         
     | 
| 
      
 39 
     | 
    
         
            +
            }
         
     | 
| 
      
 40 
     | 
    
         
            +
            # compdef registeres the completion function: compdef <function-name> <program>
         
     | 
| 
      
 41 
     | 
    
         
            +
            compdef _vanagon vanagon
         
     | 
    
        data/lib/vanagon/cli.rb
    CHANGED
    
    | 
         @@ -8,11 +8,15 @@ require 'vanagon/extensions/hashable' 
     | 
|
| 
       8 
8 
     | 
    
         
             
            require 'vanagon/cli/build'
         
     | 
| 
       9 
9 
     | 
    
         
             
            require 'vanagon/cli/build_host_info'
         
     | 
| 
       10 
10 
     | 
    
         
             
            require 'vanagon/cli/build_requirements'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'vanagon/cli/completion'
         
     | 
| 
       11 
12 
     | 
    
         
             
            require 'vanagon/cli/inspect'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'vanagon/cli/list'
         
     | 
| 
       12 
14 
     | 
    
         
             
            require 'vanagon/cli/render'
         
     | 
| 
       13 
15 
     | 
    
         
             
            require 'vanagon/cli/ship'
         
     | 
| 
       14 
16 
     | 
    
         
             
            require 'vanagon/cli/sign'
         
     | 
| 
       15 
17 
     | 
    
         | 
| 
      
 18 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       16 
20 
     | 
    
         | 
| 
       17 
21 
     | 
    
         
             
            class Vanagon
         
     | 
| 
       18 
22 
     | 
    
         
             
              class InvalidArgument < StandardError
         
     | 
| 
         @@ -27,7 +31,9 @@ class Vanagon 
     | 
|
| 
       27 
31 
     | 
    
         
             
                      build               build a package given a project and platform
         
     | 
| 
       28 
32 
     | 
    
         
             
                      build_host_info     print information about build hosts
         
     | 
| 
       29 
33 
     | 
    
         
             
                      build_requirements  print external packages required to build project
         
     | 
| 
      
 34 
     | 
    
         
            +
                      completion          outputs path to tab completion script
         
     | 
| 
       30 
35 
     | 
    
         
             
                      inspect             a build dry-run, printing lots of information about the build
         
     | 
| 
      
 36 
     | 
    
         
            +
                      list                shows a list of available projects and platforms
         
     | 
| 
       31 
37 
     | 
    
         
             
                      render              create local versions of packaging artifacts for project
         
     | 
| 
       32 
38 
     | 
    
         
             
                      sign                sign a package
         
     | 
| 
       33 
39 
     | 
    
         
             
                      ship                upload a package to a distribution server
         
     | 
| 
         @@ -46,10 +52,14 @@ class Vanagon 
     | 
|
| 
       46 
52 
     | 
    
         
             
                    @sub_parser = Vanagon::CLI::BuildHostInfo.new
         
     | 
| 
       47 
53 
     | 
    
         
             
                  when 'build_requirements'
         
     | 
| 
       48 
54 
     | 
    
         
             
                    @sub_parser = Vanagon::CLI::BuildRequirements.new
         
     | 
| 
      
 55 
     | 
    
         
            +
                  when 'completion'
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @sub_parser = Vanagon::CLI::Completion.new
         
     | 
| 
       49 
57 
     | 
    
         
             
                  when 'inspect'
         
     | 
| 
       50 
58 
     | 
    
         
             
                    @sub_parser = Vanagon::CLI::Inspect.new
         
     | 
| 
       51 
59 
     | 
    
         
             
                  when 'render'
         
     | 
| 
       52 
60 
     | 
    
         
             
                    @sub_parser = Vanagon::CLI::Render.new
         
     | 
| 
      
 61 
     | 
    
         
            +
                  when 'list'
         
     | 
| 
      
 62 
     | 
    
         
            +
                    @sub_parser = Vanagon::CLI::List.new
         
     | 
| 
       53 
63 
     | 
    
         
             
                  when 'sign'
         
     | 
| 
       54 
64 
     | 
    
         
             
                    @sub_parser = Vanagon::CLI::Sign.new
         
     | 
| 
       55 
65 
     | 
    
         
             
                  when 'ship'
         
     | 
| 
         @@ -58,7 +68,7 @@ class Vanagon 
     | 
|
| 
       58 
68 
     | 
    
         
             
                    puts DOCUMENTATION
         
     | 
| 
       59 
69 
     | 
    
         
             
                    exit 0
         
     | 
| 
       60 
70 
     | 
    
         
             
                  else
         
     | 
| 
       61 
     | 
    
         
            -
                     
     | 
| 
      
 71 
     | 
    
         
            +
                    VanagonLogger.error "vanagon: Error: unknown command: \"#{sub_command}\"\n\n#{DOCUMENTATION}"
         
     | 
| 
       62 
72 
     | 
    
         
             
                    exit 1
         
     | 
| 
       63 
73 
     | 
    
         
             
                  end
         
     | 
| 
       64 
74 
     | 
    
         | 
| 
         @@ -87,7 +97,7 @@ class Vanagon 
     | 
|
| 
       87 
97 
     | 
    
         
             
                def parse_options(argv)
         
     | 
| 
       88 
98 
     | 
    
         
             
                  Docopt.docopt(DOCUMENTATION, { argv: argv, options_first: true })
         
     | 
| 
       89 
99 
     | 
    
         
             
                rescue Docopt::Exit => e
         
     | 
| 
       90 
     | 
    
         
            -
                   
     | 
| 
      
 100 
     | 
    
         
            +
                  VanagonLogger.error e.message
         
     | 
| 
       91 
101 
     | 
    
         
             
                  exit 1
         
     | 
| 
       92 
102 
     | 
    
         
             
                end
         
     | 
| 
       93 
103 
     | 
    
         
             
              end
         
     | 
    
        data/lib/vanagon/cli/build.rb
    CHANGED
    
    | 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'docopt'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            class Vanagon
         
     | 
| 
       4 
5 
     | 
    
         
             
              class CLI
         
     | 
| 
         @@ -10,7 +11,7 @@ class Vanagon 
     | 
|
| 
       10 
11 
     | 
    
         
             
                    Options:
         
     | 
| 
       11 
12 
     | 
    
         
             
                      -h, --help                       Display help
         
     | 
| 
       12 
13 
     | 
    
         
             
                      -c, --configdir DIRECTORY        Configuration directory [default: #{Dir.pwd}/configs]
         
     | 
| 
       13 
     | 
    
         
            -
                      -e, --engine ENGINE              Custom engine to use [ 
     | 
| 
      
 14 
     | 
    
         
            +
                      -e, --engine ENGINE              Custom engine to use [default: always_be_scheduling]
         
     | 
| 
       14 
15 
     | 
    
         
             
                      -o, --only-build COMPONENT,COMPONENT,...
         
     | 
| 
       15 
16 
     | 
    
         
             
                                                       Only build listed COMPONENTs
         
     | 
| 
       16 
17 
     | 
    
         
             
                      -p, --preserve [RULE]            Rule for VM preservation: never, on-failure, always
         
     | 
| 
         @@ -19,12 +20,20 @@ class Vanagon 
     | 
|
| 
       19 
20 
     | 
    
         
             
                      -s, --skipcheck                  Skip the "check" stage when building components
         
     | 
| 
       20 
21 
     | 
    
         
             
                      -w, --workdir DIRECTORY          Working directory on the local host
         
     | 
| 
       21 
22 
     | 
    
         
             
                      -v, --verbose                    Only here for backwards compatibility. Does nothing.
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    Engines:
         
     | 
| 
      
 25 
     | 
    
         
            +
                      always_be_scheduling: default engine using Puppet's ABS infrastructure
         
     | 
| 
      
 26 
     | 
    
         
            +
                      docker: a docker container on the local host
         
     | 
| 
      
 27 
     | 
    
         
            +
                      ec2: an Amazon EC2 instance
         
     | 
| 
      
 28 
     | 
    
         
            +
                      hardware: a dedicated hardware device
         
     | 
| 
      
 29 
     | 
    
         
            +
                      local: the local machine, cannot be used with a target
         
     | 
| 
      
 30 
     | 
    
         
            +
                      pooler: [deprecated] Puppet's vmpooler
         
     | 
| 
       22 
31 
     | 
    
         
             
                  DOCOPT
         
     | 
| 
       23 
32 
     | 
    
         | 
| 
       24 
33 
     | 
    
         
             
                  def parse(argv)
         
     | 
| 
       25 
34 
     | 
    
         
             
                    Docopt.docopt(DOCUMENTATION, { argv: argv })
         
     | 
| 
       26 
35 
     | 
    
         
             
                  rescue Docopt::Exit => e
         
     | 
| 
       27 
     | 
    
         
            -
                     
     | 
| 
      
 36 
     | 
    
         
            +
                    VanagonLogger.error e.message
         
     | 
| 
       28 
37 
     | 
    
         
             
                    exit 1
         
     | 
| 
       29 
38 
     | 
    
         
             
                  end
         
     | 
| 
       30 
39 
     | 
    
         | 
| 
         @@ -38,7 +47,7 @@ class Vanagon 
     | 
|
| 
       38 
47 
     | 
    
         | 
| 
       39 
48 
     | 
    
         
             
                    platform_list.zip(target_list).each do |pair|
         
     | 
| 
       40 
49 
     | 
    
         
             
                      platform, target = pair
         
     | 
| 
       41 
     | 
    
         
            -
                      artifact = Vanagon::Driver.new(platform, project, options.merge({  
     | 
| 
      
 50 
     | 
    
         
            +
                      artifact = Vanagon::Driver.new(platform, project, options.merge({ :target => target }))
         
     | 
| 
       42 
51 
     | 
    
         
             
                      artifact.run
         
     | 
| 
       43 
52 
     | 
    
         
             
                    end
         
     | 
| 
       44 
53 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'docopt'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            class Vanagon
         
     | 
| 
       4 
5 
     | 
    
         
             
              class CLI
         
     | 
| 
         @@ -10,15 +11,23 @@ class Vanagon 
     | 
|
| 
       10 
11 
     | 
    
         
             
                    Options:
         
     | 
| 
       11 
12 
     | 
    
         
             
                      -h, --help                       Display help
         
     | 
| 
       12 
13 
     | 
    
         
             
                      -c, --configdir DIRECTORY        Configuration directory [default: #{Dir.pwd}/configs]
         
     | 
| 
       13 
     | 
    
         
            -
                      -e, --engine ENGINE              Custom engine to use [ 
     | 
| 
      
 14 
     | 
    
         
            +
                      -e, --engine ENGINE              Custom engine to use [default: always_be_scheduling]
         
     | 
| 
       14 
15 
     | 
    
         
             
                      -w, --workdir DIRECTORY          Working directory on the local host
         
     | 
| 
       15 
16 
     | 
    
         
             
                      -v, --verbose                    Only here for backwards compatibility. Does nothing.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    Engines:
         
     | 
| 
      
 19 
     | 
    
         
            +
                      always_be_scheduling: default engine using Puppet's ABS infrastructure
         
     | 
| 
      
 20 
     | 
    
         
            +
                      docker: a docker container on the local host
         
     | 
| 
      
 21 
     | 
    
         
            +
                      ec2: an Amazon EC2 instance
         
     | 
| 
      
 22 
     | 
    
         
            +
                      hardware: a dedicated hardware device
         
     | 
| 
      
 23 
     | 
    
         
            +
                      local: the local machine, cannot be used with a target
         
     | 
| 
      
 24 
     | 
    
         
            +
                      pooler: [deprecated] Puppet's vmpooler
         
     | 
| 
       16 
25 
     | 
    
         
             
                  DOCOPT
         
     | 
| 
       17 
26 
     | 
    
         | 
| 
       18 
27 
     | 
    
         
             
                  def parse(argv)
         
     | 
| 
       19 
28 
     | 
    
         
             
                    Docopt.docopt(DOCUMENTATION, { argv: argv })
         
     | 
| 
       20 
29 
     | 
    
         
             
                  rescue Docopt::Exit => e
         
     | 
| 
       21 
     | 
    
         
            -
                     
     | 
| 
      
 30 
     | 
    
         
            +
                    VanagonLogger.error e.message
         
     | 
| 
       22 
31 
     | 
    
         
             
                    exit 1
         
     | 
| 
       23 
32 
     | 
    
         
             
                  end
         
     | 
| 
       24 
33 
     | 
    
         | 
| 
         @@ -28,7 +37,7 @@ class Vanagon 
     | 
|
| 
       28 
37 
     | 
    
         | 
| 
       29 
38 
     | 
    
         
             
                    platforms.each do |platform|
         
     | 
| 
       30 
39 
     | 
    
         
             
                      driver = Vanagon::Driver.new(platform, project, options)
         
     | 
| 
       31 
     | 
    
         
            -
                       
     | 
| 
      
 40 
     | 
    
         
            +
                      VanagonLogger.warn JSON.generate(driver.build_host_info)
         
     | 
| 
       32 
41 
     | 
    
         
             
                    end
         
     | 
| 
       33 
42 
     | 
    
         
             
                  end
         
     | 
| 
       34 
43 
     | 
    
         | 
| 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'docopt'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'json'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            class Vanagon
         
     | 
| 
       5 
6 
     | 
    
         
             
              class CLI
         
     | 
| 
         @@ -11,15 +12,23 @@ class Vanagon 
     | 
|
| 
       11 
12 
     | 
    
         
             
                    Options:
         
     | 
| 
       12 
13 
     | 
    
         
             
                      -h, --help                       Display help
         
     | 
| 
       13 
14 
     | 
    
         
             
                      -c, --configdir DIRECTORY        Configuration directory [default: #{Dir.pwd}/configs]
         
     | 
| 
       14 
     | 
    
         
            -
                      -e, --engine ENGINE              Custom engine to use [ 
     | 
| 
      
 15 
     | 
    
         
            +
                      -e, --engine ENGINE              Custom engine to use [default: always_be_scheduling]
         
     | 
| 
       15 
16 
     | 
    
         
             
                      -w, --workdir DIRECTORY          Working directory on the local host
         
     | 
| 
       16 
17 
     | 
    
         
             
                      -v, --verbose                    Only here for backwards compatibility. Does nothing.
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    Engines:
         
     | 
| 
      
 20 
     | 
    
         
            +
                      always_be_scheduling: default engine using Puppet's ABS infrastructure
         
     | 
| 
      
 21 
     | 
    
         
            +
                      docker: a docker container on the local host
         
     | 
| 
      
 22 
     | 
    
         
            +
                      ec2: an Amazon EC2 instance
         
     | 
| 
      
 23 
     | 
    
         
            +
                      hardware: a dedicated hardware device
         
     | 
| 
      
 24 
     | 
    
         
            +
                      local: the local machine, cannot be used with a target
         
     | 
| 
      
 25 
     | 
    
         
            +
                      pooler: [deprecated] Puppet's vmpooler
         
     | 
| 
       17 
26 
     | 
    
         
             
                  DOCOPT
         
     | 
| 
       18 
27 
     | 
    
         | 
| 
       19 
28 
     | 
    
         
             
                  def parse(argv)
         
     | 
| 
       20 
29 
     | 
    
         
             
                    Docopt.docopt(DOCUMENTATION, { argv: argv })
         
     | 
| 
       21 
30 
     | 
    
         
             
                  rescue Docopt::Exit => e
         
     | 
| 
       22 
     | 
    
         
            -
                     
     | 
| 
      
 31 
     | 
    
         
            +
                    VanagonLogger.error e.message
         
     | 
| 
       23 
32 
     | 
    
         
             
                    exit 1
         
     | 
| 
       24 
33 
     | 
    
         
             
                  end
         
     | 
| 
       25 
34 
     | 
    
         | 
| 
         @@ -39,9 +48,8 @@ class Vanagon 
     | 
|
| 
       39 
48 
     | 
    
         
             
                      end
         
     | 
| 
       40 
49 
     | 
    
         
             
                    end
         
     | 
| 
       41 
50 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                     
     | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
       44 
     | 
    
         
            -
                    $stdout.puts JSON.pretty_generate(build_requirements.flatten.uniq.sort)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    VanagonLogger.warn "**** External packages required to build #{project} on #{platform}: ***"
         
     | 
| 
      
 52 
     | 
    
         
            +
                    VanagonLogger.warn JSON.pretty_generate(build_requirements.flatten.uniq.sort)
         
     | 
| 
       45 
53 
     | 
    
         
             
                  end
         
     | 
| 
       46 
54 
     | 
    
         | 
| 
       47 
55 
     | 
    
         
             
                  def options_translate(docopt_options)
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'docopt'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'vanagon/logger'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class Vanagon
         
     | 
| 
      
 5 
     | 
    
         
            +
              class CLI
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Completion < Vanagon::CLI
         
     | 
| 
      
 7 
     | 
    
         
            +
                  DOCUMENTATION = <<~DOCOPT.freeze
         
     | 
| 
      
 8 
     | 
    
         
            +
                    Usage:
         
     | 
| 
      
 9 
     | 
    
         
            +
                      completion [options]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    Options:
         
     | 
| 
      
 12 
     | 
    
         
            +
                      -h, --help                       Display help
         
     | 
| 
      
 13 
     | 
    
         
            +
                      -s, --shell SHELL                Specify shell for completion script [default: bash]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  DOCOPT
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def parse(argv)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Docopt.docopt(DOCUMENTATION, { argv: argv })
         
     | 
| 
      
 18 
     | 
    
         
            +
                  rescue Docopt::Exit => e
         
     | 
| 
      
 19 
     | 
    
         
            +
                    VanagonLogger.error e.message
         
     | 
| 
      
 20 
     | 
    
         
            +
                    exit 1
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def run(options)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    shell = options[:shell].downcase.strip
         
     | 
| 
      
 25 
     | 
    
         
            +
                    completion_file = File.expand_path(File.join('..', '..', '..', '..', 'extras', 'completions', "vanagon.#{shell}"), __FILE__)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                    if File.exist?(completion_file)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      VanagonLogger.warn completion_file
         
     | 
| 
      
 29 
     | 
    
         
            +
                      exit 0
         
     | 
| 
      
 30 
     | 
    
         
            +
                    else
         
     | 
| 
      
 31 
     | 
    
         
            +
                      VanagonLogger.error "Could not find completion file for '#{shell}': No such file #{completion_file}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                      exit 1
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def options_translate(docopt_options)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    translations = {
         
     | 
| 
      
 38 
     | 
    
         
            +
                      '--shell' => :shell,
         
     | 
| 
      
 39 
     | 
    
         
            +
                    }
         
     | 
| 
      
 40 
     | 
    
         
            +
                    return docopt_options.map { |k, v| [translations[k], v] }.to_h
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     |