summary refs log tree commit diff
path: root/pkgs/applications/networking
diff options
context:
space:
mode:
authorJaka Hudoklin <jakahudoklin@gmail.com>2015-02-07 14:56:25 +0000
committerJaka Hudoklin <jakahudoklin@gmail.com>2015-02-07 14:56:25 +0000
commitf85abb041a6bb39986f53aba226cc3229a78f77f (patch)
tree69eaa03f2c060ac9ac71cbc4034d1a3adbd3ab41 /pkgs/applications/networking
parent769fb8a1411bb3979ddc87d300e1ba664ed9a34a (diff)
parent8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978 (diff)
downloadnixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.tar
nixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.tar.gz
nixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.tar.bz2
nixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.tar.lz
nixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.tar.xz
nixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.tar.zst
nixlib-f85abb041a6bb39986f53aba226cc3229a78f77f.zip
Merge pull request #5622 from offlinehacker/panamax
panamax: new package and service
Diffstat (limited to 'pkgs/applications/networking')
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-api23
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-api.lock164
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-ui30
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock217
-rw-r--r--pkgs/applications/networking/cluster/panamax/api.nix75
-rw-r--r--pkgs/applications/networking/cluster/panamax/gemset-api.nix571
-rw-r--r--pkgs/applications/networking/cluster/panamax/gemset-ui.nix760
-rw-r--r--pkgs/applications/networking/cluster/panamax/ui.nix71
8 files changed, 1911 insertions, 0 deletions
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-api b/pkgs/applications/networking/cluster/panamax/Gemfile-api
new file mode 100644
index 000000000000..82085aa6db08
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-api
@@ -0,0 +1,23 @@
+source 'https://rubygems.org'
+
+gem 'rails', '4.1.7'
+gem 'puma', '2.8.2'
+gem 'sqlite3', '1.3.9'
+gem 'faraday_middleware', '0.9.0'
+gem 'docker-api', '1.13.0', require: 'docker'
+gem 'fleet-api', '0.6.0', require: 'fleet'
+gem 'active_model_serializers', '0.9.0'
+gem 'octokit', '3.2.0'
+gem 'kmts', '2.0.1'
+
+group :test, :development do
+  gem 'rspec-rails'
+  gem 'its'
+end
+
+group :test do
+  gem 'coveralls', '0.7.0'
+  gem 'shoulda-matchers', '2.6.1'
+  gem 'database_cleaner', '1.3.0'
+  gem 'webmock', '1.20.0'
+end
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-api.lock b/pkgs/applications/networking/cluster/panamax/Gemfile-api.lock
new file mode 100644
index 000000000000..e0ebe72132be
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-api.lock
@@ -0,0 +1,164 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actionmailer (4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      mail (~> 2.5, >= 2.5.4)
+    actionpack (4.1.7)
+      actionview (= 4.1.7)
+      activesupport (= 4.1.7)
+      rack (~> 1.5.2)
+      rack-test (~> 0.6.2)
+    actionview (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+    active_model_serializers (0.9.0)
+      activemodel (>= 3.2)
+    activemodel (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+    activerecord (4.1.7)
+      activemodel (= 4.1.7)
+      activesupport (= 4.1.7)
+      arel (~> 5.0.0)
+    activesupport (4.1.7)
+      i18n (~> 0.6, >= 0.6.9)
+      json (~> 1.7, >= 1.7.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.1)
+      tzinfo (~> 1.1)
+    addressable (2.3.6)
+    archive-tar-minitar (0.5.2)
+    arel (5.0.1.20140414130214)
+    builder (3.2.2)
+    coveralls (0.7.0)
+      multi_json (~> 1.3)
+      rest-client
+      simplecov (>= 0.7)
+      term-ansicolor
+      thor
+    crack (0.4.2)
+      safe_yaml (~> 1.0.0)
+    database_cleaner (1.3.0)
+    diff-lcs (1.2.5)
+    docile (1.1.5)
+    docker-api (1.13.0)
+      archive-tar-minitar
+      excon (>= 0.37.0)
+      json
+    erubis (2.7.0)
+    excon (0.37.0)
+    faraday (0.8.9)
+      multipart-post (~> 1.2.0)
+    faraday_middleware (0.9.0)
+      faraday (>= 0.7.4, < 0.9)
+    fleet-api (0.6.0)
+      faraday (= 0.8.9)
+      faraday_middleware (= 0.9.0)
+    hike (1.2.3)
+    i18n (0.6.11)
+    its (0.2.0)
+      rspec-core
+    json (1.8.1)
+    kmts (2.0.1)
+    mail (2.6.3)
+      mime-types (>= 1.16, < 3)
+    mime-types (2.4.3)
+    minitest (5.4.3)
+    multi_json (1.10.1)
+    multipart-post (1.2.0)
+    octokit (3.2.0)
+      sawyer (~> 0.5.3)
+    puma (2.8.2)
+      rack (>= 1.1, < 2.0)
+    rack (1.5.2)
+    rack-test (0.6.2)
+      rack (>= 1.0)
+    rails (4.1.7)
+      actionmailer (= 4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      activemodel (= 4.1.7)
+      activerecord (= 4.1.7)
+      activesupport (= 4.1.7)
+      bundler (>= 1.3.0, < 2.0)
+      railties (= 4.1.7)
+      sprockets-rails (~> 2.0)
+    railties (4.1.7)
+      actionpack (= 4.1.7)
+      activesupport (= 4.1.7)
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rake (10.4.0)
+    rest-client (1.6.7)
+      mime-types (>= 1.16)
+    rspec-core (3.1.7)
+      rspec-support (~> 3.1.0)
+    rspec-expectations (3.1.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.1.0)
+    rspec-mocks (3.1.3)
+      rspec-support (~> 3.1.0)
+    rspec-rails (3.1.0)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      railties (>= 3.0)
+      rspec-core (~> 3.1.0)
+      rspec-expectations (~> 3.1.0)
+      rspec-mocks (~> 3.1.0)
+      rspec-support (~> 3.1.0)
+    rspec-support (3.1.2)
+    safe_yaml (1.0.4)
+    sawyer (0.5.4)
+      addressable (~> 2.3.5)
+      faraday (~> 0.8, < 0.10)
+    shoulda-matchers (2.6.1)
+      activesupport (>= 3.0.0)
+    simplecov (0.9.1)
+      docile (~> 1.1.0)
+      multi_json (~> 1.0)
+      simplecov-html (~> 0.8.0)
+    simplecov-html (0.8.0)
+    sprockets (2.12.3)
+      hike (~> 1.2)
+      multi_json (~> 1.0)
+      rack (~> 1.0)
+      tilt (~> 1.1, != 1.3.0)
+    sprockets-rails (2.2.0)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      sprockets (>= 2.8, < 4.0)
+    sqlite3 (1.3.9)
+    term-ansicolor (1.3.0)
+      tins (~> 1.0)
+    thor (0.19.1)
+    thread_safe (0.3.4)
+    tilt (1.4.1)
+    tins (1.3.0)
+    tzinfo (1.2.2)
+      thread_safe (~> 0.1)
+    webmock (1.20.0)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  active_model_serializers (= 0.9.0)
+  coveralls (= 0.7.0)
+  database_cleaner (= 1.3.0)
+  docker-api (= 1.13.0)
+  faraday_middleware (= 0.9.0)
+  fleet-api (= 0.6.0)
+  its
+  kmts (= 2.0.1)
+  octokit (= 3.2.0)
+  puma (= 2.8.2)
+  rails (= 4.1.7)
+  rspec-rails
+  shoulda-matchers (= 2.6.1)
+  sqlite3 (= 1.3.9)
+  webmock (= 1.20.0)
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-ui b/pkgs/applications/networking/cluster/panamax/Gemfile-ui
new file mode 100644
index 000000000000..7efcabfd9e5c
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-ui
@@ -0,0 +1,30 @@
+source 'https://rubygems.org'
+
+gem 'rails', '4.1.7'
+gem 'puma', '2.8.2'
+gem 'sass', '3.3.9'
+gem 'therubyracer', '0.12.1', platforms: :ruby
+gem 'haml', '4.0.5'
+gem 'uglifier', '2.5.1'
+gem 'ctl_base_ui'
+gem 'activeresource', '4.0.0'
+gem 'kramdown', '1.4.0'
+gem 'zeroclipboard-rails'
+
+
+group :test, :development do
+  gem 'rspec-rails', '2.14.2'
+  gem 'capybara', '2.3.0'
+  gem 'teaspoon', '0.8.0'
+  gem 'phantomjs', '1.9.7.1'
+  gem 'dotenv-rails', '0.11.1'
+  gem 'pry'
+  gem 'pry-byebug'
+  gem 'pry-stack_explorer'
+end
+
+group :test do
+  gem 'webmock', '1.18.0'
+  gem 'sinatra', '1.4.5'
+  gem 'coveralls', '0.7.0'
+end
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock b/pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock
new file mode 100644
index 000000000000..67504f41a86f
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock
@@ -0,0 +1,217 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actionmailer (4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      mail (~> 2.5, >= 2.5.4)
+    actionpack (4.1.7)
+      actionview (= 4.1.7)
+      activesupport (= 4.1.7)
+      rack (~> 1.5.2)
+      rack-test (~> 0.6.2)
+    actionview (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+    activemodel (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+    activerecord (4.1.7)
+      activemodel (= 4.1.7)
+      activesupport (= 4.1.7)
+      arel (~> 5.0.0)
+    activeresource (4.0.0)
+      activemodel (~> 4.0)
+      activesupport (~> 4.0)
+      rails-observers (~> 0.1.1)
+    activesupport (4.1.7)
+      i18n (~> 0.6, >= 0.6.9)
+      json (~> 1.7, >= 1.7.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.1)
+      tzinfo (~> 1.1)
+    addressable (2.3.6)
+    arel (5.0.1.20140414130214)
+    binding_of_caller (0.7.2)
+      debug_inspector (>= 0.0.1)
+    builder (3.2.2)
+    byebug (3.5.1)
+      columnize (~> 0.8)
+      debugger-linecache (~> 1.2)
+      slop (~> 3.6)
+    capybara (2.3.0)
+      mime-types (>= 1.16)
+      nokogiri (>= 1.3.3)
+      rack (>= 1.0.0)
+      rack-test (>= 0.5.4)
+      xpath (~> 2.0)
+    coderay (1.1.0)
+    columnize (0.8.9)
+    coveralls (0.7.0)
+      multi_json (~> 1.3)
+      rest-client
+      simplecov (>= 0.7)
+      term-ansicolor
+      thor
+    crack (0.4.2)
+      safe_yaml (~> 1.0.0)
+    ctl_base_ui (0.0.4)
+      haml (~> 4.0)
+      jquery-rails (~> 3.1)
+      jquery-ui-rails (~> 4.2)
+      rails (~> 4.1)
+      sass (~> 3.3)
+    debug_inspector (0.0.2)
+    debugger-linecache (1.2.0)
+    diff-lcs (1.2.5)
+    docile (1.1.5)
+    dotenv (0.11.1)
+      dotenv-deployment (~> 0.0.2)
+    dotenv-deployment (0.0.2)
+    dotenv-rails (0.11.1)
+      dotenv (= 0.11.1)
+    erubis (2.7.0)
+    execjs (2.2.1)
+    haml (4.0.5)
+      tilt
+    hike (1.2.3)
+    i18n (0.6.11)
+    jquery-rails (3.1.2)
+      railties (>= 3.0, < 5.0)
+      thor (>= 0.14, < 2.0)
+    jquery-ui-rails (4.2.1)
+      railties (>= 3.2.16)
+    json (1.8.1)
+    kramdown (1.4.0)
+    libv8 (3.16.14.7)
+    mail (2.6.3)
+      mime-types (>= 1.16, < 3)
+    method_source (0.8.2)
+    mime-types (2.4.3)
+    mini_portile (0.6.0)
+    minitest (5.4.3)
+    multi_json (1.10.1)
+    nokogiri (1.6.2.1)
+      mini_portile (= 0.6.0)
+    phantomjs (1.9.7.1)
+    pry (0.10.1)
+      coderay (~> 1.1.0)
+      method_source (~> 0.8.1)
+      slop (~> 3.4)
+    pry-byebug (2.0.0)
+      byebug (~> 3.4)
+      pry (~> 0.10)
+    pry-stack_explorer (0.4.9.1)
+      binding_of_caller (>= 0.7)
+      pry (>= 0.9.11)
+    puma (2.8.2)
+      rack (>= 1.1, < 2.0)
+    rack (1.5.2)
+    rack-protection (1.5.3)
+      rack
+    rack-test (0.6.2)
+      rack (>= 1.0)
+    rails (4.1.7)
+      actionmailer (= 4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      activemodel (= 4.1.7)
+      activerecord (= 4.1.7)
+      activesupport (= 4.1.7)
+      bundler (>= 1.3.0, < 2.0)
+      railties (= 4.1.7)
+      sprockets-rails (~> 2.0)
+    rails-observers (0.1.2)
+      activemodel (~> 4.0)
+    railties (4.1.7)
+      actionpack (= 4.1.7)
+      activesupport (= 4.1.7)
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rake (10.4.1)
+    ref (1.0.5)
+    rest-client (1.6.7)
+      mime-types (>= 1.16)
+    rspec-core (2.14.8)
+    rspec-expectations (2.14.5)
+      diff-lcs (>= 1.1.3, < 2.0)
+    rspec-mocks (2.14.6)
+    rspec-rails (2.14.2)
+      actionpack (>= 3.0)
+      activemodel (>= 3.0)
+      activesupport (>= 3.0)
+      railties (>= 3.0)
+      rspec-core (~> 2.14.0)
+      rspec-expectations (~> 2.14.0)
+      rspec-mocks (~> 2.14.0)
+    safe_yaml (1.0.3)
+    sass (3.3.9)
+    simplecov (0.9.1)
+      docile (~> 1.1.0)
+      multi_json (~> 1.0)
+      simplecov-html (~> 0.8.0)
+    simplecov-html (0.8.0)
+    sinatra (1.4.5)
+      rack (~> 1.4)
+      rack-protection (~> 1.4)
+      tilt (~> 1.3, >= 1.3.4)
+    slop (3.6.0)
+    sprockets (2.12.3)
+      hike (~> 1.2)
+      multi_json (~> 1.0)
+      rack (~> 1.0)
+      tilt (~> 1.1, != 1.3.0)
+    sprockets-rails (2.2.2)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      sprockets (>= 2.8, < 4.0)
+    teaspoon (0.8.0)
+      railties (>= 3.2.5, < 5)
+    term-ansicolor (1.3.0)
+      tins (~> 1.0)
+    therubyracer (0.12.1)
+      libv8 (~> 3.16.14.0)
+      ref
+    thor (0.19.1)
+    thread_safe (0.3.4)
+    tilt (1.4.1)
+    tins (1.1.0)
+    tzinfo (1.2.2)
+      thread_safe (~> 0.1)
+    uglifier (2.5.1)
+      execjs (>= 0.3.0)
+      json (>= 1.8.0)
+    webmock (1.18.0)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+    xpath (2.0.0)
+      nokogiri (~> 1.3)
+    zeroclipboard-rails (0.1.0)
+      railties (>= 3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  activeresource (= 4.0.0)
+  capybara (= 2.3.0)
+  coveralls (= 0.7.0)
+  ctl_base_ui
+  dotenv-rails (= 0.11.1)
+  haml (= 4.0.5)
+  kramdown (= 1.4.0)
+  phantomjs (= 1.9.7.1)
+  pry
+  pry-byebug
+  pry-stack_explorer
+  puma (= 2.8.2)
+  rails (= 4.1.7)
+  rspec-rails (= 2.14.2)
+  sass (= 3.3.9)
+  sinatra (= 1.4.5)
+  teaspoon (= 0.8.0)
+  therubyracer (= 0.12.1)
+  uglifier (= 2.5.1)
+  webmock (= 1.18.0)
+  zeroclipboard-rails
diff --git a/pkgs/applications/networking/cluster/panamax/api.nix b/pkgs/applications/networking/cluster/panamax/api.nix
new file mode 100644
index 000000000000..415392627ea3
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/api.nix
@@ -0,0 +1,75 @@
+{ stdenv, buildEnv, fetchgit, fetchurl, makeWrapper, bundlerEnv, bundler_HEAD
+, ruby, libxslt, libxml2, sqlite, openssl, cacert, docker
+, dataDir ? "/var/lib/panamax-api" }:
+
+with stdenv.lib;
+
+let
+  database_yml = builtins.toFile "database.yml" ''
+    production:
+      adapter: sqlite3
+      database: <%= ENV["PANAMAX_DATABASE_PATH"] || "${dataDir}/db/mnt/db.sqlite3" %>
+      timeout: 5000
+  '';
+  env = bundlerEnv {
+    name = "panamax-api-gems";
+    inherit ruby;
+    gemset = ./gemset-api.nix;
+    gemfile = ./Gemfile-api;
+    lockfile = ./Gemfile-api.lock;
+  };
+  bundler = bundler_HEAD.override { inherit ruby; };
+in stdenv.mkDerivation rec {
+  name = "panamax-api-${version}";
+  version = "0.2.11";
+
+  src = fetchgit {
+    rev = "refs/tags/v${version}";
+    url = "git://github.com/CenturyLinkLabs/panamax-api";
+    sha256 = "01sz7jibn1rqfga85pr4p8wk6jfldzfaxj1726vs6znmcwhfkcgj";
+  };
+
+  buildInputs = [ makeWrapper sqlite openssl env.ruby bundler ];
+
+  setSourceRoot = ''
+    mkdir -p $out/share
+    cp -R panamax-api $out/share/panamax-api
+    export sourceRoot="$out/share/panamax-api"
+  '';
+
+  postPatch = ''
+    find . -type f -exec sed -e 's|/usr/bin/docker|${docker}/bin/docker|g' -i "{}" \;
+  '';
+
+  configurePhase = ''
+    export HOME=$PWD
+    export GEM_HOME=${env}/${env.ruby.gemPath}
+    export RAILS_ENV=production
+
+    ln -sf ${database_yml} config/database.yml
+  '';
+
+  installPhase = ''
+    rm -rf log tmp
+    mv ./db ./_db
+    ln -sf ${dataDir}/{db,state/log,state/tmp} .
+
+    mkdir -p $out/bin
+    makeWrapper bin/bundle "$out/bin/bundle" \
+      --run "cd $out/share/panamax-api" \
+      --prefix "PATH" : "$out/share/panamax-api/bin:${env.ruby}/bin:$PATH" \
+      --prefix "HOME" : "$out/share/panamax-api" \
+      --prefix "GEM_HOME" : "${env}/${env.ruby.gemPath}" \
+      --prefix "OPENSSL_X509_CERT_FILE" : "${cacert}/etc/ca-bundle.crt" \
+      --prefix "SSL_CERT_FILE" : "${cacert}/etc/ca-bundle.crt" \
+      --prefix "GEM_PATH" : "$out/share/panamax-api:${bundler}/${env.ruby.gemPath}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/CenturyLinkLabs/panamax-api;
+    description = "The API behind The Panamax UI";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matejc offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/networking/cluster/panamax/gemset-api.nix b/pkgs/applications/networking/cluster/panamax/gemset-api.nix
new file mode 100644
index 000000000000..62cf5dcd3afd
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/gemset-api.nix
@@ -0,0 +1,571 @@
+let
+  pkgs = import <nixpkgs> { };
+in {
+  "actionmailer" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0qjv5akjbpgd4cx518k522mssvc3y3nki65hi6fj5nbzi7a6rwq5";
+    };
+    dependencies = [
+      "actionpack"
+      "actionview"
+      "mail"
+    ];
+  };
+  "actionpack" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "07y1ny00h69xklq260smyl5md052f617gqrzkyw5sxafs5z25zax";
+    };
+    dependencies = [
+      "actionview"
+      "activesupport"
+      "rack"
+      "rack-test"
+    ];
+  };
+  "actionview" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "06sp37gfpn2jn7j6vlpp1y6vfi5kig60vyvixrjhyz0g4vgm13ax";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+      "erubis"
+    ];
+  };
+  "active_model_serializers" = {
+    version = "0.9.0";
+    source = {
+      type = "gem";
+      sha256 = "1ws3gx3wwlm17w7k0agwzmcmww6627lvqaqm828lzm3g1xqilkkl";
+    };
+    dependencies = [
+      "activemodel"
+    ];
+  };
+  "activemodel" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0rlqzz25l7vsphgkilg80kmk20d9h357awi27ax6zzb9klkqh0jr";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+    ];
+  };
+  "activerecord" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0j4r0m32mjbwmz9gs8brln35jzr1cn7h585ggj0w0f1ai4hjsby5";
+    };
+    dependencies = [
+      "activemodel"
+      "activesupport"
+      "arel"
+    ];
+  };
+  "activesupport" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "13i3mz66d5kp5y39gjwmcfqv0wb6mxm5k1nnz40wvd38dsf7n3bs";
+    };
+    dependencies = [
+      "i18n"
+      "json"
+      "minitest"
+      "thread_safe"
+      "tzinfo"
+    ];
+  };
+  "addressable" = {
+    version = "2.3.6";
+    source = {
+      type = "gem";
+      sha256 = "137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8";
+    };
+  };
+  "archive-tar-minitar" = {
+    version = "0.5.2";
+    source = {
+      type = "gem";
+      sha256 = "1j666713r3cc3wb0042x0wcmq2v11vwwy5pcaayy5f0lnd26iqig";
+    };
+  };
+  "arel" = {
+    version = "5.0.1.20140414130214";
+    source = {
+      type = "gem";
+      sha256 = "0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9";
+    };
+  };
+  "builder" = {
+    version = "3.2.2";
+    source = {
+      type = "gem";
+      sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
+    };
+  };
+  "coveralls" = {
+    version = "0.7.0";
+    source = {
+      type = "gem";
+      sha256 = "0sz30d7b83qqsj3i0fr691w05d62wj7x3afh0ryjkqkis3fq94j4";
+    };
+    dependencies = [
+      "multi_json"
+      "rest-client"
+      "simplecov"
+      "term-ansicolor"
+      "thor"
+    ];
+  };
+  "crack" = {
+    version = "0.4.2";
+    source = {
+      type = "gem";
+      sha256 = "1il94m92sz32nw5i6hdq14f1a2c3s9hza9zn6l95fvqhabq38k7a";
+    };
+    dependencies = [
+      "safe_yaml"
+    ];
+  };
+  "database_cleaner" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "19w25yda684pg29bggq26wy4lpyjvzscwg2hx3hmmmpysiwfnxgn";
+    };
+  };
+  "diff-lcs" = {
+    version = "1.2.5";
+    source = {
+      type = "gem";
+      sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
+    };
+  };
+  "docile" = {
+    version = "1.1.5";
+    source = {
+      type = "gem";
+      sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
+    };
+  };
+  "docker-api" = {
+    version = "1.13.0";
+    source = {
+      type = "gem";
+      sha256 = "1rara27gn7lxaf12dqkx8s1clssg10jndfcy4wz2fv6ms1i1lnp6";
+    };
+    dependencies = [
+      "archive-tar-minitar"
+      "excon"
+      "json"
+    ];
+  };
+  "erubis" = {
+    version = "2.7.0";
+    source = {
+      type = "gem";
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+    };
+  };
+  "excon" = {
+    version = "0.37.0";
+    source = {
+      type = "gem";
+      sha256 = "05x7asmsq5m419n1lhzk9bic02gwng4cqmrcqsfnd6kmkwm8csv2";
+    };
+  };
+  "faraday" = {
+    version = "0.8.9";
+    source = {
+      type = "gem";
+      sha256 = "17d79fsgx0xwh0mfxyz5pbr435qlw79phlfvifc546w2axdkp718";
+    };
+    dependencies = [
+      "multipart-post"
+    ];
+  };
+  "faraday_middleware" = {
+    version = "0.9.0";
+    source = {
+      type = "gem";
+      sha256 = "1kwvi2sdxd6j764a7q5iir73dw2v6816zx3l8cgfv0wr2m47icq2";
+    };
+    dependencies = [
+      "faraday"
+    ];
+  };
+  "fleet-api" = {
+    version = "0.6.0";
+    source = {
+      type = "gem";
+      sha256 = "0136mzc0fxp6mzh38n6xbg87cw9g9vq1nrlr3ylazbflvmlxgan6";
+    };
+    dependencies = [
+      "faraday"
+      "faraday_middleware"
+    ];
+  };
+  "hike" = {
+    version = "1.2.3";
+    source = {
+      type = "gem";
+      sha256 = "0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm";
+    };
+  };
+  "i18n" = {
+    version = "0.6.11";
+    source = {
+      type = "gem";
+      sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk";
+    };
+  };
+  "its" = {
+    version = "0.2.0";
+    source = {
+      type = "gem";
+      sha256 = "0rxwds9ipqp48mzqcaxzmfcqhawazg0zlhc1avv3i2cmm3np1z8g";
+    };
+    dependencies = [
+      "rspec-core"
+    ];
+  };
+  "json" = {
+    version = "1.8.1";
+    source = {
+      type = "gem";
+      sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn";
+    };
+  };
+  "kmts" = {
+    version = "2.0.1";
+    source = {
+      type = "gem";
+      sha256 = "1wk680q443lg35a25am6i8xawf16iqg5xnq1m8xd2gib4dsy1d8v";
+    };
+  };
+  "mail" = {
+    version = "2.6.3";
+    source = {
+      type = "gem";
+      sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "mime-types" = {
+    version = "2.4.3";
+    source = {
+      type = "gem";
+      sha256 = "16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq";
+    };
+  };
+  "minitest" = {
+    version = "5.4.3";
+    source = {
+      type = "gem";
+      sha256 = "1ws2cphg9jh45nrvs43s2ww5r14nb026bwlbwwpi0jz6qsqm86x4";
+    };
+  };
+  "multi_json" = {
+    version = "1.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
+    };
+  };
+  "multipart-post" = {
+    version = "1.2.0";
+    source = {
+      type = "gem";
+      sha256 = "12p7lnmc52di1r4h73h6xrpppplzyyhani9p7wm8l4kgf1hnmwnc";
+    };
+  };
+  "octokit" = {
+    version = "3.2.0";
+    source = {
+      type = "gem";
+      sha256 = "07ll3x1hv72zssb4hkdw56xg3xk6x4fch4yf38zljvbh388r11ng";
+    };
+    dependencies = [
+      "sawyer"
+    ];
+  };
+  "puma" = {
+    version = "2.8.2";
+    source = {
+      type = "gem";
+      sha256 = "1l57fmf8vyxfjv7ab5znq0k339cym5ghnm5xxfvd1simjp73db0k";
+    };
+    dependencies = [
+      "rack"
+    ];
+    buildInputs = [ pkgs.openssl ];
+  };
+  "rack" = {
+    version = "1.5.2";
+    source = {
+      type = "gem";
+      sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6";
+    };
+  };
+  "rack-test" = {
+    version = "0.6.2";
+    source = {
+      type = "gem";
+      sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
+    };
+    dependencies = [
+      "rack"
+    ];
+  };
+  "rails" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "059mpljplmhfz8rr4hk40q67fllcpsy809m4mwwbkm8qwif2z5r0";
+    };
+    dependencies = [
+      "actionmailer"
+      "actionpack"
+      "actionview"
+      "activemodel"
+      "activerecord"
+      "activesupport"
+      "railties"
+      "sprockets-rails"
+    ];
+  };
+  "railties" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "1n08h0rgj0aq5lvslnih6lvqz9wadpz6nnb25i4qhp37fhhyz9yz";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "rake"
+      "thor"
+    ];
+  };
+  "rake" = {
+    version = "10.4.0";
+    source = {
+      type = "gem";
+      sha256 = "0a10xzqc1lh6gjkajkslr0n40wjrniyiyzxkp9m5fc8wf7b74zw8";
+    };
+  };
+  "rest-client" = {
+    version = "1.6.7";
+    source = {
+      type = "gem";
+      sha256 = "0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "rspec-core" = {
+    version = "3.1.7";
+    source = {
+      type = "gem";
+      sha256 = "01bawvln663gffljwzpq3mrpa061cghjbvfbq15jvhmip3csxqc9";
+    };
+    dependencies = [
+      "rspec-support"
+    ];
+  };
+  "rspec-expectations" = {
+    version = "3.1.2";
+    source = {
+      type = "gem";
+      sha256 = "0m8d36wng1lpbcs54zhg1rxh63rgj345k3p0h0c06lgknz339nzh";
+    };
+    dependencies = [
+      "diff-lcs"
+      "rspec-support"
+    ];
+  };
+  "rspec-mocks" = {
+    version = "3.1.3";
+    source = {
+      type = "gem";
+      sha256 = "0gxk5w3klia4zsnp0svxck43xxwwfdqvhr3srv6p30f3m5q6rmzr";
+    };
+    dependencies = [
+      "rspec-support"
+    ];
+  };
+  "rspec-rails" = {
+    version = "3.1.0";
+    source = {
+      type = "gem";
+      sha256 = "1b1in3n1dc1bpf9wb3p3b2ynq05iacmr48jxzc73lj4g44ksh3wq";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "railties"
+      "rspec-core"
+      "rspec-expectations"
+      "rspec-mocks"
+      "rspec-support"
+    ];
+  };
+  "rspec-support" = {
+    version = "3.1.2";
+    source = {
+      type = "gem";
+      sha256 = "14y6v9r9lrh91ry9r79h85v0f3y9ja25w42nv5z9n0bipfcwhprb";
+    };
+  };
+  "safe_yaml" = {
+    version = "1.0.4";
+    source = {
+      type = "gem";
+      sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
+    };
+  };
+  "sawyer" = {
+    version = "0.5.4";
+    source = {
+      type = "gem";
+      sha256 = "01kl4zpf0gaacnkra5nikrzfpwj8f10hsvgyzm7z2s1mz4iipx2v";
+    };
+    dependencies = [
+      "addressable"
+      "faraday"
+    ];
+  };
+  "shoulda-matchers" = {
+    version = "2.6.1";
+    source = {
+      type = "gem";
+      sha256 = "1p3jhvd4dsj6d7nbmvnqhqhpmb8pnr05pi7jv9ajwqcys8140mc1";
+    };
+    dependencies = [
+      "activesupport"
+    ];
+  };
+  "simplecov" = {
+    version = "0.9.1";
+    source = {
+      type = "gem";
+      sha256 = "06hylxlalaxxldpbaqa54gc52wxdff0fixdvjyzr6i4ygxwzr7yf";
+    };
+    dependencies = [
+      "docile"
+      "multi_json"
+      "simplecov-html"
+    ];
+  };
+  "simplecov-html" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "0jhn3jql73x7hsr00wwv984iyrcg0xhf64s90zaqv2f26blkqfb9";
+    };
+  };
+  "sprockets" = {
+    version = "2.12.3";
+    source = {
+      type = "gem";
+      sha256 = "1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2";
+    };
+    dependencies = [
+      "hike"
+      "multi_json"
+      "rack"
+      "tilt"
+    ];
+  };
+  "sprockets-rails" = {
+    version = "2.2.0";
+    source = {
+      type = "gem";
+      sha256 = "042fxqskvaa0wn9kpy02nv6p7sa355py9pi58zw96l30170sd3hl";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "sprockets"
+    ];
+  };
+  "sqlite3" = {
+    version = "1.3.9";
+    source = {
+      type = "gem";
+      sha256 = "07m6a6flmyyi0rkg0j7x1a9861zngwjnximfh95cli2zzd57914r";
+    };
+  };
+  "term-ansicolor" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b";
+    };
+    dependencies = [
+      "tins"
+    ];
+  };
+  "thor" = {
+    version = "0.19.1";
+    source = {
+      type = "gem";
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+    };
+  };
+  "thread_safe" = {
+    version = "0.3.4";
+    source = {
+      type = "gem";
+      sha256 = "1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n";
+    };
+  };
+  "tilt" = {
+    version = "1.4.1";
+    source = {
+      type = "gem";
+      sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir";
+    };
+  };
+  "tins" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "1yxa5kyp9mw4w866wlg7c32ingzqxnzh3ir9yf06pwpkmq3mrbdi";
+    };
+  };
+  "tzinfo" = {
+    version = "1.2.2";
+    source = {
+      type = "gem";
+      sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
+    };
+    dependencies = [
+      "thread_safe"
+    ];
+  };
+  "webmock" = {
+    version = "1.20.0";
+    source = {
+      type = "gem";
+      sha256 = "0bl5v0xzcj24lx7xpsnywv3liqnqb5lfxysmmfb2fgi0n8586i6m";
+    };
+    dependencies = [
+      "addressable"
+      "crack"
+    ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/panamax/gemset-ui.nix b/pkgs/applications/networking/cluster/panamax/gemset-ui.nix
new file mode 100644
index 000000000000..3793a2502158
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/gemset-ui.nix
@@ -0,0 +1,760 @@
+let
+  pkgs = import <nixpkgs> { };
+in {
+  "actionmailer" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0qjv5akjbpgd4cx518k522mssvc3y3nki65hi6fj5nbzi7a6rwq5";
+    };
+    dependencies = [
+      "actionpack"
+      "actionview"
+      "mail"
+    ];
+  };
+  "actionpack" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "07y1ny00h69xklq260smyl5md052f617gqrzkyw5sxafs5z25zax";
+    };
+    dependencies = [
+      "actionview"
+      "activesupport"
+      "rack"
+      "rack-test"
+    ];
+  };
+  "actionview" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "06sp37gfpn2jn7j6vlpp1y6vfi5kig60vyvixrjhyz0g4vgm13ax";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+      "erubis"
+    ];
+  };
+  "activemodel" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0rlqzz25l7vsphgkilg80kmk20d9h357awi27ax6zzb9klkqh0jr";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+    ];
+  };
+  "activerecord" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0j4r0m32mjbwmz9gs8brln35jzr1cn7h585ggj0w0f1ai4hjsby5";
+    };
+    dependencies = [
+      "activemodel"
+      "activesupport"
+      "arel"
+    ];
+  };
+  "activeresource" = {
+    version = "4.0.0";
+    source = {
+      type = "gem";
+      sha256 = "0fc5igjijyjzsl9q5kybkdzhc92zv8wsv0ifb0y90i632jx6d4jq";
+    };
+    dependencies = [
+      "activemodel"
+      "activesupport"
+      "rails-observers"
+    ];
+  };
+  "activesupport" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "13i3mz66d5kp5y39gjwmcfqv0wb6mxm5k1nnz40wvd38dsf7n3bs";
+    };
+    dependencies = [
+      "i18n"
+      "json"
+      "minitest"
+      "thread_safe"
+      "tzinfo"
+    ];
+  };
+  "addressable" = {
+    version = "2.3.6";
+    source = {
+      type = "gem";
+      sha256 = "137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8";
+    };
+  };
+  "arel" = {
+    version = "5.0.1.20140414130214";
+    source = {
+      type = "gem";
+      sha256 = "0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9";
+    };
+  };
+  "binding_of_caller" = {
+    version = "0.7.2";
+    source = {
+      type = "gem";
+      sha256 = "15jg6dkaq2nzcd602d7ppqbdxw3aji961942w93crs6qw4n6h9yk";
+    };
+    dependencies = [
+      "debug_inspector"
+    ];
+  };
+  "builder" = {
+    version = "3.2.2";
+    source = {
+      type = "gem";
+      sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
+    };
+  };
+  "byebug" = {
+    version = "3.5.1";
+    source = {
+      type = "gem";
+      sha256 = "0ldc2r0b316rrn2fgdgiznskj9gb0q9n60243laq7nqw9na8wdan";
+    };
+    dependencies = [
+      "columnize"
+      "debugger-linecache"
+      "slop"
+    ];
+  };
+  "capybara" = {
+    version = "2.3.0";
+    source = {
+      type = "gem";
+      sha256 = "12x24zsn3y7sigmz45ijd9bkq7l14r2a00ay6k9mdgrbncbr3ins";
+    };
+    dependencies = [
+      "mime-types"
+      "nokogiri"
+      "rack"
+      "rack-test"
+      "xpath"
+    ];
+  };
+  "coderay" = {
+    version = "1.1.0";
+    source = {
+      type = "gem";
+      sha256 = "059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s";
+    };
+  };
+  "columnize" = {
+    version = "0.8.9";
+    source = {
+      type = "gem";
+      sha256 = "1f3azq8pvdaaclljanwhab78hdw40k908ma2cwk59qzj4hvf7mip";
+    };
+  };
+  "coveralls" = {
+    version = "0.7.0";
+    source = {
+      type = "gem";
+      sha256 = "0sz30d7b83qqsj3i0fr691w05d62wj7x3afh0ryjkqkis3fq94j4";
+    };
+    dependencies = [
+      "multi_json"
+      "rest-client"
+      "simplecov"
+      "term-ansicolor"
+      "thor"
+    ];
+  };
+  "crack" = {
+    version = "0.4.2";
+    source = {
+      type = "gem";
+      sha256 = "1il94m92sz32nw5i6hdq14f1a2c3s9hza9zn6l95fvqhabq38k7a";
+    };
+    dependencies = [
+      "safe_yaml"
+    ];
+  };
+  "ctl_base_ui" = {
+    version = "0.0.4";
+    source = {
+      type = "gem";
+      sha256 = "0h0dbl0mf6cql7yp10jywv22rn0iy2188phdxvr2ladwwn2vxf5d";
+    };
+    dependencies = [
+      "haml"
+      "jquery-rails"
+      "jquery-ui-rails"
+      "rails"
+      "sass"
+    ];
+  };
+  "debug_inspector" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "109761g00dbrw5q0dfnbqg8blfm699z4jj70l4zrgf9mzn7ii50m";
+    };
+  };
+  "debugger-linecache" = {
+    version = "1.2.0";
+    source = {
+      type = "gem";
+      sha256 = "0iwyx190fd5vfwj1gzr8pg3m374kqqix4g4fc4qw29sp54d3fpdz";
+    };
+  };
+  "diff-lcs" = {
+    version = "1.2.5";
+    source = {
+      type = "gem";
+      sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
+    };
+  };
+  "docile" = {
+    version = "1.1.5";
+    source = {
+      type = "gem";
+      sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
+    };
+  };
+  "dotenv" = {
+    version = "0.11.1";
+    source = {
+      type = "gem";
+      sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m";
+    };
+    dependencies = [
+      "dotenv-deployment"
+    ];
+  };
+  "dotenv-deployment" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "1ad66jq9a09qq1js8wsyil97018s7y6x0vzji0dy34gh65sbjz8c";
+    };
+  };
+  "dotenv-rails" = {
+    version = "0.11.1";
+    source = {
+      type = "gem";
+      sha256 = "0r6hif0i1lipbi7mkxx7wa5clsn65n6wyd9jry262cx396lsfrqy";
+    };
+    dependencies = [
+      "dotenv"
+    ];
+  };
+  "erubis" = {
+    version = "2.7.0";
+    source = {
+      type = "gem";
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+    };
+  };
+  "execjs" = {
+    version = "2.2.1";
+    source = {
+      type = "gem";
+      sha256 = "1s41g9qwq0h4452q4gp934lnkzfkxh4wrg8fd4bcynba86bf3j8b";
+    };
+  };
+  "haml" = {
+    version = "4.0.5";
+    source = {
+      type = "gem";
+      sha256 = "1xmzb0k5q271090crzmv7dbw8ss4289bzxklrc0fhw6pw3kcvc85";
+    };
+    dependencies = [
+      "tilt"
+    ];
+  };
+  "hike" = {
+    version = "1.2.3";
+    source = {
+      type = "gem";
+      sha256 = "0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm";
+    };
+  };
+  "i18n" = {
+    version = "0.6.11";
+    source = {
+      type = "gem";
+      sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk";
+    };
+  };
+  "jquery-rails" = {
+    version = "3.1.2";
+    source = {
+      type = "gem";
+      sha256 = "0h5a565i3l2mbd221m6mz9d1nr53pz19i9qxv08qr1dv0yx2pr3y";
+    };
+    dependencies = [
+      "railties"
+      "thor"
+    ];
+  };
+  "jquery-ui-rails" = {
+    version = "4.2.1";
+    source = {
+      type = "gem";
+      sha256 = "1garrnqwh35acj2pp4sp6fpm2g881h23y644lzbic2qmcrq9wd2v";
+    };
+    dependencies = [
+      "railties"
+    ];
+  };
+  "json" = {
+    version = "1.8.1";
+    source = {
+      type = "gem";
+      sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn";
+    };
+  };
+  "kramdown" = {
+    version = "1.4.0";
+    source = {
+      type = "gem";
+      sha256 = "001vy0ymiwbvkdbb9wpqmswv6imliv7xim00gq6rlk0chnbiaq80";
+    };
+  };
+  "libv8" = {
+    version = "3.16.14.7";
+    source = {
+      type = "gem";
+      sha256 = "0dv5q5n5nf6b8h3fybwmsr3vkj70w4g1jpf6661j3hsv9vp0g4qq";
+    };
+  };
+  "mail" = {
+    version = "2.6.3";
+    source = {
+      type = "gem";
+      sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "method_source" = {
+    version = "0.8.2";
+    source = {
+      type = "gem";
+      sha256 = "1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2";
+    };
+  };
+  "mime-types" = {
+    version = "2.4.3";
+    source = {
+      type = "gem";
+      sha256 = "16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq";
+    };
+  };
+  "mini_portile" = {
+    version = "0.6.0";
+    source = {
+      type = "gem";
+      sha256 = "09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn";
+    };
+  };
+  "minitest" = {
+    version = "5.4.3";
+    source = {
+      type = "gem";
+      sha256 = "1ws2cphg9jh45nrvs43s2ww5r14nb026bwlbwwpi0jz6qsqm86x4";
+    };
+  };
+  "multi_json" = {
+    version = "1.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
+    };
+  };
+  "nokogiri" = {
+    version = "1.6.2.1";
+    source = {
+      type = "gem";
+      sha256 = "0dj8ajm9hlfpa71qz1xn5prqy5qdi32ll74qh8ssjwknp1a35cnz";
+    };
+    dependencies = [
+      "mini_portile"
+    ];
+  };
+  "phantomjs" = {
+    version = "1.9.7.1";
+    source = {
+      type = "gem";
+      sha256 = "14as0yzwbzvshbp1f8igjxcdxc5vbjgh0jhdvy393il084inlrl7";
+    };
+  };
+  "pry" = {
+    version = "0.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1j0r5fm0wvdwzbh6d6apnp7c0n150hpm9zxpm5xvcgfqr36jaj8z";
+    };
+    dependencies = [
+      "coderay"
+      "method_source"
+      "slop"
+    ];
+  };
+  "pry-byebug" = {
+    version = "2.0.0";
+    source = {
+      type = "gem";
+      sha256 = "17b6720ci9345wkzj369ydyj6hdlg2krd26zivpd4dvaijszzgzq";
+    };
+    dependencies = [
+      "byebug"
+      "pry"
+    ];
+  };
+  "pry-stack_explorer" = {
+    version = "0.4.9.1";
+    source = {
+      type = "gem";
+      sha256 = "1828jqcfdr9nk86n15ky199vf33cfz51wkpv6kx230g0dsh9r85z";
+    };
+    dependencies = [
+      "binding_of_caller"
+      "pry"
+    ];
+  };
+  "puma" = {
+    version = "2.8.2";
+    source = {
+      type = "gem";
+      sha256 = "1l57fmf8vyxfjv7ab5znq0k339cym5ghnm5xxfvd1simjp73db0k";
+    };
+    dependencies = [
+      "rack"
+    ];
+    buildInputs = [ pkgs.openssl ];
+  };
+  "rack" = {
+    version = "1.5.2";
+    source = {
+      type = "gem";
+      sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6";
+    };
+  };
+  "rack-protection" = {
+    version = "1.5.3";
+    source = {
+      type = "gem";
+      sha256 = "0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r";
+    };
+    dependencies = [
+      "rack"
+    ];
+  };
+  "rack-test" = {
+    version = "0.6.2";
+    source = {
+      type = "gem";
+      sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
+    };
+    dependencies = [
+      "rack"
+    ];
+  };
+  "rails" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "059mpljplmhfz8rr4hk40q67fllcpsy809m4mwwbkm8qwif2z5r0";
+    };
+    dependencies = [
+      "actionmailer"
+      "actionpack"
+      "actionview"
+      "activemodel"
+      "activerecord"
+      "activesupport"
+      "railties"
+      "sprockets-rails"
+    ];
+  };
+  "rails-observers" = {
+    version = "0.1.2";
+    source = {
+      type = "gem";
+      sha256 = "1lsw19jzmvipvrfy2z04hi7r29dvkfc43h43vs67x6lsj9rxwwcy";
+    };
+    dependencies = [
+      "activemodel"
+    ];
+  };
+  "railties" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "1n08h0rgj0aq5lvslnih6lvqz9wadpz6nnb25i4qhp37fhhyz9yz";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "rake"
+      "thor"
+    ];
+  };
+  "rake" = {
+    version = "10.4.1";
+    source = {
+      type = "gem";
+      sha256 = "1446zzdpwpvwkd0zk19b2smmmvdiarh4b26cdbcw4fy5p67wxkw2";
+    };
+  };
+  "ref" = {
+    version = "1.0.5";
+    source = {
+      type = "gem";
+      sha256 = "19qgpsfszwc2sfh6wixgky5agn831qq8ap854i1jqqhy1zsci3la";
+    };
+  };
+  "rest-client" = {
+    version = "1.6.7";
+    source = {
+      type = "gem";
+      sha256 = "0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "rspec-core" = {
+    version = "2.14.8";
+    source = {
+      type = "gem";
+      sha256 = "0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc";
+    };
+  };
+  "rspec-expectations" = {
+    version = "2.14.5";
+    source = {
+      type = "gem";
+      sha256 = "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9";
+    };
+    dependencies = [
+      "diff-lcs"
+    ];
+  };
+  "rspec-mocks" = {
+    version = "2.14.6";
+    source = {
+      type = "gem";
+      sha256 = "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30";
+    };
+  };
+  "rspec-rails" = {
+    version = "2.14.2";
+    source = {
+      type = "gem";
+      sha256 = "1j9nbha6p12kwy9c5g3lw541xg20yzk95lzgmsq7kvngiqz88p57";
+    };
+    dependencies = [
+      "actionpack"
+      "activemodel"
+      "activesupport"
+      "railties"
+      "rspec-core"
+      "rspec-expectations"
+      "rspec-mocks"
+    ];
+  };
+  "safe_yaml" = {
+    version = "1.0.3";
+    source = {
+      type = "gem";
+      sha256 = "063bykyk40s3rhy1dxfbvl69s179n1iny418z4wqjbvhrmjn18wl";
+    };
+  };
+  "sass" = {
+    version = "3.3.9";
+    source = {
+      type = "gem";
+      sha256 = "0k19vj73283i907z4wfkc9qdska2b19z7ps6lcr5s4qzwis1zkmz";
+    };
+  };
+  "simplecov" = {
+    version = "0.9.1";
+    source = {
+      type = "gem";
+      sha256 = "06hylxlalaxxldpbaqa54gc52wxdff0fixdvjyzr6i4ygxwzr7yf";
+    };
+    dependencies = [
+      "docile"
+      "multi_json"
+      "simplecov-html"
+    ];
+  };
+  "simplecov-html" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "0jhn3jql73x7hsr00wwv984iyrcg0xhf64s90zaqv2f26blkqfb9";
+    };
+  };
+  "sinatra" = {
+    version = "1.4.5";
+    source = {
+      type = "gem";
+      sha256 = "0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s";
+    };
+    dependencies = [
+      "rack"
+      "rack-protection"
+      "tilt"
+    ];
+  };
+  "slop" = {
+    version = "3.6.0";
+    source = {
+      type = "gem";
+      sha256 = "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n";
+    };
+  };
+  "sprockets" = {
+    version = "2.12.3";
+    source = {
+      type = "gem";
+      sha256 = "1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2";
+    };
+    dependencies = [
+      "hike"
+      "multi_json"
+      "rack"
+      "tilt"
+    ];
+  };
+  "sprockets-rails" = {
+    version = "2.2.2";
+    source = {
+      type = "gem";
+      sha256 = "192d4vfl1gjz6phli6sqk98364x6v4jkpl5imajvimsinvgyv81b";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "sprockets"
+    ];
+  };
+  "teaspoon" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "1j3brbm9cv5km9d9wzb6q2b3cvc6m254z48h7h77z1w6c5wr0p3z";
+    };
+    dependencies = [
+      "railties"
+    ];
+  };
+  "term-ansicolor" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b";
+    };
+    dependencies = [
+      "tins"
+    ];
+  };
+  "therubyracer" = {
+    version = "0.12.1";
+    source = {
+      type = "gem";
+      sha256 = "106fqimqyaalh7p6czbl5m2j69z8gv7cm10mjb8bbb2p2vlmqmi6";
+    };
+    dependencies = [
+      "libv8"
+      "ref"
+    ];
+  };
+  "thor" = {
+    version = "0.19.1";
+    source = {
+      type = "gem";
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+    };
+  };
+  "thread_safe" = {
+    version = "0.3.4";
+    source = {
+      type = "gem";
+      sha256 = "1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n";
+    };
+  };
+  "tilt" = {
+    version = "1.4.1";
+    source = {
+      type = "gem";
+      sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir";
+    };
+  };
+  "tins" = {
+    version = "1.1.0";
+    source = {
+      type = "gem";
+      sha256 = "0jddc40lw8lzn421p6pjvvs7b37qyd8jgsl5nrq16rc46wgx2r2r";
+    };
+  };
+  "tzinfo" = {
+    version = "1.2.2";
+    source = {
+      type = "gem";
+      sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
+    };
+    dependencies = [
+      "thread_safe"
+    ];
+  };
+  "uglifier" = {
+    version = "2.5.1";
+    source = {
+      type = "gem";
+      sha256 = "1vihq309mzv9a2i0s8v4imrn1g2kj8z0vr88q3i5b657c4kxzfp0";
+    };
+    dependencies = [
+      "execjs"
+      "json"
+    ];
+  };
+  "webmock" = {
+    version = "1.18.0";
+    source = {
+      type = "gem";
+      sha256 = "1r21a4x7dljb3cqxp7w7mdq5a1xvw9kn6m3gldsldsfza5b4hq03";
+    };
+    dependencies = [
+      "addressable"
+      "crack"
+    ];
+  };
+  "xpath" = {
+    version = "2.0.0";
+    source = {
+      type = "gem";
+      sha256 = "04kcr127l34p7221z13blyl0dvh0bmxwx326j72idayri36a394w";
+    };
+    dependencies = [
+      "nokogiri"
+    ];
+  };
+  "zeroclipboard-rails" = {
+    version = "0.1.0";
+    source = {
+      type = "gem";
+      sha256 = "00ixal0a0mxaqsyzp06c6zz4qdwqydy1qv4n7hbyqfhbmsdalcfc";
+    };
+    dependencies = [
+      "railties"
+    ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/panamax/ui.nix b/pkgs/applications/networking/cluster/panamax/ui.nix
new file mode 100644
index 000000000000..4d4e4fe964d2
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/ui.nix
@@ -0,0 +1,71 @@
+{ stdenv, fetchgit, fetchurl, makeWrapper, bundlerEnv, bundler_HEAD
+, ruby, rubygemsFun, openssl, sqlite, dataDir ? "/var/lib/panamax-ui"}:
+
+with stdenv.lib;
+
+let
+  env = bundlerEnv {
+    name = "panamax-api-gems";
+    inherit ruby;
+    gemset = ./gemset-ui.nix;
+    gemfile = ./Gemfile-ui;
+    lockfile = ./Gemfile-ui.lock;
+  };
+  bundler = bundler_HEAD.override { inherit ruby; };
+in
+stdenv.mkDerivation rec {
+  name = "panamax-ui-${version}";
+  version = "0.2.11";
+
+  src = fetchgit {
+    rev = "refs/tags/v${version}";
+    url = "git://github.com/CenturyLinkLabs/panamax-ui";
+    sha256 = "17j5ac8fzp377bzg7f239jdcc9j0c63bkx0ill5nl10i3h05z7jh";
+  };
+
+  buildInputs = [ makeWrapper env.ruby openssl sqlite bundler ];
+
+  setSourceRoot = ''
+    mkdir -p $out/share
+    cp -R panamax-ui $out/share/panamax-ui
+    export sourceRoot="$out/share/panamax-ui"
+  '';
+
+  postPatch = ''
+    find . -type f -iname "*.haml" -exec sed -e 's|CoreOS Journal|NixOS Journal|g' -i "{}" \;
+    find . -type f -iname "*.haml" -exec sed -e 's|CoreOS Local|NixOS Local|g' -i "{}" \;
+    find . -type f -iname "*.haml" -exec sed -e 's|CoreOS Host|NixOS Host|g' -i "{}" \;
+    sed -e 's|CoreOS Local|NixOS Local|g' -i "spec/features/manage_application_spec.rb"
+  '';
+
+  configurePhase = ''
+    export HOME=$PWD
+    export GEM_HOME=${env}/${env.ruby.gemPath}
+  '';
+
+  buildPhase = ''
+    rm -f ./bin/*
+    bundle exec rake rails:update:bin
+  '';
+
+  installPhase = ''
+    rm -rf log tmp db
+    ln -sf ${dataDir}/{db,state/log,state/tmp} .
+
+    mkdir -p $out/bin
+    makeWrapper bin/bundle "$out/bin/bundle" \
+      --run "cd $out/share/panamax-ui" \
+      --prefix "PATH" : "$out/share/panamax-ui/bin:${env.ruby}/bin:$PATH" \
+      --prefix "HOME" : "$out/share/panamax-ui" \
+      --prefix "GEM_HOME" : "${env}/${env.ruby.gemPath}" \
+      --prefix "GEM_PATH" : "$out/share/panamax-ui:${bundler}/${env.ruby.gemPath}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/CenturyLinkLabs/panamax-ui;
+    description = "The Web GUI for Panamax";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matejc offline ];
+    platforms = platforms.linux;
+  };
+}