vagrant-nitrousio 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.env-example +4 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/Gemfile +7 -0
- data/LICENSE +10 -0
- data/README.md +97 -0
- data/Rakefile +26 -0
- data/example_box/README.md +13 -0
- data/example_box/metadata.json +3 -0
- data/lib/vagrant-nitrousio/action/add_pub_key.rb +44 -0
- data/lib/vagrant-nitrousio/action/connect_nitrousio.rb +31 -0
- data/lib/vagrant-nitrousio/action/create.rb +79 -0
- data/lib/vagrant-nitrousio/action/is_created.rb +18 -0
- data/lib/vagrant-nitrousio/action/is_running.rb +18 -0
- data/lib/vagrant-nitrousio/action/is_stopped.rb +18 -0
- data/lib/vagrant-nitrousio/action/is_terminated.rb +18 -0
- data/lib/vagrant-nitrousio/action/message_already_created.rb +16 -0
- data/lib/vagrant-nitrousio/action/message_already_terminated.rb +16 -0
- data/lib/vagrant-nitrousio/action/message_cannot_halt.rb +16 -0
- data/lib/vagrant-nitrousio/action/message_cannot_terminate.rb +16 -0
- data/lib/vagrant-nitrousio/action/message_not_created.rb +16 -0
- data/lib/vagrant-nitrousio/action/message_not_running.rb +16 -0
- data/lib/vagrant-nitrousio/action/message_provisioning_not_yet_supported.rb +16 -0
- data/lib/vagrant-nitrousio/action/read_ssh_info.rb +60 -0
- data/lib/vagrant-nitrousio/action/read_state.rb +36 -0
- data/lib/vagrant-nitrousio/action/remove_machine_id.rb +19 -0
- data/lib/vagrant-nitrousio/action/start.rb +31 -0
- data/lib/vagrant-nitrousio/action/stop.rb +31 -0
- data/lib/vagrant-nitrousio/action/sync_folders.rb +57 -0
- data/lib/vagrant-nitrousio/action/terminate.rb +34 -0
- data/lib/vagrant-nitrousio/action/timed_provision.rb +21 -0
- data/lib/vagrant-nitrousio/action/warn_networks.rb +19 -0
- data/lib/vagrant-nitrousio/action.rb +166 -0
- data/lib/vagrant-nitrousio/client.rb +57 -0
- data/lib/vagrant-nitrousio/config.rb +94 -0
- data/lib/vagrant-nitrousio/errors.rb +55 -0
- data/lib/vagrant-nitrousio/plugin.rb +73 -0
- data/lib/vagrant-nitrousio/provider.rb +50 -0
- data/lib/vagrant-nitrousio/util/env.rb +12 -0
- data/lib/vagrant-nitrousio/util/timer.rb +17 -0
- data/lib/vagrant-nitrousio/version.rb +5 -0
- data/lib/vagrant-nitrousio.rb +18 -0
- data/locales/en.yml +139 -0
- data/nitrousio.box +0 -0
- data/sample/cookbooks/test/recipes/default.rb +1 -0
- data/sample/provision.sh +3 -0
- data/sample/puppet/manifests/site.pp +2 -0
- data/sample/puppet/modules/baseconfig/files/bashrc +107 -0
- data/sample/puppet/modules/baseconfig/manifests/init.pp +21 -0
- data/sample/test/hello.txt +1 -0
- data/spec/vagrant-nitrousio/action/create_spec.rb +36 -0
- data/spec/vagrant-nitrousio/action/read_ssh_info_spec.rb +59 -0
- data/spec/vagrant-nitrousio/action/read_state_spec.rb +46 -0
- data/spec/vagrant-nitrousio/action/start_spec.rb +32 -0
- data/spec/vagrant-nitrousio/action/stop_spec.rb +20 -0
- data/spec/vagrant-nitrousio/action/terminate_spec.rb +20 -0
- data/spec/vagrant-nitrousio/client_spec.rb +209 -0
- data/spec/vagrant-nitrousio/config_spec.rb +48 -0
- data/vagrant-nitrousio.gemspec +59 -0
- metadata +193 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module NitrousIO
|
3
|
+
module Util
|
4
|
+
class Timer
|
5
|
+
# A basic utility method that times the execution of the given
|
6
|
+
# block and returns it.
|
7
|
+
def self.time
|
8
|
+
start_time = Time.now.to_f
|
9
|
+
yield
|
10
|
+
end_time = Time.now.to_f
|
11
|
+
|
12
|
+
end_time - start_time
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'vagrant-nitrousio/plugin'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module NitrousIO
|
7
|
+
lib_path = Pathname.new(File.expand_path('../vagrant-nitrousio', __FILE__))
|
8
|
+
autoload :Action, lib_path.join('action')
|
9
|
+
autoload :Errors, lib_path.join('errors')
|
10
|
+
|
11
|
+
# This returns the path to the source of this plugin.
|
12
|
+
#
|
13
|
+
# @return [Pathname]
|
14
|
+
def self.source_root
|
15
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
en:
|
2
|
+
vagrant_nitrousio:
|
3
|
+
already_created: |-
|
4
|
+
The box already exists on Nitrous.IO.
|
5
|
+
already_terminated: |-
|
6
|
+
The box is already terminated on Nitrous.IO.
|
7
|
+
cannot_terminate: |-
|
8
|
+
The box needs to be in either "running" or "stopped" state to be terminatable.
|
9
|
+
cannot_halt: |-
|
10
|
+
Failed to halt the box.
|
11
|
+
launching_box: |-
|
12
|
+
Launching a box on Nitrous.IO with the following settings...
|
13
|
+
not_created: |-
|
14
|
+
Your box on Nitrous.IO is not created. Please create your box by running `vagrant up` first.
|
15
|
+
not_running: |-
|
16
|
+
Your box on Nitrous.IO is not running. Please start your box by running `vagrant up` first.
|
17
|
+
box_ready: |-
|
18
|
+
Box is is ready for use
|
19
|
+
rsync_folder: |-
|
20
|
+
Rsyncing folder: %{hostpath} => %{guestpath}
|
21
|
+
pulling_image: |-
|
22
|
+
Pulling the base image to your Nitrous.IO host (this will take some time)...
|
23
|
+
creating_box: |-
|
24
|
+
Creating the box on Nitrous.IO...
|
25
|
+
starting_box: |-
|
26
|
+
Starting the box on Nitrous.IO...
|
27
|
+
stopped: |-
|
28
|
+
Your box on Nitrous.IO is stopped.
|
29
|
+
stopping_box: |-
|
30
|
+
Stopping the box on Nitrous.IO...
|
31
|
+
terminated: |-
|
32
|
+
Your box on Nitrous.IO is terminated.
|
33
|
+
terminating_box: |-
|
34
|
+
Terminating the box on Nitrous.IO...
|
35
|
+
warn_networks: |-
|
36
|
+
Warning! The Nitrous.IO provider doesn't support any of the Vagrant
|
37
|
+
high-level network configurations (`config.vm.network`). They
|
38
|
+
will be silently ignored.
|
39
|
+
adding_pub_key: |-
|
40
|
+
Adding public key to the box.
|
41
|
+
|
42
|
+
config:
|
43
|
+
username_required: |-
|
44
|
+
A username must be specified via "username"
|
45
|
+
|
46
|
+
password_required: |-
|
47
|
+
A password must be specified via "password"
|
48
|
+
|
49
|
+
host_required: |-
|
50
|
+
A host slug must be specified via "host"
|
51
|
+
|
52
|
+
private_key_missing: |-
|
53
|
+
The specified SSH private key could not be found
|
54
|
+
|
55
|
+
ssh_private_key_path_required: |-
|
56
|
+
A path to an ssh private key must be specified via "ssh_private_key_path"
|
57
|
+
|
58
|
+
errors:
|
59
|
+
api_error: |-
|
60
|
+
An unexpected error occurred:
|
61
|
+
|
62
|
+
%{message}
|
63
|
+
|
64
|
+
authentication_failed_error: |-
|
65
|
+
Failed to authenticate with Nitrous.IO. Check the reason shown below:
|
66
|
+
|
67
|
+
%{description}
|
68
|
+
|
69
|
+
host_not_found_error: |-
|
70
|
+
Host does not exist.
|
71
|
+
|
72
|
+
Make sure you use host's slug instead of the name.
|
73
|
+
|
74
|
+
image_not_found_error: |-
|
75
|
+
Image does not exist.
|
76
|
+
|
77
|
+
Specify a valid Docker repository.
|
78
|
+
|
79
|
+
box_not_yet_started_error: |-
|
80
|
+
Box is not yet started.
|
81
|
+
|
82
|
+
box_not_yet_stopped_error: |-
|
83
|
+
Box is not yet stopped.
|
84
|
+
|
85
|
+
box_not_yet_terminated_error: |-
|
86
|
+
Box is not yet terminated.
|
87
|
+
|
88
|
+
rsync_error: |-
|
89
|
+
There was an error when attemping to rsync a shared folder.
|
90
|
+
Please inspect the error message below for more info.
|
91
|
+
|
92
|
+
Host path: %{hostpath}
|
93
|
+
Guest path: %{guestpath}
|
94
|
+
Error: %{stderr}
|
95
|
+
|
96
|
+
timeout_error: |-
|
97
|
+
Box creation timed out.
|
98
|
+
|
99
|
+
states:
|
100
|
+
short_not_created: |-
|
101
|
+
not created
|
102
|
+
long_not_created: |-
|
103
|
+
The Nitrous.IO box is not created. Run `vagrant up` to create it.
|
104
|
+
|
105
|
+
short_provisioning: |-
|
106
|
+
provisioning
|
107
|
+
long_provisioning: |-
|
108
|
+
The Nitrous.IO box is being created.
|
109
|
+
|
110
|
+
short_running: |-
|
111
|
+
running
|
112
|
+
long_running: |-
|
113
|
+
The Nitrous.IO box is running. To stop this machine, you can run
|
114
|
+
`vagrant halt`. To destroy the machine, you can run `vagrant destroy`.
|
115
|
+
|
116
|
+
short_starting: |-
|
117
|
+
starting
|
118
|
+
long_starting: |-
|
119
|
+
The Nitrous.IO box is starting.
|
120
|
+
|
121
|
+
short_stopped: |-
|
122
|
+
stopped
|
123
|
+
long_stopped: |-
|
124
|
+
The Nitrous.IO box is stopped. Run `vagrant up` to start it.
|
125
|
+
|
126
|
+
short_stopping: |-
|
127
|
+
stopping
|
128
|
+
long_stopping: |-
|
129
|
+
The Nitrous.IO box is stopping.
|
130
|
+
|
131
|
+
short_terminated: |-
|
132
|
+
terminated
|
133
|
+
long_terminated: |-
|
134
|
+
The Nitrous.IO box is terminated.
|
135
|
+
|
136
|
+
short_terminating: |-
|
137
|
+
terminating
|
138
|
+
long_terminating: |-
|
139
|
+
The Nitrous.IO box is terminating.
|
data/nitrousio.box
ADDED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
log 'Testing 1 2 3!'
|
data/sample/provision.sh
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
# ~/.bashrc: executed by bash(1) for non-login shells.
|
2
|
+
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
3
|
+
# for examples
|
4
|
+
|
5
|
+
# If not running interactively, don't do anything
|
6
|
+
[ -z "$PS1" ] && return
|
7
|
+
|
8
|
+
# don't put duplicate lines or lines starting with space in the history.
|
9
|
+
# See bash(1) for more options
|
10
|
+
HISTCONTROL=ignoreboth
|
11
|
+
|
12
|
+
# append to the history file, don't overwrite it
|
13
|
+
shopt -s histappend
|
14
|
+
|
15
|
+
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
16
|
+
HISTSIZE=50000
|
17
|
+
HISTFILESIZE=50000
|
18
|
+
|
19
|
+
# check the window size after each command and, if necessary,
|
20
|
+
# update the values of LINES and COLUMNS.
|
21
|
+
shopt -s checkwinsize
|
22
|
+
|
23
|
+
# If set, the pattern "**" used in a pathname expansion context will
|
24
|
+
# match all files and zero or more directories and subdirectories.
|
25
|
+
#shopt -s globstar
|
26
|
+
|
27
|
+
# make less more friendly for non-text input files, see lesspipe(1)
|
28
|
+
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
29
|
+
|
30
|
+
# set variable identifying the chroot you work in (used in the prompt below)
|
31
|
+
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
|
32
|
+
debian_chroot=$(cat /etc/debian_chroot)
|
33
|
+
fi
|
34
|
+
|
35
|
+
# set a fancy prompt (non-color, unless we know we "want" color)
|
36
|
+
case "$TERM" in
|
37
|
+
xterm-color) color_prompt=yes;;
|
38
|
+
esac
|
39
|
+
|
40
|
+
# uncomment for a colored prompt, if the terminal has the capability; turned
|
41
|
+
# off by default to not distract the user: the focus in a terminal window
|
42
|
+
# should be on the output of commands, not on the prompt
|
43
|
+
force_color_prompt=yes
|
44
|
+
|
45
|
+
if [ -n "$force_color_prompt" ]; then
|
46
|
+
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
|
47
|
+
# We have color support; assume it's compliant with Ecma-48
|
48
|
+
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
|
49
|
+
# a case would tend to support setf rather than setaf.)
|
50
|
+
color_prompt=yes
|
51
|
+
else
|
52
|
+
color_prompt=
|
53
|
+
fi
|
54
|
+
fi
|
55
|
+
|
56
|
+
if [ "$color_prompt" = yes ]; then
|
57
|
+
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;33m\]\w\[\033[00m\]\$ '
|
58
|
+
else
|
59
|
+
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
|
60
|
+
fi
|
61
|
+
unset color_prompt force_color_prompt
|
62
|
+
|
63
|
+
# If this is an xterm set the title to user@host:dir
|
64
|
+
case "$TERM" in
|
65
|
+
xterm*|rxvt*)
|
66
|
+
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
|
67
|
+
;;
|
68
|
+
*)
|
69
|
+
;;
|
70
|
+
esac
|
71
|
+
|
72
|
+
# enable color support of ls and also add handy aliases
|
73
|
+
if [ -x /usr/bin/dircolors ]; then
|
74
|
+
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
75
|
+
alias ls='ls --color=auto'
|
76
|
+
#alias dir='dir --color=auto'
|
77
|
+
#alias vdir='vdir --color=auto'
|
78
|
+
|
79
|
+
alias grep='grep --color=auto'
|
80
|
+
alias fgrep='fgrep --color=auto'
|
81
|
+
alias egrep='egrep --color=auto'
|
82
|
+
fi
|
83
|
+
|
84
|
+
# some more ls aliases
|
85
|
+
alias ll='ls -alF'
|
86
|
+
alias la='ls -A'
|
87
|
+
alias l='ls -CF'
|
88
|
+
|
89
|
+
# Add an "alert" alias for long running commands. Use like so:
|
90
|
+
# sleep 10; alert
|
91
|
+
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
|
92
|
+
|
93
|
+
# Alias definitions.
|
94
|
+
# You may want to put all your additions into a separate file like
|
95
|
+
# ~/.bash_aliases, instead of adding them here directly.
|
96
|
+
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
|
97
|
+
|
98
|
+
if [ -f ~/.bash_aliases ]; then
|
99
|
+
. ~/.bash_aliases
|
100
|
+
fi
|
101
|
+
|
102
|
+
# enable programmable completion features (you don't need to enable
|
103
|
+
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
|
104
|
+
# sources /etc/bash.bashrc).
|
105
|
+
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
|
106
|
+
. /etc/bash_completion
|
107
|
+
fi
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# == Class: baseconfig
|
2
|
+
#
|
3
|
+
# Performs initial configuration tasks for all Vagrant boxes.
|
4
|
+
#
|
5
|
+
class baseconfig {
|
6
|
+
exec { 'apt-get update':
|
7
|
+
command => '/usr/bin/apt-get update';
|
8
|
+
}
|
9
|
+
|
10
|
+
host { 'hostmachine':
|
11
|
+
ip => '192.168.0.1';
|
12
|
+
}
|
13
|
+
|
14
|
+
file {
|
15
|
+
'/home/vagrant/.bashrc':
|
16
|
+
owner => 'vagrant',
|
17
|
+
group => 'vagrant',
|
18
|
+
mode => '0644',
|
19
|
+
source => 'puppet:///modules/baseconfig/bashrc';
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
Hello
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'vagrant-nitrousio/action/create'
|
2
|
+
|
3
|
+
describe VagrantPlugins::NitrousIO::Action::Create do
|
4
|
+
let(:app) { double 'app', call: nil }
|
5
|
+
let(:machine) { OpenStruct.new id: nil }
|
6
|
+
let(:nitrousio) { double 'connection', request: nil }
|
7
|
+
let(:ui) { double 'ui', info: nil, warn: nil }
|
8
|
+
let(:env) { { nitrousio: nitrousio, machine: machine, ui: ui } }
|
9
|
+
let(:instance) { described_class.new(app, env) }
|
10
|
+
|
11
|
+
describe '#pull_image' do
|
12
|
+
let(:json) { '{"image":{"id":777}}' }
|
13
|
+
let(:response) { double 'response', status: 201, json: json, parsed: JSON.parse(json) }
|
14
|
+
|
15
|
+
it "sets container's id in the environment" do
|
16
|
+
nitrousio.should_receive(:request).with(:post, '/hosts/vagrant-host/images/pull', params: {
|
17
|
+
repository: "foo/bar-image:latest"
|
18
|
+
}).and_return response
|
19
|
+
instance.pull_image(nitrousio, machine, 'vagrant-host', 'foo/bar-image:latest')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#create_container' do
|
24
|
+
let(:json) { '{"container":{"id":777,"state":"running"}}' }
|
25
|
+
let(:response) { double 'response', status: 201, json: json, parsed: JSON.parse(json) }
|
26
|
+
|
27
|
+
it "sets container's id in the environment" do
|
28
|
+
nitrousio.should_receive(:request).with(:post, '/containers', body: {
|
29
|
+
slug: 'sample-box', host: 'vagrant-host', image: 'foo/bar-image:latest',
|
30
|
+
privileged: true
|
31
|
+
}).and_return response
|
32
|
+
instance.create_container(nitrousio, machine, 'vagrant-host', 'foo/bar-image:latest', 'sample-box', true)
|
33
|
+
expect(machine.id).to eq 777
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'vagrant-nitrousio/action/read_ssh_info'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
describe VagrantPlugins::NitrousIO::Action::ReadSSHInfo do
|
6
|
+
let(:app) { double 'app', call: nil }
|
7
|
+
let(:instance) { VagrantPlugins::NitrousIO::Action::ReadSSHInfo.new(app, env) }
|
8
|
+
|
9
|
+
context 'when machine id is nil' do
|
10
|
+
let(:machine) { double 'machine', id: nil }
|
11
|
+
let(:env) { { nitrousio: nil, machine: machine } }
|
12
|
+
|
13
|
+
it 'returns nil' do
|
14
|
+
instance.call(env)
|
15
|
+
expect(env[:machine_ssh_info]).to be_nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when machine id is not nil' do
|
20
|
+
let(:config) { OpenStruct.new(host: 'vagrant-host', ssh_private_key_path: '/home/action/.ssh/id_rsa') }
|
21
|
+
let(:machine) { OpenStruct.new(id: 123, provider_config: config) }
|
22
|
+
let!(:nitrousio) { double 'connection', request: nil }
|
23
|
+
let(:env) { { nitrousio: nitrousio, machine: machine } }
|
24
|
+
|
25
|
+
context 'when request is successful' do
|
26
|
+
before do
|
27
|
+
json = '{"config":{"port":["public:4040:22/tcp","public:5000:5050","public:4040:22/udp"]}}'
|
28
|
+
response = double 'response', status: 200, body: json, parsed: JSON.parse(json)
|
29
|
+
nitrousio.should_receive(:request).with(:get, '/containers/123/config').and_return response
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'makes a get request to /containers/:id/config and returns a hash containing the ssh info' do
|
33
|
+
instance.call(env)
|
34
|
+
expect(env[:machine_ssh_info]).to eq({
|
35
|
+
host: 'vagrant-host.nitrouspro.com',
|
36
|
+
port: '4040',
|
37
|
+
private_key_path: '/home/action/.ssh/id_rsa',
|
38
|
+
username: 'action'
|
39
|
+
})
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when request returns 404' do
|
44
|
+
before do
|
45
|
+
response = double 'response', status: 404
|
46
|
+
error = StandardError.new('request error')
|
47
|
+
error.stub(:response) { response }
|
48
|
+
nitrousio.should_receive(:request).with(:get, '/containers/123/config').and_raise error
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'sets machine id to be nil and returns nil' do
|
52
|
+
instance.call(env)
|
53
|
+
expect(env[:machine].id).to be_nil
|
54
|
+
expect(env[:machine_ssh_info]).to be_nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'vagrant-nitrousio/action/read_state'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
describe VagrantPlugins::NitrousIO::Action::ReadState do
|
5
|
+
let(:app) { double 'app', call: nil }
|
6
|
+
let(:instance) { VagrantPlugins::NitrousIO::Action::ReadState.new(app, env) }
|
7
|
+
|
8
|
+
context 'when machine id is nil' do
|
9
|
+
let(:machine) { double 'machine', id: nil }
|
10
|
+
let(:env) { { nitrousio: nil, machine: machine } }
|
11
|
+
|
12
|
+
it 'sets the machine_state_id to be :not_created' do
|
13
|
+
instance.call(env)
|
14
|
+
expect(env[:machine_state_id]).to eq :not_created
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when machine id is not nil' do
|
19
|
+
let(:machine) { OpenStruct.new(id: 123) }
|
20
|
+
let!(:nitrousio) { double 'connection', request: nil, fetch_box_state: nil }
|
21
|
+
let(:env) { { nitrousio: nitrousio, machine: machine } }
|
22
|
+
|
23
|
+
context 'when request is successful' do
|
24
|
+
before do
|
25
|
+
nitrousio.should_receive(:fetch_box_state).with(123).and_return :running
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'makes a get request to /containers/:id and returns the state' do
|
29
|
+
instance.call(env)
|
30
|
+
expect(env[:machine_state_id]).to eq :running
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when request returns 404' do
|
35
|
+
before do
|
36
|
+
nitrousio.should_receive(:fetch_box_state).with(123).and_return nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'sets machine id to be nil and returns :not_created' do
|
40
|
+
instance.call(env)
|
41
|
+
expect(env[:machine].id).to be_nil
|
42
|
+
expect(env[:machine_state_id]).to eq :not_created
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'vagrant-nitrousio/action/start'
|
2
|
+
|
3
|
+
describe VagrantPlugins::NitrousIO::Action::Start do
|
4
|
+
let(:app) { double 'app', call: nil }
|
5
|
+
let(:provider_config) { OpenStruct.new privileged: false }
|
6
|
+
let(:machine) { OpenStruct.new id: 777, provider_config: provider_config }
|
7
|
+
let(:nitrousio) { double 'connection', request: nil }
|
8
|
+
let(:ui) { double 'ui', info: nil, warn: nil }
|
9
|
+
let(:env) { { nitrousio: nitrousio, machine: machine, ui: ui } }
|
10
|
+
let(:instance) { described_class.new(app, env) }
|
11
|
+
|
12
|
+
describe '#start_container' do
|
13
|
+
let(:json) { '{"container":{"id":777,"state":"running"}}' }
|
14
|
+
let(:response) { double 'response', status: 200, json: json, parsed: JSON.parse(json) }
|
15
|
+
|
16
|
+
it 'runs the request' do
|
17
|
+
nitrousio.should_receive(:request).with(:post, '/containers/777/start', body: {privileged: false}).and_return response
|
18
|
+
instance.call(env)
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with the provider config's privileged flag being set to true" do
|
22
|
+
before do
|
23
|
+
provider_config.privileged = true
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'runs the request' do
|
27
|
+
nitrousio.should_receive(:request).with(:post, '/containers/777/start', body: {privileged: true}).and_return response
|
28
|
+
instance.call(env)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'vagrant-nitrousio/action/stop'
|
2
|
+
|
3
|
+
describe VagrantPlugins::NitrousIO::Action::Stop do
|
4
|
+
let(:app) { double 'app', call: nil }
|
5
|
+
let(:machine) { OpenStruct.new id: 777 }
|
6
|
+
let(:nitrousio) { double 'connection', request: nil }
|
7
|
+
let(:ui) { double 'ui', info: nil, warn: nil }
|
8
|
+
let(:env) { { nitrousio: nitrousio, machine: machine, ui: ui } }
|
9
|
+
let(:instance) { described_class.new(app, env) }
|
10
|
+
|
11
|
+
describe '#stop_container' do
|
12
|
+
let(:json) { '{"container":{"id":777,"state":"stopped"}}' }
|
13
|
+
let(:response) { double 'response', status: 200, json: json, parsed: JSON.parse(json) }
|
14
|
+
|
15
|
+
it 'runs the request' do
|
16
|
+
nitrousio.should_receive(:request).with(:post, '/containers/777/stop').and_return response
|
17
|
+
instance.call(env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'vagrant-nitrousio/action/terminate'
|
2
|
+
|
3
|
+
describe VagrantPlugins::NitrousIO::Action::Terminate do
|
4
|
+
let(:app) { double 'app', call: nil }
|
5
|
+
let(:machine) { OpenStruct.new id: 777 }
|
6
|
+
let(:nitrousio) { double 'connection', request: nil }
|
7
|
+
let(:ui) { double 'ui', info: nil, warn: nil }
|
8
|
+
let(:env) { { nitrousio: nitrousio, machine: machine, ui: ui } }
|
9
|
+
let(:instance) { described_class.new(app, env) }
|
10
|
+
|
11
|
+
describe '#terminate_container' do
|
12
|
+
let(:json) { '{"box":{"id":777,"state":"terminated"}}' }
|
13
|
+
let(:response) { double 'response', status: 200, json: json, parsed: JSON.parse(json) }
|
14
|
+
|
15
|
+
it 'runs the request' do
|
16
|
+
nitrousio.should_receive(:request).with(:delete, '/containers/777').and_return response
|
17
|
+
instance.call(env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|