]> gitweb.fluxo.info Git - leap/leap_cli.git/commitdiff
add ability to search for nodes using nil values.
authorelijah <elijah@riseup.net>
Sun, 31 Mar 2013 21:14:01 +0000 (14:14 -0700)
committerelijah <elijah@riseup.net>
Sun, 31 Mar 2013 21:14:01 +0000 (14:14 -0700)
18 files changed:
lib/leap_cli/commands/test.rb
lib/leap_cli/config/macros.rb
lib/leap_cli/config/object_list.rb
test/leap_platform/provider_base/common.json
test/leap_platform/provider_base/provider.json
test/leap_platform/provider_base/services/couchdb.json
test/leap_platform/provider_base/services/webapp.json
test/leap_platform/provider_templates/common.json [deleted file]
test/leap_platform/provider_templates/node.json [deleted file]
test/leap_platform/provider_templates/provider.json [deleted file]
test/provider/Leapfile [new file with mode: 0644]
test/provider/nodes/ns1.json
test/provider/nodes/ns2.json
test/provider/nodes/pcouch1.json [new file with mode: 0644]
test/provider/nodes/pweb1.json [new file with mode: 0644]
test/provider/nodes/vpn1.json
test/provider/tags/production.json
test/unit/config_object_list_test.rb

index 3f0feb02d5b083f14623e507c1c7be16eee444a3..79271beb801ee78424c4730360ca025cf4ca1d2c 100644 (file)
@@ -28,17 +28,17 @@ module LeapCli; module Commands
     assert_config! 'provider.ca.client_certificates.unlimited_prefix'
     assert_config! 'provider.ca.client_certificates.limited_prefix'
     template = read_file! Path.find_file(:test_client_openvpn_template)
-    ['production', 'testing', 'local', 'development'].each do |env|
+    ['production', 'testing', 'local', 'development', nil].each do |env|
       vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']['openvpn.allow_limited' => true]
       if vpn_nodes.any?
         generate_test_client_cert(provider.ca.client_certificates.limited_prefix) do |key, cert|
-          write_file! [:test_openvpn_config, env+'_limited'], Util.erb_eval(template, binding)
+          write_file! [:test_openvpn_config, [env, 'limited'].compact.join('_')], Util.erb_eval(template, binding)
         end
       end
       vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']['openvpn.allow_unlimited' => true]
       if vpn_nodes.any?
         generate_test_client_cert(provider.ca.client_certificates.unlimited_prefix) do |key, cert|
-          write_file! [:test_openvpn_config, env+'_unlimited'], Util.erb_eval(template, binding)
+          write_file! [:test_openvpn_config, [env, 'unlimited'].compact.join('_')], Util.erb_eval(template, binding)
         end
       end
     end
index 3c5935660a96bc13d59f6679526bfb1a40190e98..5f90894e8438f06db076fd769e9b4384eb00f4a5 100644 (file)
@@ -21,6 +21,9 @@ module LeapCli; module Config
     #
     # returns a list of nodes that match the same environment
     #
+    # if @node.environment is not set, we return other nodes
+    # where environment is not set.
+    #
     def nodes_like_me
       nodes[:environment => @node.environment]
     end
index 0c7711f0bc8329026c43fe617ebb344826ef690a..0c0da14df9731443c0bfe9d782ca4326dfc4a264 100644 (file)
@@ -40,17 +40,15 @@ module LeapCli
             operator = match_value =~ /^!/ ? :not_equal : :equal
             each do |name, config|
               value = config[field]
-              if !value.nil?
-                if value.is_a? Array
-                  if value.include?(match_value)
-                    results[name] = config
-                  end
-                else
-                  if operator == :equal && value == match_value
-                    results[name] = config
-                  elsif operator == :not_equal && value != match_value
-                    results[name] = config
-                  end
+              if value.is_a? Array
+                if value.include?(match_value)
+                  results[name] = config
+                end
+              else
+                if operator == :equal && value == match_value
+                  results[name] = config
+                elsif operator == :not_equal && value != match_value
+                  results[name] = config
                 end
               end
             end
