vagrant-gpii-ci 0.0.1 → 0.0.3
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 +44 -62
- data/gpii-ci.yml.template +44 -0
- data/lib/vagrant-gpii-ci/action/build_vagrantfile.rb +160 -0
- data/lib/vagrant-gpii-ci/action/init_environment.rb +7 -8
- data/lib/vagrant-gpii-ci/action/update_hosts.rb +138 -0
- data/lib/vagrant-gpii-ci/action.rb +8 -101
- data/lib/vagrant-gpii-ci/command/base.rb +1 -1
- data/lib/vagrant-gpii-ci/command/ci.rb +66 -0
- data/lib/vagrant-gpii-ci/command/init.rb +2 -2
- data/lib/vagrant-gpii-ci/command/test.rb +55 -47
- data/lib/vagrant-gpii-ci/plugin.rb +19 -16
- data/lib/vagrant-gpii-ci/version.rb +2 -2
- data/lib/vagrant-gpii-ci.rb +16 -3
- data/samples/gpii-linux/.gpii-ci.yml +25 -0
- data/samples/gpii-nexus/.gpii-ci.yml +26 -0
- data/samples/gpii-universal/.gpii-ci.yml +32 -0
- data/samples/gpii-windows/.gpii-ci.yml +33 -0
- data/spec/spec_helper.rb +4 -1
- data/spec/vagrant/gpiici_spec.rb +12 -0
- data/{vagrant-cienv.gemspec → vagrant-gpiici.gemspec} +3 -3
- metadata +15 -32
- data/lib/envs/default.json +0 -20
- data/lib/envs/linux-desktop.json +0 -22
- data/lib/envs/production.yml +0 -33
- data/lib/provisioning/base-playbook.yml +0 -16
- data/lib/provisioning/couchdb-playbook.yml +0 -11
- data/lib/provisioning/couchdb-requirements.yml +0 -5
- data/lib/provisioning/couchdb-vagrant-vars.yml +0 -1
- data/lib/provisioning/gpii-linux-playbook.yml +0 -11
- data/lib/provisioning/gpii-linux-requirements.yml +0 -6
- data/lib/provisioning/gpii-linux-vagrant-vars.yml +0 -23
- data/lib/provisioning/nodejs-playbook.yml +0 -12
- data/lib/provisioning/nodejs-requirements.yml +0 -7
- data/lib/provisioning/nodejs-vagrant-vars.yml +0 -11
- data/lib/provisioning/preferences-playbook.yml +0 -13
- data/lib/provisioning/preferences-requirements.yml +0 -9
- data/lib/provisioning/preferences-vagrant-vars.yml +0 -5
- data/lib/vagrant-gpii-ci/config/config_folders.rb +0 -17
- data/lib/vagrant-gpii-ci/config/config_network.rb +0 -69
- data/lib/vagrant-gpii-ci/config/config_provider.rb +0 -40
- data/lib/vagrant-gpii-ci/config/config_provision.rb +0 -50
- data/qi.yml.template +0 -56
- data/samples/gpii-linux/.qi.yml +0 -22
- data/samples/gpii-linux-production/.qi.yml +0 -41
- data/samples/gpii-nexus/.qi.yml +0 -24
- data/samples/gpii-universal/.qi.yml +0 -27
- data/spec/vagrant/cienv_spec.rb +0 -11
@@ -1,23 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
nodejs_npm_packages:
|
4
|
-
- "@development-tools"
|
5
|
-
- orca
|
6
|
-
- glib2-devel
|
7
|
-
- PackageKit-glib-devel
|
8
|
-
- json-glib-devel
|
9
|
-
- libXrandr-devel
|
10
|
-
- libXrender-devel
|
11
|
-
- libX11-devel
|
12
|
-
- xorg-x11-proto-devel
|
13
|
-
- alsa-lib-devel
|
14
|
-
- tuxguitar
|
15
|
-
nodejs_app_name: "{{ app_name | default('application') }}"
|
16
|
-
#nodejs_version: "{{ software_stack_version }}"
|
17
|
-
nodejs_app_commands: "{{ setup | default([]) }}"
|
18
|
-
#nodejs_app_start_script: "{{ app_start_script }}"
|
19
|
-
#nodejs_app_tcp_port: "{{ app_tcp_port }}"
|
20
|
-
#nodejs_app_git_clone: false
|
21
|
-
nodejs_app_git_repo: "{{ git_repository | default(false) }}"
|
22
|
-
nodejs_app_git_branch: "{{ git_branch | default('master') }}"
|
23
|
-
nodejs_app_install_dir: "{{ folder['dest'] }}"
|
@@ -1,11 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
nodejs_app_name: "{{ app_name | default('application') }}"
|
4
|
-
#nodejs_version: "{{ software_stack_version }}"
|
5
|
-
nodejs_app_commands: "{{ setup | default([]) }}"
|
6
|
-
#nodejs_app_start_script: "{{ app_start_script }}"
|
7
|
-
#nodejs_app_tcp_port: "{{ app_tcp_port }}"
|
8
|
-
#nodejs_app_git_clone: false
|
9
|
-
nodejs_app_git_repo: "{{ git_repository | default(false) }}"
|
10
|
-
nodejs_app_git_branch: "{{ git_branch | default('master') }}"
|
11
|
-
nodejs_app_install_dir: "{{ folder['dest'] }}"
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# -*- mode: ruby -*-
|
2
|
-
# vi: set ft=ruby :
|
3
|
-
|
4
|
-
def config_folders(instance, vm_id, apps, vagrant_ci_path)
|
5
|
-
|
6
|
-
instance.vm.synced_folder ".", "/vagrant" # Always needed by the provisioning
|
7
|
-
instance.vm.synced_folder vagrant_ci_path + "/provisioning", "/provisioning" # Always needed by the provisioning
|
8
|
-
|
9
|
-
# Share folder if the "src" variable is set
|
10
|
-
apps.each do |config|
|
11
|
-
if config["run_in"] == vm_id and config["folder"] and config["folder"]["src"] then
|
12
|
-
instance.vm.synced_folder config["folder"]["src"], config["folder"]["dest"]
|
13
|
-
end
|
14
|
-
end if apps
|
15
|
-
|
16
|
-
end
|
17
|
-
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# -*- mode: ruby -*-
|
2
|
-
# vi: set ft=ruby :
|
3
|
-
|
4
|
-
# Builds a file with the list of pairs IP address: hostname which will be read
|
5
|
-
# by Ansible to setup the hosts file in each VM
|
6
|
-
# Params:
|
7
|
-
# +env_vms+: object with the definition of the virtual machines
|
8
|
-
|
9
|
-
def build_hosts_list(env_vms)
|
10
|
-
|
11
|
-
int_id = 10
|
12
|
-
|
13
|
-
first = true
|
14
|
-
env_vms.each do |vm, vmconfig|
|
15
|
-
vmconfig["networks"].each do |name, netcfg|
|
16
|
-
if netcfg["type"] == "private" then
|
17
|
-
if netcfg['ip'].nil? then
|
18
|
-
netcfg['ip'] = "192.168.50." + int_id.to_s
|
19
|
-
#add the default IP to the environment definnition
|
20
|
-
env_vms[vm]["networks"][name]["ip"] = "192.168.50." + int_id.to_s
|
21
|
-
int_id += 1
|
22
|
-
end
|
23
|
-
if first then
|
24
|
-
$base_vars = "vms_hosts={"
|
25
|
-
$base_vars << "\"#{netcfg['ip']}\":\"#{vm}\""
|
26
|
-
first = false
|
27
|
-
elsif
|
28
|
-
$base_vars << ",\"#{netcfg['ip']}\":\"#{vm}\""
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end if vmconfig["networks"]
|
32
|
-
end
|
33
|
-
$base_vars << "}" if $base_vars
|
34
|
-
end
|
35
|
-
|
36
|
-
# Configure the network section of a virtual machine. You can set the type of
|
37
|
-
# the network, the ip address if needed and a list of forwarded ports.
|
38
|
-
# Params:
|
39
|
-
# +instance+: The instance of the VM to configure
|
40
|
-
# +vm_config+: the definition of the VM. There are to type of networks: private
|
41
|
-
# - where the IP setting is available, and public - where virtualbox will set
|
42
|
-
# the interface as an external NIC.
|
43
|
-
|
44
|
-
def config_network(instance, vm_config)
|
45
|
-
|
46
|
-
vm_config["networks"].each do |network, config|
|
47
|
-
if config["type"] == "private" then
|
48
|
-
if config["ip"] then
|
49
|
-
instance.vm.network :private_network, ip: config["ip"]
|
50
|
-
end
|
51
|
-
elsif config["type"] == "public" then
|
52
|
-
instance.vm.network :public_network
|
53
|
-
end
|
54
|
-
end if vm_config["networks"]
|
55
|
-
|
56
|
-
vm_config["ports"].each do |port, config|
|
57
|
-
|
58
|
-
raise "At least the guest port is needed in 'guest_port' variable" \
|
59
|
-
if config["guest_port"].nil?
|
60
|
-
|
61
|
-
instance.vm.network "forwarded_port",
|
62
|
-
guest: config["guest_port"],
|
63
|
-
host: config["host_port"] || config["guest_port"],
|
64
|
-
protocol: config["protocol"] || "tcp",
|
65
|
-
auto_correct: config["auto_correct"] || true
|
66
|
-
end if vm_config["ports"]
|
67
|
-
|
68
|
-
end
|
69
|
-
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# -*- mode: ruby -*-
|
2
|
-
# vi: set ft=ruby :
|
3
|
-
|
4
|
-
def config_provider(instance, vm_config, global_config)
|
5
|
-
|
6
|
-
if global_config["provider"] == "virtualbox" then
|
7
|
-
|
8
|
-
instance.vm.provider :virtualbox do |vm|
|
9
|
-
|
10
|
-
vm.linked_clone = vm_config["clone"] || global_config["clone"] || false
|
11
|
-
|
12
|
-
vm.customize ["modifyvm", :id, "--memory", vm_config["memory"] || global_config["memory"] ]
|
13
|
-
vm.customize ["modifyvm", :id, "--cpus", vm_config["cpu"] || global_config["cpu"] ]
|
14
|
-
|
15
|
-
if vm_config["gui"] == true then
|
16
|
-
vm.customize ["modifyvm", :id, "--vram", "128"]
|
17
|
-
vm.customize ["modifyvm", :id, "--accelerate3d", "on"]
|
18
|
-
end
|
19
|
-
|
20
|
-
if vm_config["sound"] == true then
|
21
|
-
vm.customize ["modifyvm", :id, "--audio", "null", "--audiocontroller", "ac97"]
|
22
|
-
end
|
23
|
-
|
24
|
-
vm.customize ["modifyvm", :id, "--ioapic", "on"]
|
25
|
-
vm.customize ["setextradata", "global", "GUI/SuppressMessages", "all"]
|
26
|
-
|
27
|
-
vm.gui = vm_config["gui"] || global_config["gui"] || false
|
28
|
-
end
|
29
|
-
|
30
|
-
instance.vm.box = vm_config["box"]
|
31
|
-
|
32
|
-
elsif global_config["provider"] == "libvirt" then
|
33
|
-
raise "Not supported yet"
|
34
|
-
else
|
35
|
-
raise "Provider not defined in global configuration" unless global_config.include?('provider')
|
36
|
-
raise "Provider #{global_config['provider']} not supported"
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# -*- mode: ruby -*-
|
2
|
-
# vi: set ft=ruby :
|
3
|
-
|
4
|
-
require 'yaml'
|
5
|
-
|
6
|
-
def config_provision(instance, vm_config, vm_id, apps, vagrant_ci_path)
|
7
|
-
|
8
|
-
|
9
|
-
apps.each do |config|
|
10
|
-
if config["run_in"] == vm_id then
|
11
|
-
if ARGV[0] == "up" then
|
12
|
-
app = config["app_name"] #app_name
|
13
|
-
stack = config["software_stack"]
|
14
|
-
|
15
|
-
#check if every file is in place
|
16
|
-
raise "File vagrant/provisioning/#{stack}-requirements.yml doesn't exist"\
|
17
|
-
unless File.file?(vagrant_ci_path + "/provisioning/#{stack}-requirements.yml")
|
18
|
-
raise "File vagrant/provisioning/#{stack}-vars.yml doesn't exist"\
|
19
|
-
unless File.file?(vagrant_ci_path + "/provisioning/#{stack}-vagrant-vars.yml")
|
20
|
-
raise "File vagrant/provisioning/#{stack}-playbook.yml doesn't exist"\
|
21
|
-
unless File.file?(vagrant_ci_path + "/provisioning/#{stack}-playbook.yml")
|
22
|
-
raise "File vagrant/provisioning/base-playbook.yml doesn't exist"\
|
23
|
-
unless File.file?(vagrant_ci_path + "/provisioning/base-playbook.yml")
|
24
|
-
|
25
|
-
qi_vars = JSON.dump(YAML::load(config.to_yaml))
|
26
|
-
|
27
|
-
basecmd = "sudo PYTHONUNBUFFERED=1 VM_HOSTNAME=#{vm_id} "\
|
28
|
-
"ansible-playbook --extra-vars='#$base_vars' /provisioning/base-playbook.yml"
|
29
|
-
instance.vm.provision "shell", inline: basecmd
|
30
|
-
|
31
|
-
cmds = \
|
32
|
-
"sudo ansible-galaxy install -fr /provisioning/#{stack}-requirements.yml \n"\
|
33
|
-
"sudo VARS_FILE=#{stack}-vagrant-vars.yml PYTHONUNBUFFERED=1 \\\n"
|
34
|
-
if config["deploy"] then
|
35
|
-
cmds << "ansible-playbook --tags='install,configure,deploy' --extra-vars='#{qi_vars}' /provisioning/#{stack}-playbook.yml"
|
36
|
-
else
|
37
|
-
cmds << "ansible-playbook --tags='install,configure' --extra-vars='#{qi_vars}' /provisioning/#{stack}-playbook.yml"
|
38
|
-
end
|
39
|
-
instance.vm.provision "shell", inline: cmds
|
40
|
-
|
41
|
-
elsif ARGV[0] == "provision" and config["test_cmds"] and config["folder"] and config["folder"]["dest"] then
|
42
|
-
test_cmds = "cd #{config['folder']['dest']} \n"
|
43
|
-
config["test_cmds"].each do |cmd|
|
44
|
-
test_cmds << "DISPLAY=:0 " + cmd + "\n"
|
45
|
-
end unless config["test_cmds"].nil?
|
46
|
-
instance.vm.provision "shell", privileged: false, inline: test_cmds
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end if apps
|
50
|
-
end
|
data/qi.yml.template
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
# This is a template .qi.yml file. It shows the available variables to setup the
|
4
|
-
# applications that will run in the VM enviroment. More examples are available
|
5
|
-
# in the 'samples' directory.
|
6
|
-
|
7
|
-
email: anonymous@testdomain.org
|
8
|
-
# env_runtime variable set the VM enviroment that will be used to run the
|
9
|
-
# applications below. You can see the available environments in 'env' directory
|
10
|
-
env_runtime: linux-desktop
|
11
|
-
|
12
|
-
# The apps variable lists the applications that must be installed. The
|
13
|
-
# properties of each application define the source of the code, the way that are
|
14
|
-
# deployed and how should run
|
15
|
-
|
16
|
-
apps:
|
17
|
-
# The app_name variable set an unique identifier that can be used to create the
|
18
|
-
# instances of the running applications, or to name a directory where all the
|
19
|
-
# files related to the application will be stored.
|
20
|
-
- app_name: name-of-application
|
21
|
-
# the git_repository variable is used to retrieve the source code of the
|
22
|
-
# application if the code is not available through a shared folder. You can also
|
23
|
-
# set a git_branch variable to set the branch,tag,commit or pull request to
|
24
|
-
# retrieve.
|
25
|
-
git_repository: https://github.com/user/repo.git
|
26
|
-
git_branch: pr/1
|
27
|
-
# The software_stack variable set the software applicance that will be installed
|
28
|
-
# in the vm. The avaliable software stacks are in the provisioning directory.
|
29
|
-
software_stack: [nodejs | couchdb]
|
30
|
-
# The deploy variable notifies to the stack that this application will be
|
31
|
-
# launched as a service. Note that the stack must know how to launch this
|
32
|
-
# application.
|
33
|
-
deploy: false
|
34
|
-
# The 'run_in' variable indicates which VM of the environment will contain the
|
35
|
-
# application. To know the name of the VMs see the environment files found in
|
36
|
-
# the 'env' directory.
|
37
|
-
run_in: fedora
|
38
|
-
# The setup variable list the command that will be executed after the
|
39
|
-
# provisioning of the software_stack is finished.
|
40
|
-
setup:
|
41
|
-
- command 1
|
42
|
-
- command 2
|
43
|
-
# The test_cmds variable list the commands that will be executed on every
|
44
|
-
# 'vagrant provision' command. This list usually have the commands that test the
|
45
|
-
# application, so every time you run 'vagrant provision' all these commands
|
46
|
-
# will run the tests of your application.
|
47
|
-
test_cmds:
|
48
|
-
- test command 1
|
49
|
-
- test command 2
|
50
|
-
# The folder variable sets the installation folder of the application. The
|
51
|
-
# 'dest' child variable is the destination folder where the application will be
|
52
|
-
# installed. If you add a 'src' child variable Vagrant will map that path from
|
53
|
-
# the host to the 'dest' path in the VM. Vagrant will create a shared folder
|
54
|
-
# using this information.
|
55
|
-
folder:
|
56
|
-
dest: "/app/{{ app_name }}"
|
data/samples/gpii-linux/.qi.yml
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
email: anonymous@testdomain.org
|
4
|
-
env_runtime: linux-desktop
|
5
|
-
|
6
|
-
apps:
|
7
|
-
- app_name: gpii-linux
|
8
|
-
git_repository: https://github.com/GPII/linux.git
|
9
|
-
software_stack: gpii-linux
|
10
|
-
folder:
|
11
|
-
dest: /app/gpii-linux
|
12
|
-
run_in: fedora
|
13
|
-
deploy: false
|
14
|
-
setup:
|
15
|
-
- npm install
|
16
|
-
- sudo npm install -g grunt-cli node-gyp
|
17
|
-
- grunt --force build
|
18
|
-
test_cmds:
|
19
|
-
- "find -name \\*.sh -exec chmod +x '{}' \\;"
|
20
|
-
- node tests/AcceptanceTests.js
|
21
|
-
- cd tests && bash UnitTests.sh
|
22
|
-
|
@@ -1,41 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
# This sample will spin up two VMs, one server without desktop interface, and
|
4
|
-
# another one with a desktop interface called 'fedora', both are provided by the
|
5
|
-
# file 'production.json'. Then 3 applications will be installed, gpii-linux will
|
6
|
-
# be installed in the 'fedora' VM and couchdb and preferences will be installed
|
7
|
-
# in then 'server' VM. The commands listed in the 'setup' variable will run at
|
8
|
-
# 'vagrant up' time, and the commands listed in the 'test_cmds' variable will be
|
9
|
-
# run using the 'vagrant provision' command.
|
10
|
-
|
11
|
-
email: anonymous@testdomain.org
|
12
|
-
env_runtime: production
|
13
|
-
|
14
|
-
apps:
|
15
|
-
- app_name: gpii-linux
|
16
|
-
git_repository: https://github.com/GPII/linux.git
|
17
|
-
software_stack: gpii-linux
|
18
|
-
folder:
|
19
|
-
dest: /app/gpii-linux
|
20
|
-
run_in: fedora
|
21
|
-
deploy: false
|
22
|
-
setup:
|
23
|
-
- npm install
|
24
|
-
- sudo npm install -g grunt-cli node-gyp
|
25
|
-
- grunt --force build
|
26
|
-
test_cmds:
|
27
|
-
- "find -name \\*.sh -exec chmod +x '{}' \\;"
|
28
|
-
- node tests/AcceptanceTests.js
|
29
|
-
- cd tests && bash UnitTests.sh
|
30
|
-
|
31
|
-
- app_name: couchdb
|
32
|
-
software_stack: couchdb
|
33
|
-
run_in: server
|
34
|
-
deploy: true
|
35
|
-
|
36
|
-
- app_name: preferences
|
37
|
-
software_stack: preferences
|
38
|
-
run_in: server
|
39
|
-
deploy: true
|
40
|
-
folder:
|
41
|
-
dest: "/app/{{ app_name }}"
|
data/samples/gpii-nexus/.qi.yml
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
# This sample fetchs the Pull Request #1 of the GPII/nexus repository, spin up a
|
4
|
-
# fedora VM an run the tests when 'vagrant provision' command is run.
|
5
|
-
|
6
|
-
email: anonymous@testdomain.org
|
7
|
-
env_runtime: linux-desktop
|
8
|
-
|
9
|
-
apps:
|
10
|
-
- app_name: gpii-nexus
|
11
|
-
git_repository: https://github.com/GPII/nexus.git
|
12
|
-
git_branch: pr/1
|
13
|
-
software_stack: nodejs
|
14
|
-
folder:
|
15
|
-
dest: /app/gpii-nexus
|
16
|
-
run_in: fedora
|
17
|
-
deploy: false
|
18
|
-
setup:
|
19
|
-
- npm install
|
20
|
-
- sudo npm install -g grunt-cli node-gyp
|
21
|
-
- grunt --force build
|
22
|
-
test_cmds:
|
23
|
-
- node tests/all-tests.js
|
24
|
-
|
@@ -1,27 +0,0 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
# This sample will spin up one VM with the desktop interface (linux-desktop
|
4
|
-
# environment). Then will deploy an application named 'gpii-universal' which is
|
5
|
-
# a clone of the repository https://github.com/GPII/universal.git. It will exec
|
6
|
-
# the commands listed in the 'setup' variable at 'vagrant up' time, and the
|
7
|
-
# 'test_cmds' commands will be executed with 'vagrant provision'.
|
8
|
-
|
9
|
-
email: anonymous@testdomain.org
|
10
|
-
env_runtime: linux-desktop
|
11
|
-
|
12
|
-
apps:
|
13
|
-
- app_name: gpii-universal
|
14
|
-
git_repository: https://github.com/GPII/universal.git
|
15
|
-
software_stack: nodejs
|
16
|
-
folder:
|
17
|
-
dest: /app/gpii-universal
|
18
|
-
run_in: fedora
|
19
|
-
setup:
|
20
|
-
- npm install
|
21
|
-
- "sudo npm install -g testem"
|
22
|
-
- "git clone {{ git_repository }} /app/gpii-universal/node_modules/universal"
|
23
|
-
test_cmds:
|
24
|
-
- "npm test"
|
25
|
-
- "testem ci --file tests/web/testem_qi.json"
|
26
|
-
- "node tests/ProductionConfigTests.js"
|
27
|
-
|