cloud-toaster 1.1.2
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 +15 -0
- data/LICENSE +202 -0
- data/README.md +54 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/bin/strace-4.8_patched/strace-i686 +0 -0
- data/bin/strace-4.8_patched/strace-x86_64 +0 -0
- data/bin/toaster +74 -0
- data/chef/cookbooks/chef-solo-search/CHANGELOG +16 -0
- data/chef/cookbooks/chef-solo-search/Gemfile +8 -0
- data/chef/cookbooks/chef-solo-search/LICENSE +202 -0
- data/chef/cookbooks/chef-solo-search/NOTICE +18 -0
- data/chef/cookbooks/chef-solo-search/README.md +143 -0
- data/chef/cookbooks/chef-solo-search/Rakefile +10 -0
- data/chef/cookbooks/chef-solo-search/libraries/search/overrides.rb +100 -0
- data/chef/cookbooks/chef-solo-search/libraries/search/parser.rb +222 -0
- data/chef/cookbooks/chef-solo-search/libraries/search.rb +75 -0
- data/chef/cookbooks/chef-solo-search/libraries/vendor/chef/solr_query/lucene.treetop +150 -0
- data/chef/cookbooks/chef-solo-search/libraries/vendor/chef/solr_query/lucene_nodes.rb +285 -0
- data/chef/cookbooks/chef-solo-search/libraries/vendor/chef/solr_query/query_transform.rb +65 -0
- data/chef/cookbooks/chef-solo-search/metadata.rb +11 -0
- data/chef/cookbooks/chef-solo-search/recipes/default.rb +3 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/node/alpha.json +10 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/node/beta.json +10 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/node/without_json_class.json +7 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/jerry.json +8 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/lea.json +10 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/mike.json +13 -0
- data/chef/cookbooks/chef-solo-search/tests/data/data_bags/users/tom.json +10 -0
- data/chef/cookbooks/chef-solo-search/tests/gemfiles/Gemfile.10 +4 -0
- data/chef/cookbooks/chef-solo-search/tests/gemfiles/Gemfile.11 +5 -0
- data/chef/cookbooks/chef-solo-search/tests/test_data_bags.rb +45 -0
- data/chef/cookbooks/chef-solo-search/tests/test_search.rb +244 -0
- data/chef/cookbooks/lxc/attributes/create_lxc.rb +8 -0
- data/chef/cookbooks/lxc/attributes/general.rb +15 -0
- data/chef/cookbooks/lxc/attributes/init_bare_os.rb +15 -0
- data/chef/cookbooks/lxc/attributes/init_proto.rb +18 -0
- data/chef/cookbooks/lxc/attributes/install_ruby.rb +51 -0
- data/chef/cookbooks/lxc/attributes/mount_volume.rb +11 -0
- data/chef/cookbooks/lxc/attributes/setup_host.rb +9 -0
- data/chef/cookbooks/lxc/attributes/setup_proxy.rb +3 -0
- data/chef/cookbooks/lxc/attributes/start_lxc.rb +11 -0
- data/chef/cookbooks/lxc/attributes/stop_lxc.rb +3 -0
- data/chef/cookbooks/lxc/files/install.chef.sh +78 -0
- data/chef/cookbooks/lxc/metadata.json +6 -0
- data/chef/cookbooks/lxc/recipes/create_lxc.rb +106 -0
- data/chef/cookbooks/lxc/recipes/init_bare_os.rb +82 -0
- data/chef/cookbooks/lxc/recipes/init_proto.rb +417 -0
- data/chef/cookbooks/lxc/recipes/install_docker.rb +61 -0
- data/chef/cookbooks/lxc/recipes/install_ruby.rb +28 -0
- data/chef/cookbooks/lxc/recipes/mount_volume.rb +63 -0
- data/chef/cookbooks/lxc/recipes/setup_database.rb +22 -0
- data/chef/cookbooks/lxc/recipes/setup_host.rb +179 -0
- data/chef/cookbooks/lxc/recipes/setup_proxy.rb +157 -0
- data/chef/cookbooks/lxc/recipes/start_lxc.rb +180 -0
- data/chef/cookbooks/lxc/recipes/stop_lxc.rb +86 -0
- data/chef/cookbooks/mysql/CHANGELOG.md +391 -0
- data/chef/cookbooks/mysql/README.md +211 -0
- data/chef/cookbooks/mysql/attributes/default.rb +22 -0
- data/chef/cookbooks/mysql/libraries/helpers.rb +277 -0
- data/chef/cookbooks/mysql/libraries/matchers.rb +17 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client.rb +10 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_debian.rb +37 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_fedora.rb +38 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_freebsd.rb +33 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_omnios.rb +41 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_rhel.rb +42 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_smartos.rb +33 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_suse.rb +37 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_client_ubuntu.rb +37 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service.rb +10 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_debian.rb +193 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_fedora.rb +157 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_freebsd.rb +151 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_omnios.rb +232 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_rhel.rb +318 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_smartos.rb +216 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_suse.rb +170 -0
- data/chef/cookbooks/mysql/libraries/provider_mysql_service_ubuntu.rb +218 -0
- data/chef/cookbooks/mysql/libraries/resource_mysql_client.rb +11 -0
- data/chef/cookbooks/mysql/libraries/resource_mysql_service.rb +194 -0
- data/chef/cookbooks/mysql/metadata.json +40 -0
- data/chef/cookbooks/mysql/metadata.rb +20 -0
- data/chef/cookbooks/mysql/recipes/client.rb +22 -0
- data/chef/cookbooks/mysql/recipes/server.rb +33 -0
- data/chef/cookbooks/mysql/recipes/server_deprecated.rb +23 -0
- data/chef/cookbooks/mysql/templates/default/5.0/my.cnf.erb +38 -0
- data/chef/cookbooks/mysql/templates/default/5.1/my.cnf.erb +38 -0
- data/chef/cookbooks/mysql/templates/default/5.5/my.cnf.erb +38 -0
- data/chef/cookbooks/mysql/templates/default/5.6/my.cnf.erb +39 -0
- data/chef/cookbooks/mysql/templates/default/apparmor/usr.sbin.mysqld.erb +40 -0
- data/chef/cookbooks/mysql/templates/default/debian/debian.cnf.erb +12 -0
- data/chef/cookbooks/mysql/templates/default/debian/mysql-server.seed.erb +10 -0
- data/chef/cookbooks/mysql/templates/default/deprecated/my.cnf.erb +374 -0
- data/chef/cookbooks/mysql/templates/default/grants/grants.sql.erb +27 -0
- data/chef/cookbooks/mysql/templates/default/omnios/mysql.xml.erb +26 -0
- data/chef/cookbooks/mysql/templates/default/omnios/svc.method.mysqld.erb +29 -0
- data/chef/cookbooks/mysql/templates/default/smartos/mysql.xml.erb +32 -0
- data/chef/cookbooks/mysql/templates/default/smartos/svc.method.mysqld.erb +29 -0
- data/chef/cookbooks/openssl/README.md +37 -0
- data/chef/cookbooks/openssl/libraries/secure_password.rb +37 -0
- data/chef/cookbooks/openssl/metadata.json +30 -0
- data/chef/cookbooks/openssl/metadata.rb +8 -0
- data/chef/cookbooks/openssl/recipes/default.rb +19 -0
- data/chef/cookbooks/ssh/attributes/default.rb +8 -0
- data/chef/cookbooks/ssh/recipes/authorize_key.rb +20 -0
- data/chef/cookbooks/toaster/attributes/testing.rb +37 -0
- data/chef/cookbooks/toaster/libraries/default.rb +61 -0
- data/chef/cookbooks/toaster/recipes/post__cakephp__default.rb +27 -0
- data/chef/cookbooks/toaster/recipes/post__cube__default.rb +26 -0
- data/chef/cookbooks/toaster/recipes/post__drupal__default.rb +16 -0
- data/chef/cookbooks/toaster/recipes/post__icinga__default.rb +9 -0
- data/chef/cookbooks/toaster/recipes/post__node__default.rb +16 -0
- data/chef/cookbooks/toaster/recipes/post__virtualbox__default.rb +12 -0
- data/chef/cookbooks/toaster/recipes/post__wordpress__default.rb +12 -0
- data/chef/cookbooks/toaster/recipes/pre__aegir__default.rb +12 -0
- data/chef/cookbooks/toaster/recipes/pre__app__default.rb +3 -0
- data/chef/cookbooks/toaster/recipes/pre__cakephp__default.rb +24 -0
- data/chef/cookbooks/toaster/recipes/pre__cube__default.rb +9 -0
- data/chef/cookbooks/toaster/recipes/pre__disco__default.rb +21 -0
- data/chef/cookbooks/toaster/recipes/pre__drbd__default.rb +7 -0
- data/chef/cookbooks/toaster/recipes/pre__eaccelerator__default.rb +2 -0
- data/chef/cookbooks/toaster/recipes/pre__elasticsearch-head__default.rb +11 -0
- data/chef/cookbooks/toaster/recipes/pre__elasticsearch__default.rb +6 -0
- data/chef/cookbooks/toaster/recipes/pre__gitosis__default.rb +17 -0
- data/chef/cookbooks/toaster/recipes/pre__kafka__default.rb +3 -0
- data/chef/cookbooks/toaster/recipes/pre__munin__server.rb +6 -0
- data/chef/cookbooks/toaster/recipes/pre__mysql__server.rb +4 -0
- data/chef/cookbooks/toaster/recipes/pre__nagios__default.rb +3 -0
- data/chef/cookbooks/toaster/recipes/pre__netkernel__default.rb +24 -0
- data/chef/cookbooks/toaster/recipes/pre__php__default.rb +2 -0
- data/chef/cookbooks/toaster/recipes/pre__postgresql__server.rb +3 -0
- data/chef/cookbooks/toaster/recipes/pre__pxe_dust__default.rb +9 -0
- data/chef/cookbooks/toaster/recipes/pre__pxe_install_server__default.rb +6 -0
- data/chef/cookbooks/toaster/recipes/pre__riak__default.rb +40 -0
- data/chef/cookbooks/toaster/recipes/pre__sensu__default.rb +9 -0
- data/chef/cookbooks/toaster/recipes/pre__sol__default.rb +2 -0
- data/chef/cookbooks/toaster/recipes/pre__solr__default.rb +6 -0
- data/chef/cookbooks/toaster/recipes/pre__sonar__default.rb +2 -0
- data/chef/cookbooks/toaster/recipes/pre__storm__default.rb +3 -0
- data/chef/cookbooks/toaster/recipes/pre__vmware__tools.rb +4 -0
- data/chef/cookbooks/toaster/recipes/pre__wordpress__default.rb +17 -0
- data/chef/cookbooks/toaster/recipes/pre__xen__default.rb +7 -0
- data/chef/cookbooks/toaster/recipes/pre__znc__default.rb +7 -0
- data/chef/cookbooks/toaster/recipes/testing.rb +241 -0
- data/chef/cookbooks/toaster/recipes/testing_post.rb +36 -0
- data/chef/cookbooks/yum/CHANGELOG.md +212 -0
- data/chef/cookbooks/yum/README.md +268 -0
- data/chef/cookbooks/yum/attributes/main.rb +97 -0
- data/chef/cookbooks/yum/libraries/matchers.rb +27 -0
- data/chef/cookbooks/yum/metadata.json +34 -0
- data/chef/cookbooks/yum/metadata.rb +13 -0
- data/chef/cookbooks/yum/providers/globalconfig.rb +37 -0
- data/chef/cookbooks/yum/providers/repository.rb +85 -0
- data/chef/cookbooks/yum/recipes/default.rb +34 -0
- data/chef/cookbooks/yum/resources/globalconfig.rb +105 -0
- data/chef/cookbooks/yum/resources/repository.rb +63 -0
- data/chef/cookbooks/yum/templates/default/main.erb +251 -0
- data/chef/cookbooks/yum/templates/default/repo.erb +109 -0
- data/chef/cookbooks/yum-mysql-community/CHANGELOG.md +67 -0
- data/chef/cookbooks/yum-mysql-community/README.md +137 -0
- data/chef/cookbooks/yum-mysql-community/attributes/mysql-connectors-community.rb +31 -0
- data/chef/cookbooks/yum-mysql-community/attributes/mysql55-community.rb +29 -0
- data/chef/cookbooks/yum-mysql-community/attributes/mysql56-community.rb +31 -0
- data/chef/cookbooks/yum-mysql-community/files/default/mysql_pubkey.asc +33 -0
- data/chef/cookbooks/yum-mysql-community/metadata.json +30 -0
- data/chef/cookbooks/yum-mysql-community/metadata.rb +8 -0
- data/chef/cookbooks/yum-mysql-community/recipes/connectors.rb +48 -0
- data/chef/cookbooks/yum-mysql-community/recipes/mysql55.rb +48 -0
- data/chef/cookbooks/yum-mysql-community/recipes/mysql56.rb +48 -0
- data/config.json +34 -0
- data/lib/toaster/api.rb +447 -0
- data/lib/toaster/chef/chef_listener.rb +514 -0
- data/lib/toaster/chef/chef_node_inspector.rb +165 -0
- data/lib/toaster/chef/chef_util.rb +865 -0
- data/lib/toaster/chef/failsafe_resource_parser.rb +140 -0
- data/lib/toaster/chef/resource_inspector.rb +536 -0
- data/lib/toaster/db/cache.rb +98 -0
- data/lib/toaster/db/cached_db.rb +53 -0
- data/lib/toaster/db/cgi_session_cache.rb +209 -0
- data/lib/toaster/db/db.rb +98 -0
- data/lib/toaster/db/mysql.rb +18 -0
- data/lib/toaster/db/ram_cache.rb +203 -0
- data/lib/toaster/markup/jdom-1.1.jar +0 -0
- data/lib/toaster/markup/jdom-b7.jar +0 -0
- data/lib/toaster/markup/markup_util.rb +437 -0
- data/lib/toaster/markup/vmtools-utils-0.5.jar +0 -0
- data/lib/toaster/markup/xmldiff.sh +5 -0
- data/lib/toaster/model/additional_property.rb +11 -0
- data/lib/toaster/model/automation.rb +218 -0
- data/lib/toaster/model/automation_attribute.rb +13 -0
- data/lib/toaster/model/automation_run.rb +104 -0
- data/lib/toaster/model/ignore_property.rb +11 -0
- data/lib/toaster/model/key_value_pair.rb +59 -0
- data/lib/toaster/model/run_attribute.rb +17 -0
- data/lib/toaster/model/state.rb +17 -0
- data/lib/toaster/model/state_change.rb +79 -0
- data/lib/toaster/model/task.rb +292 -0
- data/lib/toaster/model/task_execution.rb +76 -0
- data/lib/toaster/model/task_parameter.rb +66 -0
- data/lib/toaster/model/user.rb +32 -0
- data/lib/toaster/ohai/_disabled_/network_ports.rb +81 -0
- data/lib/toaster/ohai/apache/apache.rb +48 -0
- data/lib/toaster/ohai/cron/cron.rb +32 -0
- data/lib/toaster/ohai/files/_meta.rb +30 -0
- data/lib/toaster/ohai/files/files.rb +20 -0
- data/lib/toaster/ohai/gems/gems.rb +19 -0
- data/lib/toaster/ohai/groups/groups.rb +20 -0
- data/lib/toaster/ohai/iptables/iptables.rb +48 -0
- data/lib/toaster/ohai/mounts/mounts.rb +26 -0
- data/lib/toaster/ohai/mysql/mysql.rb +31 -0
- data/lib/toaster/ohai/packages/_meta.rb +86 -0
- data/lib/toaster/ohai/packages/packages.rb +33 -0
- data/lib/toaster/ohai/ports/ports.rb +21 -0
- data/lib/toaster/ohai/routes/routes.rb +25 -0
- data/lib/toaster/ohai/services/services.rb +42 -0
- data/lib/toaster/ohai/users/users.rb +17 -0
- data/lib/toaster/state/convergence.rb +197 -0
- data/lib/toaster/state/idempotence.rb +192 -0
- data/lib/toaster/state/ptrace_util.rb +48 -0
- data/lib/toaster/state/state_node.rb +105 -0
- data/lib/toaster/state/state_transition.rb +38 -0
- data/lib/toaster/state/state_transition_graph.rb +701 -0
- data/lib/toaster/state/syscall_tracer.rb +317 -0
- data/lib/toaster/state/system_state.rb +349 -0
- data/lib/toaster/state/transition_edge.rb +65 -0
- data/lib/toaster/test/test_attribute.rb +19 -0
- data/lib/toaster/test/test_case.rb +175 -0
- data/lib/toaster/test/test_coverage.rb +147 -0
- data/lib/toaster/test/test_coverage_goal.rb +108 -0
- data/lib/toaster/test/test_generator.rb +246 -0
- data/lib/toaster/test/test_orchestrator.rb +165 -0
- data/lib/toaster/test/test_result.rb +73 -0
- data/lib/toaster/test/test_runner.rb +394 -0
- data/lib/toaster/test/test_suite.rb +151 -0
- data/lib/toaster/test_manager.rb +281 -0
- data/lib/toaster/toaster_app_service.rb +141 -0
- data/lib/toaster/util/blocking_map.rb +80 -0
- data/lib/toaster/util/combinatorial.rb +58 -0
- data/lib/toaster/util/config.rb +103 -0
- data/lib/toaster/util/docker.rb +71 -0
- data/lib/toaster/util/logging.rb +19 -0
- data/lib/toaster/util/lxc.rb +383 -0
- data/lib/toaster/util/mem_dump.rb +38 -0
- data/lib/toaster/util/proxy.rb +23 -0
- data/lib/toaster/util/timestamp.rb +131 -0
- data/lib/toaster/util/util.rb +437 -0
- data/lib/toaster/web_ui.rb +7 -0
- data/webapp/Gemfile +46 -0
- data/webapp/Gemfile.lock +237 -0
- data/webapp/Rakefile +6 -0
- data/webapp/app/assets/fonts/font.woff +0 -0
- data/webapp/app/assets/images/final_state.gif +0 -0
- data/webapp/app/assets/images/initial_state.gif +0 -0
- data/webapp/app/assets/images/loading.gif +0 -0
- data/webapp/app/assets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/webapp/app/assets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/webapp/app/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/webapp/app/assets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/webapp/app/assets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/webapp/app/assets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/webapp/app/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/webapp/app/assets/images/ui-icons_222222_256x240.png +0 -0
- data/webapp/app/assets/javascripts/analysis.js.coffee +3 -0
- data/webapp/app/assets/javascripts/application.js +16 -0
- data/webapp/app/assets/javascripts/execs.js.coffee +3 -0
- data/webapp/app/assets/javascripts/graph.js +441 -0
- data/webapp/app/assets/javascripts/jquery-1.7.2.js +9404 -0
- data/webapp/app/assets/javascripts/jquery-ui-1.8.22.js +11529 -0
- data/webapp/app/assets/javascripts/jquery.cookie.js +96 -0
- data/webapp/app/assets/javascripts/jquery.hotkeys.js +99 -0
- data/webapp/app/assets/javascripts/jquery.jstree.js +4551 -0
- data/webapp/app/assets/javascripts/jsPlumb/jquery.jsPlumb-1.3.14-all-min.js +1 -0
- data/webapp/app/assets/javascripts/jstree.util.js +53 -0
- data/webapp/app/assets/javascripts/scripts.js.coffee +3 -0
- data/webapp/app/assets/javascripts/settings.js.coffee +3 -0
- data/webapp/app/assets/javascripts/test.js.coffee +3 -0
- data/webapp/app/assets/javascripts/util.js.coffee +3 -0
- data/webapp/app/assets/stylesheets/analysis.css.scss +3 -0
- data/webapp/app/assets/stylesheets/application.css +49 -0
- data/webapp/app/assets/stylesheets/execs.css.scss +3 -0
- data/webapp/app/assets/stylesheets/graph.css +159 -0
- data/webapp/app/assets/stylesheets/jquery-ui-1.8.6.custom.css +572 -0
- data/webapp/app/assets/stylesheets/layout.css +151 -0
- data/webapp/app/assets/stylesheets/menu.css +186 -0
- data/webapp/app/assets/stylesheets/reset.css +41 -0
- data/webapp/app/assets/stylesheets/scripts.css.scss +3 -0
- data/webapp/app/assets/stylesheets/settings.css.scss +3 -0
- data/webapp/app/assets/stylesheets/test.css.scss +3 -0
- data/webapp/app/assets/stylesheets/util.css.scss +3 -0
- data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.eot +0 -0
- data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.svg +1 -0
- data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.ttf +0 -0
- data/webapp/app/assets/stylesheets/websymbols/websymbols-regular-webfont.woff +0 -0
- data/webapp/app/controllers/analysis_controller.rb +7 -0
- data/webapp/app/controllers/application_controller.rb +14 -0
- data/webapp/app/controllers/base_controller.rb +91 -0
- data/webapp/app/controllers/execs_controller.rb +59 -0
- data/webapp/app/controllers/graph_controller.rb +17 -0
- data/webapp/app/controllers/scripts_controller.rb +166 -0
- data/webapp/app/controllers/settings_controller.rb +10 -0
- data/webapp/app/controllers/test_controller.rb +127 -0
- data/webapp/app/controllers/util_controller.rb +6 -0
- data/webapp/app/helpers/analysis_helper.rb +2 -0
- data/webapp/app/helpers/application_helper.rb +2 -0
- data/webapp/app/helpers/automations_helper.rb +2 -0
- data/webapp/app/helpers/execs_helper.rb +2 -0
- data/webapp/app/helpers/scripts_helper.rb +2 -0
- data/webapp/app/helpers/settings_helper.rb +2 -0
- data/webapp/app/helpers/test_helper.rb +2 -0
- data/webapp/app/helpers/util_helper.rb +2 -0
- data/webapp/app/views/analysis/convergence.html.erb +156 -0
- data/webapp/app/views/analysis/idempotence.html.erb +2 -0
- data/webapp/app/views/execs/automation_runs.html.erb +98 -0
- data/webapp/app/views/execs/task_executions.html.erb +154 -0
- data/webapp/app/views/graph/graph_frame.html +101 -0
- data/webapp/app/views/layouts/application.html.erb +114 -0
- data/webapp/app/views/scripts/edit.html.erb +58 -0
- data/webapp/app/views/scripts/graph.html.erb +75 -0
- data/webapp/app/views/scripts/import_chef.html.erb +104 -0
- data/webapp/app/views/scripts/scripts.html.erb +116 -0
- data/webapp/app/views/scripts/tasks.html.erb +139 -0
- data/webapp/app/views/settings/containers.html.erb +161 -0
- data/webapp/app/views/settings/index.html.erb +51 -0
- data/webapp/app/views/test/cases.html.erb +2 -0
- data/webapp/app/views/test/gen.html.erb +229 -0
- data/webapp/app/views/test/suites.html.erb +205 -0
- data/webapp/app/views/util/chef.html.erb +53 -0
- data/webapp/bin/bundle +3 -0
- data/webapp/bin/rails +4 -0
- data/webapp/bin/rake +4 -0
- data/webapp/config/application.rb +28 -0
- data/webapp/config/boot.rb +18 -0
- data/webapp/config/database.yml +42 -0
- data/webapp/config/environment.rb +5 -0
- data/webapp/config/environments/development.rb +35 -0
- data/webapp/config/environments/production.rb +80 -0
- data/webapp/config/environments/test.rb +36 -0
- data/webapp/config/initializers/backtrace_silencers.rb +7 -0
- data/webapp/config/initializers/devise.rb +256 -0
- data/webapp/config/initializers/filter_parameter_logging.rb +4 -0
- data/webapp/config/initializers/inflections.rb +16 -0
- data/webapp/config/initializers/mime_types.rb +5 -0
- data/webapp/config/initializers/patches.rb +13 -0
- data/webapp/config/initializers/secret_token.rb +12 -0
- data/webapp/config/initializers/session_store.rb +6 -0
- data/webapp/config/initializers/wrap_parameters.rb +16 -0
- data/webapp/config/locales/devise.en.yml +59 -0
- data/webapp/config/locales/en.yml +23 -0
- data/webapp/config/routes.rb +113 -0
- data/webapp/config.ru +4 -0
- data/webapp/db/development.sqlite3 +0 -0
- data/webapp/db/migrate/20140624002037_devise_create_users.rb +42 -0
- data/webapp/db/migrate/20140628002058_create_all_tables.rb +159 -0
- data/webapp/db/schema.rb +162 -0
- data/webapp/db/seeds.rb +7 -0
- data/webapp/log/development.log +167823 -0
- data/webapp/public/404.html +58 -0
- data/webapp/public/422.html +58 -0
- data/webapp/public/500.html +57 -0
- data/webapp/public/favicon.ico +0 -0
- data/webapp/public/robots.txt +5 -0
- data/webapp/test/controllers/analysis_controller_test.rb +14 -0
- data/webapp/test/controllers/automations_controller_test.rb +49 -0
- data/webapp/test/controllers/execs_controller_test.rb +9 -0
- data/webapp/test/controllers/executions_controller_test.rb +9 -0
- data/webapp/test/controllers/runs_controller_test.rb +7 -0
- data/webapp/test/controllers/scripts_controller_test.rb +9 -0
- data/webapp/test/controllers/settings_controller_test.rb +9 -0
- data/webapp/test/controllers/test_controller_test.rb +14 -0
- data/webapp/test/controllers/util_controller_test.rb +9 -0
- data/webapp/test/fixtures/users.yml +11 -0
- data/webapp/test/helpers/analysis_helper_test.rb +4 -0
- data/webapp/test/helpers/automations_helper_test.rb +4 -0
- data/webapp/test/helpers/execs_helper_test.rb +4 -0
- data/webapp/test/helpers/executions_helper_test.rb +4 -0
- data/webapp/test/helpers/runs_helper_test.rb +4 -0
- data/webapp/test/helpers/scripts_helper_test.rb +4 -0
- data/webapp/test/helpers/settings_helper_test.rb +4 -0
- data/webapp/test/helpers/test_helper_test.rb +4 -0
- data/webapp/test/helpers/util_helper_test.rb +4 -0
- data/webapp/test/models/user_test.rb +7 -0
- data/webapp/test/test_helper.rb +15 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/analysis.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/automations.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/execs.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/executions.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/scripts.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/settings.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/test.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sass/1330a34c6b24ed44c0f194c03246f627289a985a/util.css.scssc +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/06a1cdb3d5472dd126cffc18f548c342 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/0dc0562647e703ca0535da3b9fcad796 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/113f1c71cb0f2a786729477989122982 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/151a1c6b128721d8923ba0c380a2af17 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/1722fb8a6daad566c8a6d5ef31969459 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/1a05555c46560c6b246aa0a996679bc6 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/1cb7fb6aa8bd1c2b7df8f7c52442e345 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/1d76f803b0a83adc5ea7e7c848657967 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/200152f95fc464d69c425ed8fdc2fbcc +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/2049c8927ebd046c8a3291f81041d5f1 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/207907100aabd08a6767e39a95b364e3 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/249e2d4db815922fc72419c4a1407caf +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/3034e4c334b1ebed9433e33050555f18 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/316c88d859cc3666044e51b1dd89e872 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/347f43d816178c8ba11a28a771696924 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/36ab92a3b8d527ed1eff0944b5f1263d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/3893b852ff196f05ff6ca8e38bb2237f +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/3c358bd5fa32d151c7aa44971dd9b96f +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/3ce88fad85146e0bed233f5419c24d29 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/3dabcb7c89677292e1e019a9bac446e5 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/4116fac01e6d379ede37af725a592477 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/42628e032b8f0b16a5ba01a1fcc7b6d7 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/437b258a98e8fe2c87fa8e24b7ce9abf +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/43e98ed206f05738ae305e7e1b09a840 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/468da8933ba442b88b2f4b0e40c2ac30 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/48ef3fa68e9084c7cfa84e525decc318 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/4b68dcc030691297629a7156361018dc +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/50368b1bd77c9130d821cbad89ab83ac +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/511a980807b8d16fc3fb839991041865 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/516a0973874a73d0d15feec9448f7466 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/569e21b0ca1a230c7880f8d7a8b1febf +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/5b5543d2ed5bed100f1739fc12ebf2c5 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/5c10dbffb918651dc0498579ba9a6853 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/5c366b5370316b3e9c03d1a58cb5eb44 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/5fcb9466e0d5cb0e31b35957fe2d3901 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/61da396fb86c5ecd844a2d83ac759b4b +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/624ba87170059068845a4651b3cd2c7c +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/6391f61b6121feda70da6d0a22520fdd +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/653a981829c12a52bd57b7918168a148 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/66479793d9e5683d9f7fa67522d1962d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/69c589bd224ee0df5ab02e4568e0ab39 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/6dd7c564897b7e66eecbb180baeef2c6 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/6e2b92a4e6966cb78e63207bc7888391 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/70adb410f59a0edc5aea8c2b2ef8a441 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/72cbfd5bf33945bcce154f7a4feaf04d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/740ee9d355ada8cf5e9beb620f2cd5cc +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/74770a22b5d1b0b3bc3527da83706f96 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/759bf97655af50852816720db7b59fcb +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/76e9c19246c684413a02af695fa2b0bc +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/7728beeace48ca12e336d2bce0158871 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/77f49730c7b689f75a2e174fbd3ace2a +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/78021a57030fd36cf82699aad9910b26 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/796b349b06da691fe5f069f9e3947fcb +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/79e7505c70697cc7d34d4a8351c3b840 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/7b2b7d9034fc7b77daf5da1436667e6f +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/7c2ea2ca2cdd89b062bf23f44e8f599c +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/7ea112af55e6df12cdff377052b71420 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/7f27632588dd316836b009a621c0176c +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/7fcef9f644290dea8d0e4bf13f6bb8e9 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/81c6bf67419a29257ed79f442c24907d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/83656ce9260eb473c1654420e0180167 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/83e8bdddefc2dce069b56e6650135397 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/880c796f41e5d67ae68ed239acfc91e3 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/8c1c39dd537d2c9990fe9c70a5646b06 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/8d763042da5254015767385ce324b348 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/91e1ccbf65ff4d9b0f42b1159796bcf2 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/92cdfac7698b6bb68983cf317c1cedef +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/94cab8cbc120e152ce4c444492a3fc1d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/96b918c3c041b6a089c8adc870fa3aaa +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/97cbe306627b432ab3bfb52416690d1d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/98da83d396c0c00eb03937ecbc2e6bfa +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/9db04db20ec9c4a0f84ed01caa5e6e2b +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/9dc1c251f50c828fae95d6107619c53e +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/9e91711ab34bbf89ad1cfb4351027d36 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/9f587881f98b328b656e6456178418b5 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/9fc981560caba00621bb95d0974ad076 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/9fd4385f8fda99f3ddd3f133a89231d1 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/a32ab71649e3db15eca95bcc3a7588da +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/a497c976969bdbb1f69875358d39d3b5 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/b06058d455770c1d9db6b6670bc4bf4d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/b3da405f1e68470ad6146a1322f2438c +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/b4ba5853663f6721d15942ce08dd76bf +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/b6f1534bcdbff92a16c85487f363235a +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/b9c57b9750f8af3551b1a5d9e27f0a92 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/bb5be6a0ee889a15214e2442aee8c6e1 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/bc80a81b2d67b5ad40f3c7a2bb6e6f22 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/bfaba27d5ce71d292f453659b0755511 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/bfac6cd2984fbd5e0d762389e3c37164 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/c17bec9e3b5db6d8385c3d6eb362e628 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/c1a9eceddc0a1e41eb2992e9204f71e6 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/c50cd87be040044504b5c3fde1047e24 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/c5907cfd07b24ad19b8c80e8af618a57 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/c8da5594caf845a183dd1c6cd45c5433 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/cbc6968ed49fa14db439a64dd0a46abc +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/cedf710ee090647b81c08675583eca62 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/cf1e3cebfad43293c3c470a5e437ebc9 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/d5a14f86bb4b422fdd8eb4722d966c9a +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/d66b9cdd3230f9e5354e495e17097c49 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/dfa0ed87d851222fe58ada385e3f037d +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/e1aa402390382db4d97b27cb094485fa +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/e4f1db35ef9d9fbbf53252a44e381eb8 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/e57eb6c1ad51fd8c13afc0e719a259b5 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/e7c37b542e914e392ec326190cea1aa2 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/e923d7e19c216d4a924831f3896e007a +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/e96a414a621483bbc89e73f11be5e7b4 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/eafcfc3d2561c18743c1b32f0f710c68 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/ecdd630f5466d45a2afa7515aaa5fc3b +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/ee60a0a35d60cff425373970547694bd +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/eee2c36b75709b0c3797c2a151fdd5d3 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f104b66c0f89b453d0c8c73980fbab18 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f26d1bc86590415685e9836ad75d1774 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f4081e868eb565527099dba2c9d8c4de +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f813030b97e30415ad276bbd1f7e1fb4 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f8e3e28bc9640c25da58aea46c3ac4b3 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f9169d0a8b70eaf95de52b3c6ad51105 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/f939450f7a481e3fbeb158b81b39c624 +0 -0
- data/webapp/tmp/cache/assets/development/sprockets/fce73296b8298ac4c74b3e95cde4dfdb +0 -0
- metadata +941 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# chef-solo-search
|
|
2
|
+
|
|
3
|
+
[](https://travis-ci.org/edelight/chef-solo-search)
|
|
4
|
+
|
|
5
|
+
Chef-solo-search is a cookbook library that adds data bag search powers
|
|
6
|
+
to Chef Solo. Data bag support was added to Chef Solo by Chef 0.10.4.
|
|
7
|
+
Please see *Supported queries* for a list of query types which are supported.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
* ruby >= 1.8
|
|
12
|
+
* ruby-chef >= 0.10.4
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
In order to use this extension, create a (dummy-) cookbook and add a directory
|
|
17
|
+
called *libraries*. Next copy *libraries/search.rb* and *libraries/parser.rb* to the newly created directory.
|
|
18
|
+
Now you have to make sure chef-solo knows about data bags, therefore add
|
|
19
|
+
|
|
20
|
+
data_bag_path "<node_work_path>/data_bags"
|
|
21
|
+
|
|
22
|
+
to the config file of chef-solo (defaults to /etc/chef/solo.rb).
|
|
23
|
+
|
|
24
|
+
The same for your roles, add
|
|
25
|
+
|
|
26
|
+
role_path "<node_work_path>/roles"
|
|
27
|
+
|
|
28
|
+
## Supported queries
|
|
29
|
+
|
|
30
|
+
The search methods supports a basic sub-set of the lucene query language.
|
|
31
|
+
Sample supported queries are:
|
|
32
|
+
|
|
33
|
+
### General queries:
|
|
34
|
+
|
|
35
|
+
search(:users, "*:*")
|
|
36
|
+
search(:users)
|
|
37
|
+
search(:users, nil)
|
|
38
|
+
getting all items in ':users'
|
|
39
|
+
search(:users, "username:*")
|
|
40
|
+
search(:users, "username:[* TO *]")
|
|
41
|
+
getting all items from ':users' which have a 'username' attribute
|
|
42
|
+
search(:users, "(NOT username:*)")
|
|
43
|
+
search(:users, "(NOT username:[* TO *])")
|
|
44
|
+
getting all items from ':users' which don't have a 'username' attribute
|
|
45
|
+
|
|
46
|
+
### Queries on attributes with string values:
|
|
47
|
+
|
|
48
|
+
search(:users, "username:speedy")
|
|
49
|
+
getting all items from ':users' with username equals 'speedy'
|
|
50
|
+
search(:users, "NOT username:speedy")
|
|
51
|
+
getting all items from ':users' with username is unequal to 'speedy'
|
|
52
|
+
search(:users, "username:spe*")
|
|
53
|
+
getting all items which 'username'-value begins with 'spe'
|
|
54
|
+
|
|
55
|
+
### Queries on attributes with array values:
|
|
56
|
+
|
|
57
|
+
search(:users, "children:tom")
|
|
58
|
+
getting all items which 'children' attribute contains 'tom'
|
|
59
|
+
search(:users, "children:t*")
|
|
60
|
+
getting all items which have at least one element in 'children'
|
|
61
|
+
which starts with 't'
|
|
62
|
+
|
|
63
|
+
### Queries on attributes with boolean values:
|
|
64
|
+
|
|
65
|
+
search(:users, "married:true")
|
|
66
|
+
|
|
67
|
+
### Queries in attributes with integer values:
|
|
68
|
+
|
|
69
|
+
search(:users, "age:35")
|
|
70
|
+
|
|
71
|
+
### OR conditions in queries:
|
|
72
|
+
|
|
73
|
+
search(:users, "age:42 OR age:22")
|
|
74
|
+
|
|
75
|
+
### AND conditions in queries:
|
|
76
|
+
|
|
77
|
+
search(:users, "married:true AND age:35")
|
|
78
|
+
|
|
79
|
+
### NOT condition in queries:
|
|
80
|
+
|
|
81
|
+
search(:users, "children:tom NOT gender:female")
|
|
82
|
+
|
|
83
|
+
### More complex queries:
|
|
84
|
+
|
|
85
|
+
search(:users, "children:tom NOT gender:female AND age:42")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## Supported Objects
|
|
89
|
+
The search methods have support for 'roles', 'nodes' and 'databags'.
|
|
90
|
+
|
|
91
|
+
### Roles
|
|
92
|
+
You can use the standard role objects in json form and put them into your role path
|
|
93
|
+
|
|
94
|
+
{
|
|
95
|
+
"name": "monitoring",
|
|
96
|
+
"default_attributes": { },
|
|
97
|
+
"override_attributes": { },
|
|
98
|
+
"json_class": "Chef::Role",
|
|
99
|
+
"description": "This is just a monitoring role, no big deal.",
|
|
100
|
+
"run_list": [
|
|
101
|
+
],
|
|
102
|
+
"chef_type": "role"
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
### Nodes
|
|
106
|
+
Nodes are injected through a databag called 'node'. Create a databag called 'node' and put your json files there
|
|
107
|
+
You can use the standard node objects in json form.
|
|
108
|
+
|
|
109
|
+
{
|
|
110
|
+
"id": "vagrant",
|
|
111
|
+
"name": "vagrant-vm",
|
|
112
|
+
"chef_environment": "_default",
|
|
113
|
+
"json_class": "Chef::Node",
|
|
114
|
+
"automatic": {
|
|
115
|
+
"hostname": "vagrant.vm",
|
|
116
|
+
"os": "centos"
|
|
117
|
+
},
|
|
118
|
+
"normal": {
|
|
119
|
+
},
|
|
120
|
+
"chef_type": "node",
|
|
121
|
+
"default": {
|
|
122
|
+
},
|
|
123
|
+
"override": {
|
|
124
|
+
},
|
|
125
|
+
"run_list": [
|
|
126
|
+
"role[monitoring]"
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
### Databags
|
|
131
|
+
You can use the standard databag objects in json form
|
|
132
|
+
|
|
133
|
+
{
|
|
134
|
+
"id": "my-ssh",
|
|
135
|
+
"hostgroup_name": "all",
|
|
136
|
+
"command_line": "$USER1$/check_ssh $HOSTADDRESS$"
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
## Running tests
|
|
140
|
+
|
|
141
|
+
Running tests is as simple as:
|
|
142
|
+
|
|
143
|
+
% rake test
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011, edelight GmbH
|
|
3
|
+
#
|
|
4
|
+
# Authors:
|
|
5
|
+
# Markus Korn <markus.korn@edelight.de>
|
|
6
|
+
# Seth Chisamore <schisamo@opscode.com>
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
module Search
|
|
22
|
+
module Overrides
|
|
23
|
+
# Overwrite the search method of recipes to operate locally by using
|
|
24
|
+
# data found in data_bags.
|
|
25
|
+
# Only very basic lucene syntax is supported and also sorting the result
|
|
26
|
+
# is not implemented, if this search method does not support a given query
|
|
27
|
+
# an exception is raised.
|
|
28
|
+
# This search() method returns a block iterator or an Array, depending
|
|
29
|
+
# on how this method is called.
|
|
30
|
+
def search(obj, query=nil, sort=nil, start=0, rows=1000, &block)
|
|
31
|
+
if !sort.nil?
|
|
32
|
+
raise "Sorting search results is not supported"
|
|
33
|
+
end
|
|
34
|
+
_query = Query.parse(query)
|
|
35
|
+
if _query.nil?
|
|
36
|
+
raise "Query #{query} is not supported"
|
|
37
|
+
end
|
|
38
|
+
_result = []
|
|
39
|
+
|
|
40
|
+
case obj
|
|
41
|
+
when :node
|
|
42
|
+
nodes = search_nodes(_query, start, rows, &block)
|
|
43
|
+
_result += nodes
|
|
44
|
+
when :role
|
|
45
|
+
roles = search_roles(_query, start, rows, &block)
|
|
46
|
+
_result += roles
|
|
47
|
+
else
|
|
48
|
+
bags = search_data_bag(_query, obj, start, rows, &block)
|
|
49
|
+
_result += bags
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if block_given?
|
|
54
|
+
pos = 0
|
|
55
|
+
while (pos >= start and pos < (start + rows) and pos < _result.size)
|
|
56
|
+
yield _result[pos]
|
|
57
|
+
pos += 1
|
|
58
|
+
end
|
|
59
|
+
else
|
|
60
|
+
return _result.slice(start, rows)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def search_nodes(_query, start, rows, &block)
|
|
65
|
+
_result = []
|
|
66
|
+
node_path = Chef::Config[:nodes_path] || File.join(Chef::Config[:data_bag_path], "node")
|
|
67
|
+
Dir.glob(File.join(node_path, "*.json")).map do |f|
|
|
68
|
+
# parse and hashify the node
|
|
69
|
+
node = Chef::JSONCompat.from_json(IO.read(f))
|
|
70
|
+
if _query.match(node.to_hash)
|
|
71
|
+
_result << node
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
return _result
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def search_roles(_query, start, rows, &block)
|
|
78
|
+
_result = []
|
|
79
|
+
Dir.glob(File.join(Chef::Config[:role_path], "*.json")).map do |f|
|
|
80
|
+
# parse and hashify the role
|
|
81
|
+
role = Chef::JSONCompat.from_json(IO.read(f))
|
|
82
|
+
if _query.match(role.to_hash)
|
|
83
|
+
_result << role
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
return _result
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def search_data_bag(_query, bag_name, start, rows, &block)
|
|
90
|
+
_result = []
|
|
91
|
+
data_bag(bag_name.to_s).each do |bag_item_id|
|
|
92
|
+
bag_item = data_bag_item(bag_name.to_s, bag_item_id)
|
|
93
|
+
if _query.match(bag_item)
|
|
94
|
+
_result << bag_item
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
return _result
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011, edelight GmbH
|
|
3
|
+
#
|
|
4
|
+
# Authors:
|
|
5
|
+
# Markus Korn <markus.korn@edelight.de>
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'chef/solr_query/query_transform'
|
|
21
|
+
|
|
22
|
+
# mock QueryTransform such that we can access the location of the lucene grammar
|
|
23
|
+
class Chef
|
|
24
|
+
class SolrQuery
|
|
25
|
+
class QueryTransform
|
|
26
|
+
def self.base_path
|
|
27
|
+
class_variable_get(:@@base_path)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def build_flat_hash(hsh, prefix="")
|
|
34
|
+
result = {}
|
|
35
|
+
hsh.each_pair do |key, value|
|
|
36
|
+
if value.kind_of?(Hash)
|
|
37
|
+
result.merge!(build_flat_hash(value, "#{prefix}#{key}_"))
|
|
38
|
+
else
|
|
39
|
+
result[prefix+key] = value
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
result
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
module Lucene
|
|
46
|
+
|
|
47
|
+
class Term < Treetop::Runtime::SyntaxNode
|
|
48
|
+
# compares a query value and a value, tailing '*'-wildcards are handled correctly.
|
|
49
|
+
# Value can either be a string or an array, all other objects are converted
|
|
50
|
+
# to a string and than checked.
|
|
51
|
+
def match( value )
|
|
52
|
+
if value.is_a?(Array)
|
|
53
|
+
value.any?{ |x| self.match(x) }
|
|
54
|
+
else
|
|
55
|
+
File.fnmatch(self.text_value, value.to_s)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class Field < Treetop::Runtime::SyntaxNode
|
|
61
|
+
# simple field -> value matches, supporting tailing '*'-wildcards in keys
|
|
62
|
+
# as well as in values
|
|
63
|
+
def match( item )
|
|
64
|
+
keys = self.elements[0].match(item)
|
|
65
|
+
if keys.nil?
|
|
66
|
+
false
|
|
67
|
+
else
|
|
68
|
+
keys.any?{ |key| self.elements[1].match(item[key]) }
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# we don't support range matches
|
|
74
|
+
# range of integers would be easy to implement
|
|
75
|
+
# but string ranges are hard
|
|
76
|
+
class FiledRange < Treetop::Runtime::SyntaxNode
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# we handle '[* TO *]' as a special case since it is common in
|
|
80
|
+
# cookbooks for matching the existence of keys
|
|
81
|
+
class InclFieldRange
|
|
82
|
+
def match(item)
|
|
83
|
+
field = self.elements[0].text_value
|
|
84
|
+
range_start = self.elements[1].transform
|
|
85
|
+
range_end = self.elements[2].transform
|
|
86
|
+
if range_start == "*" and range_end == "*"
|
|
87
|
+
!!item[field]
|
|
88
|
+
else
|
|
89
|
+
raise "Ranges not really supported yet"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class ExclFieldRange < FieldRange
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class RangeValue < Treetop::Runtime::SyntaxNode
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
class FieldName < Treetop::Runtime::SyntaxNode
|
|
101
|
+
def match( item )
|
|
102
|
+
if self.text_value.count("_") > 0
|
|
103
|
+
item.merge!(build_flat_hash(item))
|
|
104
|
+
end
|
|
105
|
+
if self.text_value.end_with?("*")
|
|
106
|
+
part = self.text_value.chomp("*")
|
|
107
|
+
item.keys.collect{ |key| key.start_with?(part)? key: nil}.compact
|
|
108
|
+
else
|
|
109
|
+
if item.has_key?(self.text_value)
|
|
110
|
+
[self.text_value,]
|
|
111
|
+
else
|
|
112
|
+
nil
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
class Body < Treetop::Runtime::SyntaxNode
|
|
119
|
+
def match( item )
|
|
120
|
+
self.elements[0].match( item )
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
class Group < Treetop::Runtime::SyntaxNode
|
|
125
|
+
def match( item )
|
|
126
|
+
self.elements[0].match(item)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
class BinaryOp < Treetop::Runtime::SyntaxNode
|
|
131
|
+
def match( item )
|
|
132
|
+
self.elements[1].match(
|
|
133
|
+
self.elements[0].match(item),
|
|
134
|
+
self.elements[2].match(item)
|
|
135
|
+
)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
class OrOperator < Treetop::Runtime::SyntaxNode
|
|
140
|
+
def match( cond1, cond2 )
|
|
141
|
+
cond1 or cond2
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
class AndOperator < Treetop::Runtime::SyntaxNode
|
|
146
|
+
def match( cond1, cond2 )
|
|
147
|
+
cond1 and cond2
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# we don't support fuzzy string matching
|
|
152
|
+
class FuzzyOp < Treetop::Runtime::SyntaxNode
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
class BoostOp < Treetop::Runtime::SyntaxNode
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
class FuzzyParam < Treetop::Runtime::SyntaxNode
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
class UnaryOp < Treetop::Runtime::SyntaxNode
|
|
162
|
+
def match( item )
|
|
163
|
+
self.elements[0].match(
|
|
164
|
+
self.elements[1].match(item)
|
|
165
|
+
)
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
class NotOperator < Treetop::Runtime::SyntaxNode
|
|
170
|
+
def match( cond )
|
|
171
|
+
not cond
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class RequiredOperator < Treetop::Runtime::SyntaxNode
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
class ProhibitedOperator < Treetop::Runtime::SyntaxNode
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class Phrase < Treetop::Runtime::SyntaxNode
|
|
182
|
+
# a quoted ::Term
|
|
183
|
+
def match( value )
|
|
184
|
+
self.elements[0].match(value)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
class Query
|
|
190
|
+
# initialize the parser by using the grammar shipped with chef
|
|
191
|
+
@@grammar = File.join(Chef::SolrQuery::QueryTransform.base_path, "lucene.treetop")
|
|
192
|
+
Treetop.load(@@grammar)
|
|
193
|
+
@@parser = LuceneParser.new
|
|
194
|
+
|
|
195
|
+
def self.parse(data)
|
|
196
|
+
# parse the query into a query tree
|
|
197
|
+
if data.nil?
|
|
198
|
+
data = "*:*"
|
|
199
|
+
end
|
|
200
|
+
tree = @@parser.parse(data)
|
|
201
|
+
if tree.nil?
|
|
202
|
+
msg = "Parse error at offset: #{@@parser.index}\n"
|
|
203
|
+
msg += "Reason: #{@@parser.failure_reason}"
|
|
204
|
+
raise "Query #{data} is not supported: #{msg}"
|
|
205
|
+
end
|
|
206
|
+
self.clean_tree(tree)
|
|
207
|
+
tree
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
private
|
|
211
|
+
|
|
212
|
+
def self.clean_tree(root_node)
|
|
213
|
+
# remove all SyntaxNode elements from the tree, we don't need them as
|
|
214
|
+
# the related ruby class already knowns what to do.
|
|
215
|
+
return if root_node.elements.nil?
|
|
216
|
+
root_node.elements.delete_if do |node|
|
|
217
|
+
node.class.name == "Treetop::Runtime::SyntaxNode"
|
|
218
|
+
end
|
|
219
|
+
root_node.elements.each { |node| self.clean_tree(node) }
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2011, edelight GmbH
|
|
3
|
+
#
|
|
4
|
+
# Authors:
|
|
5
|
+
# Markus Korn <markus.korn@edelight.de>
|
|
6
|
+
# Seth Chisamore <schisamo@opscode.com>
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
puts "DEBUG: Chef::Config[:solo] = #{Chef::Config[:solo]}"
|
|
22
|
+
if Chef::Config[:solo]
|
|
23
|
+
|
|
24
|
+
# add currrent dir to load path
|
|
25
|
+
$: << File.dirname(__FILE__)
|
|
26
|
+
|
|
27
|
+
# All chef/solr_query/* classes were removed in Chef 11; Load vendored copy
|
|
28
|
+
# that ships with this cookbook
|
|
29
|
+
$: << File.expand_path("vendor", File.dirname(__FILE__)) if Chef::VERSION.to_i >= 11
|
|
30
|
+
|
|
31
|
+
# Ensure the treetop gem is installed and available
|
|
32
|
+
begin
|
|
33
|
+
require 'treetop'
|
|
34
|
+
rescue LoadError
|
|
35
|
+
run_context = Chef::RunContext.new(Chef::Node.new, {}, Chef::EventDispatch::Dispatcher.new)
|
|
36
|
+
chef_gem = Chef::Resource::ChefGem.new("treetop", run_context)
|
|
37
|
+
chef_gem.version('>= 1.4')
|
|
38
|
+
chef_gem.run_action(:install)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
require 'search/overrides'
|
|
42
|
+
require 'search/parser'
|
|
43
|
+
|
|
44
|
+
module Search; class Helper; end; end
|
|
45
|
+
|
|
46
|
+
# The search and data_bag related methods moved form `Chef::Mixin::Language`
|
|
47
|
+
# to `Chef::DSL::DataQuery` in Chef 11.
|
|
48
|
+
if Chef::VERSION.to_i >= 11
|
|
49
|
+
module Chef::DSL::DataQuery
|
|
50
|
+
def self.included(base)
|
|
51
|
+
base.send(:include, Search::Overrides)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
Search::Helper.send(:include, Chef::DSL::DataQuery)
|
|
55
|
+
else
|
|
56
|
+
module Chef::Mixin::Language
|
|
57
|
+
def self.included(base)
|
|
58
|
+
base.send(:include, Search::Overrides)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
Search::Helper.send(:include, Chef::Mixin::Language)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class Chef
|
|
65
|
+
class Search
|
|
66
|
+
class Query
|
|
67
|
+
def initialize(*args)
|
|
68
|
+
end
|
|
69
|
+
def search(*args, &block)
|
|
70
|
+
::Search::Helper.new.search(*args, &block)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
grammar Lucene
|
|
20
|
+
|
|
21
|
+
rule body
|
|
22
|
+
(expression / space)* <Body>
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
rule expression
|
|
26
|
+
operation / group / field / field_range / term / string
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
rule term
|
|
30
|
+
keyword valid_letter+ <Term> / !keyword !"?" valid_letter <Term>
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
rule field
|
|
34
|
+
field_name ":" (term/string/group) <Field>
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
rule field_range
|
|
38
|
+
field_name ":" "[" range_value " TO " range_value "]" <InclFieldRange>
|
|
39
|
+
/
|
|
40
|
+
field_name ":" "{" range_value " TO " range_value "}" <ExclFieldRange>
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
rule field_name
|
|
44
|
+
!keyword valid_letter+ <FieldName>
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
rule range_value
|
|
48
|
+
valid_letter+ <RangeValue> / "*" <RangeValue>
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
rule group
|
|
52
|
+
space? '(' body ')' space? <Group>
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
rule operation
|
|
56
|
+
binary_op / unary_op / fuzzy_op / boost_op
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
rule unary_op
|
|
60
|
+
not_op / required_op / prohibited_op
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rule binary_op
|
|
64
|
+
(group / field / field_range / term) space? boolean_operator space+ body <BinaryOp>
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
rule boolean_operator
|
|
68
|
+
and_operator / or_operator
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
rule and_operator
|
|
72
|
+
'AND' <AndOperator> / '&&' <AndOperator>
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
rule or_operator
|
|
76
|
+
'OR' <OrOperator> / '||' <OrOperator>
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
rule not_op
|
|
80
|
+
not_operator space (group / field / field_range / term / string) <UnaryOp>
|
|
81
|
+
/
|
|
82
|
+
bang_operator space? (group / field / field_range / term / string) <UnaryOp>
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
rule not_operator
|
|
86
|
+
'NOT' <NotOperator>
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
rule bang_operator
|
|
90
|
+
'!' <NotOperator>
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
rule required_op
|
|
94
|
+
!valid_letter required_operator (term/string) <UnaryOp>
|
|
95
|
+
/
|
|
96
|
+
required_operator (term/string) <UnaryOp>
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
rule required_operator
|
|
100
|
+
'+' <RequiredOperator>
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
rule prohibited_op
|
|
104
|
+
!valid_letter prohibited_operator (field/field_range/term/string) <UnaryOp>
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
rule prohibited_operator
|
|
108
|
+
'-' <ProhibitedOperator>
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
rule boost_op
|
|
112
|
+
(term/string) '^' fuzzy_param <BoostOp>
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
rule fuzzy_op
|
|
116
|
+
(term/string) '~' fuzzy_param? (space / !valid_letter) <FuzzyOp>
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
rule fuzzy_param
|
|
120
|
+
[0-9] '.'? [0-9] <FuzzyParam> / [0-9]+ <FuzzyParam>
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
rule string
|
|
124
|
+
'"' term (space term)* '"' <Phrase>
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
rule keyword
|
|
128
|
+
'AND' / 'OR' / 'NOT'
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
rule valid_letter
|
|
132
|
+
start_letter+ ([a-zA-Z0-9@*?_.-] / '\\' special_char)*
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
rule start_letter
|
|
136
|
+
[a-zA-Z0-9@._*] / '\\' special_char
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
rule end_letter
|
|
140
|
+
[a-zA-Z0-9*?_.] / '\\' special_char
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
rule special_char
|
|
144
|
+
[-+&|!(){}\[\]^"~*?:\\]
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
rule space
|
|
148
|
+
[\s]+
|
|
149
|
+
end
|
|
150
|
+
end
|