index f5093a5a7b27996898c7f73108f0544741d098e7..653b9a0fe585a0e0f341a75dd884db3cc2da17e8 100644 (file)
@@ -1,9 +1,11 @@
 {
-  "ip_address": "REQUIRED",
+  "ip_address": null,
+  "environment": null,
   "services": [],
+  "tags": [],
   "domain": {
      "full_suffix": "= global.provider.domain",
-     "internal_suffix": "= global.provider.internal_domain",
+     "internal_suffix": "= global.provider.domain_internal",
      "full": "= node.name + '.' + domain.full_suffix",
      "internal": "= node.name + '.' + domain.internal_suffix",
      "name": "= node.name + '.' + (dns.public ? domain.full_suffix : domain.internal_suffix)"
   },
   "ssh": {
     "authorized_keys": "= file :authorized_keys",
-    "known_hosts": "= file :known_hosts",
+    "known_hosts": "=> known_hosts_file",
     "port": 22
   },
+  "hosts": "=> hosts_file",
   "x509": {
     "use": false,
     "cert": "= x509.use ? file(:node_x509_cert, :missing => 'x509 certificate for node $node. Run `leap cert update`') : nil",
-    "key": "= x509.use ? file(:node_x509_key, :missing => 'x509 key for node $node. Run `leap cert update`') : nil"
+    "key": "= x509.use ? file(:node_x509_key, :missing => 'x509 key for node $node. Run `leap cert update`') : nil",
+    "ca_cert": "= try_file :ca_cert"
   },
-  "local": false
+  "service_type": "internal_service",
+  "name": "common"
 }
index de5ad446d7299e6e64537d91ba9ca256463a063a..cf1baac6b913d11fff76e680c969fd54cbf60c53 100644 (file)
@@ -1,29 +1,53 @@
 {
   "domain": "REQUIRED",
-  "internal_domain": "= domain.sub(/\\..*$/,'.i')",
+  "domain_internal": "= domain.sub(/\\..*$/,'.i')",
   "name": {
     "en": "REQUIRED"
   },
   "description": {
     "en": "REQUIRED"
   },
+  "contacts": {
+    "default": "REQUIRED"
+  },
   "languages": ["en"],
   "default_language": "en",
   "enrollment_policy": "open",
+  "service": {
+    "levels": [
+      // bandwidth limit is in Bytes, storage limit is in MB.
+      {"id": 1, "name": "free", "bandwidth":"limited", "storage":50},
+      {"id": 2, "name": "basic", "storage":1000, "rate": ["US$10", "€10"]},
+      {"id": 3, "name": "pro", "storage":10000, "rate": ["US$20", "€20"]}
+    ],
+    "default_service_level": 1,
+    "bandwidth_limit": 102400,
+    "allow_free": "= global.provider.service.levels.select {|l| l['rate'].nil?}.any?",
+    "allow_paid": "= global.provider.service.levels.select {|l| !l['rate'].nil?}.any?",
+    "allow_anonymous": "= global.provider.service.levels.select {|l| l['name'] == 'anonymous'}.any?",
+    "allow_registration": "= global.provider.service.levels.select {|l| l['name'] != 'anonymous'}.any?",
+    "allow_limited_bandwidth": "= global.provider.service.levels.select {|l| l['bandwidth'] == 'limited'}.any?",
+    "allow_unlimited_bandwidth": "= global.provider.service.levels.select {|l| l['bandwidth'].nil?}.any?"
+  },
   "ca": {
     "name": "= global.provider.ca.organization + ' Root CA'",
     "organization": "= global.provider.name[global.provider.default_language]",
-    "organizational_unit": "= 'https://' + global.common.domain.full_suffix",
+    "organizational_unit": "= 'https://' + global.provider.domain",
     "bit_size": 4096,
     "digest": "SHA256",
     "life_span": "10y",
     "server_certificates": {
-      "bit_size": 3248,
+      "bit_size": 2024,
       "digest": "SHA256",
       "life_span": "1y"
+    },
+    "client_certificates": {
+      "bit_size": 2024,
+      "digest": "SHA256",
+      "life_span": "2m",
+      "limited_prefix": "LIMITED",
+      "unlimited_prefix": "UNLIMITED"
     }
   },
-  "vagrant":{
-    "network":"10.5.5.0/24"
-  }
+  "hiera_sync_destination": "/etc/leap"
 }
