vagrant-converge 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a1b5109f969da70a8e02fd9ac1a4c9764fd85bf5
4
+ data.tar.gz: b6b081f6f7e461df90fe4acc829f1e55d9ed271c
5
+ SHA512:
6
+ metadata.gz: 0a81fa080e1fea2a6d8c695445cf9dfa1647ad0d329e294cbb12a2679a2db4e680c0222a95de3c54a31a7f6b190453201a9dea97d552536f25dbca1f8242d93f
7
+ data.tar.gz: ac02e2e7a627c2835dd3b1c4f0f590057a63806aee8432de350c8f685a292381e55bd990a2fce65de2904b9ba6eda37020a421ca49952838b808c364abd24880
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :plugins do
4
+ gemspec
5
+ end
6
+
7
+ group :development do
8
+ gem "vagrant", git: "https://github.com/mitchellh/vagrant.git"
9
+ end
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # vagrant-converge
2
+
3
+ Vagrant provisioner plugin for converge
4
+
5
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "vagrant/converge"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,7 @@
1
+
2
+ module VagrantConverge
3
+ require "vagrant-converge/version"
4
+ require 'vagrant-converge/plugin'
5
+ end
6
+
7
+ I18n.load_path << File.expand_path('../templates/locales/en.yml', File.dirname(__FILE__))
@@ -0,0 +1,20 @@
1
+ require_relative "../../../errors"
2
+
3
+ module VagrantConverge
4
+ module Cap
5
+ module Guest
6
+ module Linux
7
+ module ConvergeInstall
8
+ def self.converge_install(machine, install_mode, version)
9
+ if install_mode == :pip
10
+ raise Converge::Errors::ConvergePipInstallIsNotSupported
11
+ else
12
+ machine.communicate.sudo "curl -L -o /usr/bin/converge https://bintray.com/chrisaubuchon/generic/download_file?file_path=converge"
13
+ machine.communicate.sudo "chmod 0755 /usr/bin/converge"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ module VagrantConverge
2
+ module Cap
3
+ module Guest
4
+ module Linux
5
+ module ConvergeInstalled
6
+ def self.converge_installed(machine, version)
7
+ command = 'text -x "$(command -v converge)"'
8
+
9
+ if !version.empty?
10
+ command << "&& converge version | grep 'converge #{version}'"
11
+ end
12
+
13
+ machine.communicate.test command, sudo: false
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,44 @@
1
+ module VagrantConverge
2
+ module Config
3
+ class Guest < Vagrant.plugin("2", :config)
4
+
5
+ attr_accessor :bikeshed
6
+ attr_accessor :params
7
+ attr_accessor :local
8
+ attr_accessor :install
9
+ attr_accessor :install_mode
10
+ attr_accessor :verbose
11
+ attr_accessor :version
12
+
13
+ def initialize
14
+ super
15
+
16
+ @bikeshed = UNSET_VALUE
17
+ @install = UNSET_VALUE
18
+ @install_mode = UNSET_VALUE
19
+ @local = UNSET_VALUE
20
+ @params = UNSET_VALUE
21
+ @verbose = UNSET_VALUE
22
+ @version = UNSET_VALUE
23
+ end
24
+
25
+ def finalize!
26
+ @bikeshed = nil if @bikeshed == UNSET_VALUE
27
+ @install = true if @install == UNSET_VALUE
28
+ @install_mode = :default if @install_mode == UNSET_VALUE
29
+ @local = true if @local == UNSET_VALUE
30
+ @params = nil if @params == UNSET_VALUE
31
+ @verbose = false if @verbose == UNSET_VALUE
32
+ @version = "" if @version == UNSET_VALUE
33
+ end
34
+
35
+ def validate(machine)
36
+ @errors = _detected_errors
37
+
38
+ if !bikeshed
39
+ @errors << I18n.t("vagrant.provisioners.converge.no_bikeshed")
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,19 @@
1
+ module VagrantConverge
2
+ module Errors
3
+ class ConvergeError < Vagrant::Errors::VagrantError
4
+ error_namespace("vagrant.provisioners.converge.errors")
5
+ end
6
+
7
+ class ConvergePipInstallIsNotSupported < ConvergeError
8
+ error_key(:cannot_support_pip_install)
9
+ end
10
+
11
+ class ConvergeNotFoundOnGuest < ConvergeError
12
+ error_key(:converge_not_found_on_guest)
13
+ end
14
+
15
+ class ConvergeCommandFailed < ConvergeError
16
+ error_key(:converge_command_failed)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ require "vagrant"
2
+
3
+ module VagrantConverge
4
+ class Plugin < Vagrant.plugin("2")
5
+ name 'converge'
6
+
7
+ description <<-DESC
8
+ Provides support for provisioning your virtual machines with Converge.
9
+ DESC
10
+
11
+ config(:converge, :provisioner) do
12
+ require_relative "config/guest"
13
+ Config::Guest
14
+ end
15
+
16
+ provisioner(:converge) do
17
+ require_relative "provisioner/guest"
18
+ Provisioner::Guest
19
+ end
20
+
21
+ guest_capability(:linux, :converge_installed) do
22
+ require_relative "cap/guest/linux/converge_installed"
23
+ Cap::Guest::Linux::ConvergeInstalled
24
+ end
25
+
26
+ guest_capability(:linux, :converge_install) do
27
+ require_relative "cap/guest/linux/converge_install"
28
+ Cap::Guest::Linux::ConvergeInstall
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,80 @@
1
+ module VagrantConverge
2
+ module Provisioner
3
+ class Guest < Vagrant.plugin("2", :provisioner)
4
+
5
+ def initialize(machine, config)
6
+ super
7
+
8
+ @logger = Log4r::Logger.new("vagrant::provisioners::converge")
9
+ end
10
+
11
+ def provision
12
+ install_converge
13
+ execute_converge_command prepare_command
14
+ end
15
+
16
+ protected
17
+
18
+ def install_converge
19
+ return if !config.install
20
+
21
+ @logger.info("Checking for Converge installation...")
22
+ if !@machine.guest.capability?(:converge_installed)
23
+ @machine.ui.warn(I18n.t("vagrant.provisioners.converge.cannot_detect"))
24
+ return
25
+ end
26
+
27
+ if config.install && !machine.guest.capability(:converge_installed, config.version)
28
+ @machine.guest.capability(:converge_install, config.install_mode, config.version)
29
+ end
30
+
31
+ @machine.communicate.execute(
32
+ "converge version",
33
+ error_class: VagrantConverge::Errors::ConvergeNotFoundOnGuest,
34
+ error_key: :converge_not_found_on_guest
35
+ )
36
+ end
37
+
38
+ def execute_converge_command(command)
39
+ ui_running_converge_command command
40
+
41
+ result = execute_on_guest(command)
42
+ raise VagrantConverge::Errors::ConvergeCommandFailed if result != 0
43
+ end
44
+
45
+ def execute_on_guest(command)
46
+ @machine.communicate.execute(command, error_check: false) do |type, data|
47
+ if [:stderr, :stdout].include?(type)
48
+ @machine.env.ui.info(data, new_line: false, prefix: false)
49
+ end
50
+ end
51
+ end
52
+
53
+ def ui_running_converge_command(command)
54
+ @machine.ui.detail I18n.t("vagrant.provisioners.converge.running")
55
+ if verbosity_is_enabled?
56
+ @machine.env.ui.detail command
57
+ end
58
+ end
59
+
60
+ def verbosity_is_enabled?
61
+ config.verbose && !config.verbose.to_s.empty?
62
+ end
63
+
64
+ def prepare_command
65
+ shell_command = []
66
+ shell_command << "converge"
67
+ shell_command << "apply"
68
+
69
+ shell_command << "--local" if config.local
70
+ shell_command << "--paramsJSON='" + config.params.to_json + "'" if config.params
71
+
72
+ config.bikeshed.each do |arg|
73
+ shell_command << arg
74
+ end
75
+
76
+ shell_command.flatten.join(' ')
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,3 @@
1
+ module VagrantConverge
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,16 @@
1
+ ---
2
+
3
+ en:
4
+ vagrant:
5
+ provisioners:
6
+ converge:
7
+ cannot_detect: |-
8
+ Vagrant does not support detecting whether Converge is installed
9
+ for the guest OS running in the machine. Vagrant will assume it is
10
+ installed and attempt to continue.
11
+ errors:
12
+ converge_not_found_on_guest: |-
13
+ Converge not found on guest
14
+ converge_command_failed: |-
15
+ Converge execution failed
16
+ running: Running converge...
@@ -0,0 +1,19 @@
1
+ ---
2
+
3
+ en:
4
+ converge:
5
+ provisioners:
6
+ converge:
7
+ errors:
8
+ converge_not_found_on_guest: |-
9
+ Converge not found on guest
10
+ vagrant:
11
+ provisioners:
12
+ converge:
13
+ cannot_detect: |-
14
+ Vagrant does not support detecting whether Converge is installed
15
+ for the guest OS running in the machine. Vagrant will assume it is
16
+ installed and attempt to continue.
17
+ errors:
18
+ converge_not_found_on_guest: |-
19
+ Converge not found on guest
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant-converge/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vagrant-converge"
8
+ spec.version = VagrantConverge::VERSION
9
+ spec.authors = ["Chris Aubuchon"]
10
+ spec.email = ["Chris.Aubuchon@gmail.com"]
11
+
12
+ spec.summary = %q{Vagrant plugin for converge.}
13
+ spec.description = %q{}
14
+ spec.homepage = ""
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ #if spec.respond_to?(:metadata)
19
+ # spec.metadata['allowed_push_host'] = "http'"
20
+ #else
21
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ #end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.12"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-converge
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Aubuchon
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-09-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: ''
42
+ email:
43
+ - Chris.Aubuchon@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - README.md
51
+ - Rakefile
52
+ - bin/console
53
+ - bin/setup
54
+ - lib/vagrant-converge.rb
55
+ - lib/vagrant-converge/cap/guest/linux/converge_install.rb
56
+ - lib/vagrant-converge/cap/guest/linux/converge_installed.rb
57
+ - lib/vagrant-converge/config/guest.rb
58
+ - lib/vagrant-converge/errors.rb
59
+ - lib/vagrant-converge/plugin.rb
60
+ - lib/vagrant-converge/provisioner/guest.rb
61
+ - lib/vagrant-converge/version.rb
62
+ - templates/locales/en.yml
63
+ - templates/locales/en.yml.bak
64
+ - vagrant-converge.gemspec
65
+ homepage: ''
66
+ licenses: []
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.5.1
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: Vagrant plugin for converge.
88
+ test_files: []
89
+ has_rdoc: