diff options
author | elijah <elijah@riseup.net> | 2013-03-31 14:14:01 -0700 |
---|---|---|
committer | elijah <elijah@riseup.net> | 2013-03-31 14:14:01 -0700 |
commit | 9c131c1d84357175448496590e8d4e31e90118aa (patch) | |
tree | 156e4a573fd39b4f256a8c6b4eeaa78303834f02 | |
parent | 354c455dc6d463d5eed43804d1eb3aaa95c9e471 (diff) |
add ability to search for nodes using nil values.
-rw-r--r-- | lib/leap_cli/commands/test.rb | 6 | ||||
-rw-r--r-- | lib/leap_cli/config/macros.rb | 3 | ||||
-rw-r--r-- | lib/leap_cli/config/object_list.rb | 20 | ||||
-rw-r--r-- | test/leap_platform/provider_base/common.json | 15 | ||||
-rw-r--r-- | test/leap_platform/provider_base/provider.json | 36 | ||||
-rw-r--r-- | test/leap_platform/provider_base/services/couchdb.json | 7 | ||||
-rw-r--r-- | test/leap_platform/provider_base/services/webapp.json | 50 | ||||
-rw-r--r-- | test/leap_platform/provider_templates/common.json | 0 | ||||
-rw-r--r-- | test/leap_platform/provider_templates/node.json | 0 | ||||
-rw-r--r-- | test/leap_platform/provider_templates/provider.json | 0 | ||||
-rw-r--r-- | test/provider/Leapfile | 1 | ||||
-rw-r--r-- | test/provider/nodes/ns1.json | 1 | ||||
-rw-r--r-- | test/provider/nodes/ns2.json | 1 | ||||
-rw-r--r-- | test/provider/nodes/pcouch1.json | 5 | ||||
-rw-r--r-- | test/provider/nodes/pweb1.json | 5 | ||||
-rw-r--r-- | test/provider/nodes/vpn1.json | 1 | ||||
-rw-r--r-- | test/provider/tags/production.json | 2 | ||||
-rw-r--r-- | test/unit/config_object_list_test.rb | 22 |
18 files changed, 129 insertions, 46 deletions
diff --git a/lib/leap_cli/commands/test.rb b/lib/leap_cli/commands/test.rb index 3f0feb0..79271be 100644 --- a/lib/leap_cli/commands/test.rb +++ b/lib/leap_cli/commands/test.rb @@ -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 diff --git a/lib/leap_cli/config/macros.rb b/lib/leap_cli/config/macros.rb index 3c59356..5f90894 100644 --- a/lib/leap_cli/config/macros.rb +++ b/lib/leap_cli/config/macros.rb @@ -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 diff --git a/lib/leap_cli/config/object_list.rb b/lib/leap_cli/config/object_list.rb index 0c7711f..0c0da14 100644 --- a/lib/leap_cli/config/object_list.rb +++ b/lib/leap_cli/config/object_list.rb @@ -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 diff --git a/test/leap_platform/provider_base/common.json b/test/leap_platform/provider_base/common.json index f5093a5..653b9a0 100644 --- a/test/leap_platform/provider_base/common.json +++ b/test/leap_platform/provider_base/common.json @@ -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)" @@ -13,13 +15,16 @@ }, "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" } diff --git a/test/leap_platform/provider_base/provider.json b/test/leap_platform/provider_base/provider.json index de5ad44..cf1baac 100644 --- a/test/leap_platform/provider_base/provider.json +++ b/test/leap_platform/provider_base/provider.json @@ -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" } diff --git a/test/leap_platform/provider_base/services/couchdb.json b/test/leap_platform/provider_base/services/couchdb.json index 1c8005c..0c40731 100644 --- a/test/leap_platform/provider_base/services/couchdb.json +++ b/test/leap_platform/provider_base/services/couchdb.json @@ -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", diff --git a/test/leap_platform/provider_base/services/webapp.json b/test/leap_platform/provider_base/services/webapp.json index cf023a9..895aa6e 100644 --- a/test/leap_platform/provider_base/services/webapp.json +++ b/test/leap_platform/provider_base/services/webapp.json @@ -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 index e69de29..0000000 --- a/test/leap_platform/provider_templates/common.json +++ /dev/null diff --git a/test/leap_platform/provider_templates/node.json b/test/leap_platform/provider_templates/node.json deleted file mode 100644 index e69de29..0000000 --- a/test/leap_platform/provider_templates/node.json +++ /dev/null diff --git a/test/leap_platform/provider_templates/provider.json b/test/leap_platform/provider_templates/provider.json deleted file mode 100644 index e69de29..0000000 --- a/test/leap_platform/provider_templates/provider.json +++ /dev/null diff --git a/test/provider/Leapfile b/test/provider/Leapfile new file mode 100644 index 0000000..5172af9 --- /dev/null +++ b/test/provider/Leapfile @@ -0,0 +1 @@ +@platform_directory = '../leap_platform'
\ No newline at end of file diff --git a/test/provider/nodes/ns1.json b/test/provider/nodes/ns1.json index afb5ef1..c74bd40 100644 --- a/test/provider/nodes/ns1.json +++ b/test/provider/nodes/ns1.json @@ -3,6 +3,5 @@ // { "services": "dns", - "tags": "production", "ip_address": "1.1.1.1" }
\ No newline at end of file diff --git a/test/provider/nodes/ns2.json b/test/provider/nodes/ns2.json index e1917fb..c051b95 100644 --- a/test/provider/nodes/ns2.json +++ b/test/provider/nodes/ns2.json @@ -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 index 0000000..35ea3aa --- /dev/null +++ b/test/provider/nodes/pcouch1.json @@ -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 index 0000000..7debe74 --- /dev/null +++ b/test/provider/nodes/pweb1.json @@ -0,0 +1,5 @@ +{ + "tags": "production", + "services": "webapp", + "ip_address": "11.0.0.1" +}
\ No newline at end of file diff --git a/test/provider/nodes/vpn1.json b/test/provider/nodes/vpn1.json index 5115cb2..15dd260 100644 --- a/test/provider/nodes/vpn1.json +++ b/test/provider/nodes/vpn1.json @@ -1,7 +1,6 @@ { "services": "openvpn", "ip_address": "10.5.5.3", - "tags": "production", "openvpn": { "gateway_address": "3.3.3.3", "filter_dns": true diff --git a/test/provider/tags/production.json b/test/provider/tags/production.json index b35c065..ea17498 100644 --- a/test/provider/tags/production.json +++ b/test/provider/tags/production.json @@ -1,3 +1,3 @@ { - "production": true + "environment": "production" }
\ No newline at end of file diff --git a/test/unit/config_object_list_test.rb b/test/unit/config_object_list_test.rb index 122c6cd..d38f441 100644 --- a/test/unit/config_object_list_test.rb +++ b/test/unit/config_object_list_test.rb @@ -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 |