index 1c8005c298b3135e58d7ac76f6c66b0a1e6e34e0..0c4073168d66cd8ad17fde9ff8d1b7b219a8bf1d 100644 (file)
@@ -3,7 +3,14 @@
   "x509": {
     "use": true
   },
+  "stunnel": {
+    "couch_server": "= stunnel_server(couch.port)"
+  },
   "couch": {
+    "port": 5984,
+    "bigcouch": {
+      "cookie": "= secret :bigcouch_cookie"
+    },
     "users": {
       "admin": {
         "username": "admin",
index cf023a9980c2c042a1c04430cde05c5e9db62faa..895aa6e3a25687afd054d5d3cf6719eeed46f60a 100644 (file)
@@ -1,21 +1,43 @@
 {
-  "service_type": "public_service",
-  "x509": {
-    "use": true,
-    "commercial_cert": "= try_file [:commercial_cert, global.provider.domain]",
-    "commercial_key": "= try_file [:commercial_key, global.provider.domain]"
-  },
-  "api_domain": "= 'api.' + domain.full_suffix",
-  "dns": {
-    "aliases": "= [domain.full, api_domain]"
-  },
   "webapp": {
     "modules": ["user", "billing", "help"],
-    "couchdb_hosts": "= nodes[:services => :couchdb].field('domain.name')",
-    "couchdb_user": "= global.services[:couchdb].couch.users[:webapp]"
+    "couchdb_admin_user": "= global.services[:couchdb].couch.users[:admin]",
+    "couchdb_webapp_user": "= global.services[:couchdb].couch.users[:webapp]",
+    "favicon": "= file_path 'branding/favicon.ico'",
+    "tail_scss": "= file_path 'branding/tail.scss'",
+    "head_scss": "= file_path 'branding/head.scss'",
+    "img_dir": "= file_path 'branding/img'",
+    "client_certificates": "= global.provider.ca.client_certificates",
+    "allow_limited_certs": "= global.provider.service.allow_limited_bandwidth",
+    "allow_unlimited_certs": "= global.provider.service.allow_unlimited_bandwidth",
+    "allow_anonymous_certs": "= global.provider.service.allow_anonymous",
+    "secret_token": "= secret :webapp_secret_token"
+  },
+  "stunnel": {
+    "couch_client": "= stunnel_client(nodes_like_me[:services => :couchdb], global.services[:couchdb].couch.port)"
+  },
+  "haproxy": {
+    "local_ports": "= stunnel.couch_client.field(:accept_port)"
   },
   "definition_files": {
-    "provider": "= file('service-definitions/provider.json.erb')",
-    "eip_service": "file('service-definitions/eip-service.json.erb')"
+    "provider": "= file :provider_json_template",
+    "eip_service": "= file :eip_service_json_template"
+  },
+  "service_type": "public_service",
+  "api": {
+    "domain": "= 'api.' + domain.full_suffix",
+    "port": "4430"
+  },
+  "dns": {
+    "aliases": "= [domain.full, api.domain]"
+  },
+  "x509": {
+    "use": true,
+    "ca_cert": "= file :ca_cert, :missing => 'provider CA. Run `leap cert ca`'",
+    "client_ca_cert": "= file_path :client_ca_cert",
+    "client_ca_key": "= file_path :client_ca_key",
+    "commercial_cert": "= file [:commercial_cert, domain.full_suffix]",
+    "commercial_key": "= file [:commercial_key, domain.full_suffix]",
+    "commercial_ca_cert": "= try_file :commercial_ca_cert"
   }
 }
\ No newline at end of file
diff --git a/test/leap_platform/provider_templates/common.json b/test/leap_platform/provider_templates/common.json
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/test/leap_platform/provider_templates/node.json b/test/leap_platform/provider_templates/node.json
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/test/leap_platform/provider_templates/provider.json b/test/leap_platform/provider_templates/provider.json
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/test/provider/Leapfile b/test/provider/Leapfile
new file mode 100644 (file)
index 0000000..5172af9
--- /dev/null
@@ -0,0 +1 @@
+@platform_directory = '../leap_platform'
\ No newline at end of file
index afb5ef1771079ac387c928fe6523fc933dd61254..c74bd40eab6fc2e63b24e4bf9d11b84441597088 100644 (file)
@@ -3,6 +3,5 @@
 //
 {
   "services": "dns",
-  "tags": "production",
   "ip_address": "1.1.1.1"
 }
\ No newline at end of file
index e1917fba7b61fddf7370cd0836a85bb385558e44..c051b95ff6eba31424ca9801c62fefbaf7faee50 100644 (file)
@@ -3,6 +3,5 @@
 //
 {
   "services": "dns",
-  "tags": "production",
   "ip_address": "1.1.1.2"
 }
\ No newline at end of file
diff --git a/test/provider/nodes/pcouch1.json b/test/provider/nodes/pcouch1.json
new file mode 100644 (file)
index 0000000..35ea3aa
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "tags": "production",
+  "services": "couchdb",
+  "ip_address": "11.0.0.2"
+}
diff --git a/test/provider/nodes/pweb1.json b/test/provider/nodes/pweb1.json
new file mode 100644 (file)
index 0000000..7debe74
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "tags": "production",
+  "services": "webapp",
+  "ip_address": "11.0.0.1"
+}
\ No newline at end of file
index 5115cb24953e4f5d7b5afb8cad3dbd8d6ac9ab4e..15dd260b80384d455a7335902d55bd2299619977 100644 (file)
@@ -1,7 +1,6 @@
 {
   "services": "openvpn",
   "ip_address": "10.5.5.3",
-  "tags": "production",
   "openvpn": {
     "gateway_address": "3.3.3.3",
     "filter_dns": true
index b35c06503063307a615a87c4c879d2838eb1a493..ea17498fcd4eb9ca98e7caf239720cff0371443e 100644 (file)
@@ -1,3 +1,3 @@
 {
-  "production": true
+  "environment": "production"
 }
\ No newline at end of file
index 122c6cd39ed8f3e14c741c26dcacebbfdaa326ea..d38f441cacab7ca35841f573c27527a3f4ffc47e 100644 (file)
@@ -10,12 +10,28 @@ class ConfigObjectListTest < MiniTest::Unit::TestCase
 
   def test_complex_node_search
     domain = provider.domain
-    nodes = manager.nodes['dns.public' => true]
-    expected = [{"domain_full"=>"ns1.#{domain}"}, {"domain_full"=>"ns2.#{domain}"}, {"domain_full"=>"vpn1.#{domain}"}, {"domain_full"=>"web1.#{domain}"}]
+    nodes = manager.nodes['x509.use' => true]
+    assert nodes.size != manager.nodes.size, 'should not return all nodes'
+    assert nodes.size > 2, 'should be some nodes'
+    expected = manager.nodes.collect {|name, node|
+      if node.x509.use
+        node.domain.full
+      end
+    }.compact
     assert_equal expected.size, nodes.size
-    assert_equal expected, nodes.fields('domain.full')
+    assert_equal expected.sort, nodes.field('domain.full').sort
   end
 
+  def test_nodes_like_me
+    nodes = manager.nodes[:environment => nil]
+    node = nodes.values.first
+    assert nodes.size > 1, "should be nodes with no environment set"
+    assert_equal node.nodes_like_me.values, nodes.values
 
+    nodes = manager.nodes[:environment => "production"]
+    node = nodes.values.first
+    assert nodes.size > 1, "should be production nodes"
+    assert_equal node.nodes_like_me.values, nodes.values
+  end
 
 end