puppet 0.23.2 → 0.24.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +112 -1
- data/README +1 -1
- data/Rakefile +1 -2
- data/bin/filebucket +2 -3
- data/bin/puppet +55 -39
- data/bin/puppetca +20 -11
- data/bin/puppetd +30 -31
- data/bin/puppetdoc +27 -28
- data/bin/puppetmasterd +24 -42
- data/bin/puppetrun +3 -4
- data/bin/ralsh +5 -7
- data/conf/redhat/puppet.spec +4 -1
- data/conf/solaris/smf/svc-puppetd +1 -1
- data/conf/solaris/smf/svc-puppetmasterd +1 -1
- data/examples/code/allatonce +1 -1
- data/examples/code/assignments +1 -1
- data/examples/code/components +1 -1
- data/examples/code/file.bl +1 -1
- data/examples/code/filedefaults +1 -1
- data/examples/code/fileparsing +1 -1
- data/examples/code/filerecursion +1 -1
- data/examples/code/functions +1 -1
- data/examples/code/groups +1 -1
- data/examples/code/head +1 -1
- data/examples/code/importing +1 -1
- data/examples/code/modules/sample-module.pp +10 -0
- data/examples/code/modules/sample-module/README.txt +17 -0
- data/examples/code/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +36 -0
- data/examples/code/modules/sample-module/manifests/init.pp +12 -0
- data/examples/code/modules/sample-module/templates/sample.erb +5 -0
- data/examples/code/nodes +1 -1
- data/examples/code/one +1 -1
- data/examples/code/relationships +1 -1
- data/examples/code/selectors +1 -1
- data/examples/code/simpletests +1 -1
- data/examples/root/etc/init.d/sleeper +1 -1
- data/examples/root/etc/puppet/fileserver.conf +1 -1
- data/ext/ldap/puppet.schema +1 -1
- data/ext/module_puppet +30 -21
- data/ext/puppet-test +3 -3
- data/ext/vim/filetype.vim +1 -1
- data/install.rb +1 -2
- data/lib/puppet.rb +20 -19
- data/lib/puppet/checksum.rb +57 -0
- data/lib/puppet/config_stores/rest.rb +1 -1
- data/lib/puppet/daemon.rb +0 -1
- data/lib/puppet/{configuration.rb → defaults.rb} +56 -23
- data/lib/puppet/dsl.rb +22 -116
- data/lib/puppet/error.rb +0 -9
- data/lib/puppet/event.rb +0 -1
- data/lib/puppet/external/gratr/rdot.rb +0 -1
- data/lib/puppet/external/lock.rb +0 -1
- data/lib/puppet/feature/base.rb +3 -2
- data/lib/puppet/feature/rails.rb +0 -1
- data/lib/puppet/file_serving.rb +7 -0
- data/lib/puppet/file_serving/configuration.rb +129 -0
- data/lib/puppet/file_serving/configuration/parser.rb +124 -0
- data/lib/puppet/file_serving/content.rb +34 -0
- data/lib/puppet/file_serving/file_base.rb +63 -0
- data/lib/puppet/file_serving/fileset.rb +138 -0
- data/lib/puppet/file_serving/indirection_hooks.rb +44 -0
- data/lib/puppet/file_serving/metadata.rb +69 -0
- data/lib/puppet/file_serving/mount.rb +186 -0
- data/lib/puppet/file_serving/terminus_helper.rb +19 -0
- data/lib/puppet/indirector.rb +68 -0
- data/lib/puppet/indirector/catalog/compiler.rb +173 -0
- data/lib/puppet/indirector/catalog/yaml.rb +24 -0
- data/lib/puppet/indirector/checksum/file.rb +33 -0
- data/lib/puppet/indirector/code.rb +6 -0
- data/lib/puppet/indirector/direct_file_server.rb +27 -0
- data/lib/puppet/indirector/exec.rb +57 -0
- data/lib/puppet/indirector/facts/facter.rb +65 -0
- data/lib/puppet/indirector/facts/memory.rb +9 -0
- data/lib/puppet/indirector/facts/yaml.rb +7 -0
- data/lib/puppet/indirector/file.rb +54 -0
- data/lib/puppet/indirector/file_content.rb +5 -0
- data/lib/puppet/indirector/file_content/file.rb +11 -0
- data/lib/puppet/indirector/file_content/file_server.rb +11 -0
- data/lib/puppet/indirector/file_content/modules.rb +11 -0
- data/lib/puppet/indirector/file_content/rest.rb +12 -0
- data/lib/puppet/indirector/file_metadata.rb +5 -0
- data/lib/puppet/indirector/file_metadata/file.rb +26 -0
- data/lib/puppet/indirector/file_metadata/file_server.rb +11 -0
- data/lib/puppet/indirector/file_metadata/modules.rb +17 -0
- data/lib/puppet/indirector/file_metadata/rest.rb +12 -0
- data/lib/puppet/indirector/file_server.rb +56 -0
- data/lib/puppet/indirector/indirection.rb +237 -0
- data/lib/puppet/indirector/ldap.rb +90 -0
- data/lib/puppet/indirector/memory.rb +21 -0
- data/lib/puppet/indirector/module_files.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +52 -0
- data/lib/puppet/indirector/node/ldap.rb +120 -0
- data/lib/puppet/indirector/node/memory.rb +10 -0
- data/lib/puppet/indirector/node/plain.rb +19 -0
- data/lib/puppet/indirector/node/rest.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +7 -0
- data/lib/puppet/indirector/plain.rb +9 -0
- data/lib/puppet/indirector/report/processor.rb +50 -0
- data/lib/puppet/indirector/rest.rb +8 -0
- data/lib/puppet/indirector/ssl_rsa.rb +5 -0
- data/lib/puppet/indirector/ssl_rsa/file.rb +33 -0
- data/lib/puppet/indirector/terminus.rb +178 -0
- data/lib/puppet/indirector/yaml.rb +57 -0
- data/lib/puppet/metatype/attributes.rb +3 -3
- data/lib/puppet/metatype/closure.rb +0 -66
- data/lib/puppet/metatype/container.rb +0 -9
- data/lib/puppet/metatype/evaluation.rb +10 -2
- data/lib/puppet/metatype/instances.rb +16 -30
- data/lib/puppet/metatype/manager.rb +1 -2
- data/lib/puppet/metatype/metaparams.rb +27 -21
- data/lib/puppet/metatype/providers.rb +3 -2
- data/lib/puppet/metatype/relationships.rb +1 -2
- data/lib/puppet/metatype/schedules.rb +0 -1
- data/lib/puppet/metatype/tags.rb +0 -1
- data/lib/puppet/module.rb +60 -32
- data/lib/puppet/network/authconfig.rb +0 -1
- data/lib/puppet/network/authorization.rb +0 -1
- data/lib/puppet/network/authstore.rb +0 -1
- data/lib/puppet/network/client.rb +13 -4
- data/lib/puppet/network/client/ca.rb +4 -5
- data/lib/puppet/network/client/dipper.rb +0 -1
- data/lib/puppet/network/client/file.rb +0 -1
- data/lib/puppet/network/client/master.rb +127 -235
- data/lib/puppet/network/client/proxy.rb +0 -1
- data/lib/puppet/network/client/report.rb +0 -1
- data/lib/puppet/network/client/resource.rb +0 -1
- data/lib/puppet/network/client/runner.rb +0 -1
- data/lib/puppet/network/client/status.rb +0 -1
- data/lib/puppet/network/client_request.rb +0 -1
- data/lib/puppet/network/handler.rb +5 -2
- data/lib/puppet/network/handler/ca.rb +1 -2
- data/lib/puppet/network/handler/configuration.rb +184 -0
- data/lib/puppet/network/handler/filebucket.rb +1 -2
- data/lib/puppet/network/handler/fileserver.rb +279 -107
- data/lib/puppet/network/handler/master.rb +57 -152
- data/lib/puppet/network/handler/report.rb +6 -65
- data/lib/puppet/network/handler/resource.rb +5 -13
- data/lib/puppet/network/handler/runner.rb +3 -4
- data/lib/puppet/network/handler/status.rb +0 -1
- data/lib/puppet/network/http.rb +13 -0
- data/lib/puppet/network/http/handler.rb +109 -0
- data/lib/puppet/network/http/mongrel.rb +54 -0
- data/lib/puppet/network/http/mongrel/rest.rb +37 -0
- data/lib/puppet/network/http/mongrel/xmlrpc.rb +4 -0
- data/lib/puppet/network/http/webrick.rb +51 -0
- data/lib/puppet/network/http/webrick/rest.rb +41 -0
- data/lib/puppet/network/http/webrick/xmlrpc.rb +4 -0
- data/lib/puppet/network/http_server.rb +3 -0
- data/lib/puppet/network/{server → http_server}/mongrel.rb +11 -5
- data/lib/puppet/network/{server → http_server}/webrick.rb +9 -5
- data/lib/puppet/network/rest_controller.rb +2 -0
- data/lib/puppet/network/rights.rb +0 -1
- data/lib/puppet/network/server.rb +63 -3
- data/lib/puppet/network/xmlrpc/client.rb +90 -23
- data/lib/puppet/network/xmlrpc/processor.rb +0 -1
- data/lib/puppet/network/xmlrpc/server.rb +0 -1
- data/lib/puppet/network/xmlrpc/webrick_servlet.rb +0 -1
- data/lib/puppet/node.rb +165 -0
- data/lib/puppet/node/catalog.rb +480 -0
- data/lib/puppet/node/environment.rb +46 -0
- data/lib/puppet/node/facts.rb +36 -0
- data/lib/puppet/parameter.rb +34 -28
- data/lib/puppet/parser/ast.rb +0 -1
- data/lib/puppet/parser/ast/astarray.rb +30 -53
- data/lib/puppet/parser/ast/branch.rb +0 -10
- data/lib/puppet/parser/ast/caseopt.rb +0 -11
- data/lib/puppet/parser/ast/casestatement.rb +0 -12
- data/lib/puppet/parser/ast/collection.rb +1 -3
- data/lib/puppet/parser/ast/collexpr.rb +0 -2
- data/lib/puppet/parser/ast/{component.rb → definition.rb} +58 -72
- data/lib/puppet/parser/ast/else.rb +0 -10
- data/lib/puppet/parser/ast/function.rb +0 -2
- data/lib/puppet/parser/ast/hostclass.rb +21 -19
- data/lib/puppet/parser/ast/ifstatement.rb +0 -13
- data/lib/puppet/parser/ast/leaf.rb +0 -8
- data/lib/puppet/parser/ast/node.rb +13 -10
- data/lib/puppet/parser/ast/resource.rb +75 -0
- data/lib/puppet/parser/ast/{resourcedefaults.rb → resource_defaults.rb} +4 -20
- data/lib/puppet/parser/ast/{resourceoverride.rb → resource_override.rb} +3 -5
- data/lib/puppet/parser/ast/resource_reference.rb +66 -0
- data/lib/puppet/parser/ast/resourceparam.rb +0 -14
- data/lib/puppet/parser/ast/selector.rb +0 -10
- data/lib/puppet/parser/ast/tag.rb +0 -2
- data/lib/puppet/parser/ast/vardef.rb +0 -14
- data/lib/puppet/parser/collector.rb +83 -101
- data/lib/puppet/parser/compile.rb +509 -0
- data/lib/puppet/parser/functions.rb +10 -10
- data/lib/puppet/parser/interpreter.rb +44 -662
- data/lib/puppet/parser/lexer.rb +1 -3
- data/lib/puppet/parser/parser.rb +674 -701
- data/lib/puppet/parser/parser_support.rb +33 -24
- data/lib/puppet/parser/resource.rb +219 -162
- data/lib/puppet/parser/resource/param.rb +1 -2
- data/lib/puppet/parser/resource/reference.rb +24 -16
- data/lib/puppet/parser/scope.rb +48 -459
- data/lib/puppet/parser/templatewrapper.rb +4 -5
- data/lib/puppet/pgraph.rb +10 -13
- data/lib/puppet/property.rb +25 -41
- data/lib/puppet/propertychange.rb +0 -2
- data/lib/puppet/provider.rb +15 -11
- data/lib/puppet/provider/cron/crontab.rb +6 -7
- data/lib/puppet/provider/group/groupadd.rb +0 -1
- data/lib/puppet/provider/group/netinfo.rb +0 -1
- data/lib/puppet/provider/group/pw.rb +0 -1
- data/lib/puppet/provider/host/netinfo.rb +0 -1
- data/lib/puppet/provider/host/parsed.rb +0 -1
- data/lib/puppet/provider/interface/redhat.rb +90 -91
- data/lib/puppet/provider/interface/sunos.rb +98 -81
- data/lib/puppet/provider/mailalias/aliases.rb +0 -1
- data/lib/puppet/provider/maillist/mailman.rb +2 -3
- data/lib/puppet/provider/mount.rb +10 -9
- data/lib/puppet/provider/mount/netinfo.rb +0 -1
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/nameservice.rb +0 -1
- data/lib/puppet/provider/nameservice/netinfo.rb +0 -1
- data/lib/puppet/provider/nameservice/objectadd.rb +0 -1
- data/lib/puppet/provider/nameservice/pw.rb +0 -1
- data/lib/puppet/provider/package.rb +0 -2
- data/lib/puppet/provider/package/appdmg.rb +0 -1
- data/lib/puppet/provider/package/apple.rb +0 -1
- data/lib/puppet/provider/package/apt.rb +0 -1
- data/lib/puppet/provider/package/aptitude.rb +0 -1
- data/lib/puppet/provider/package/aptrpm.rb +0 -1
- data/lib/puppet/provider/package/blastwave.rb +0 -1
- data/lib/puppet/provider/package/darwinport.rb +0 -1
- data/lib/puppet/provider/package/dpkg.rb +9 -1
- data/lib/puppet/provider/package/fink.rb +0 -1
- data/lib/puppet/provider/package/freebsd.rb +0 -1
- data/lib/puppet/provider/package/gem.rb +0 -1
- data/lib/puppet/provider/package/openbsd.rb +1 -2
- data/lib/puppet/provider/package/pkgdmg.rb +14 -15
- data/lib/puppet/provider/package/portage.rb +6 -7
- data/lib/puppet/provider/package/ports.rb +1 -4
- data/lib/puppet/provider/package/rpm.rb +31 -45
- data/lib/puppet/provider/package/sun.rb +0 -3
- data/lib/puppet/provider/package/sunfreeware.rb +0 -1
- data/lib/puppet/provider/package/up2date.rb +0 -1
- data/lib/puppet/provider/package/urpmi.rb +0 -1
- data/lib/puppet/provider/package/yum.rb +45 -14
- data/lib/puppet/provider/package/yumhelper.py +37 -0
- data/lib/puppet/provider/parsedfile.rb +2 -3
- data/lib/puppet/provider/port/parsed.rb +0 -1
- data/lib/puppet/provider/service/base.rb +4 -1
- data/lib/puppet/provider/service/debian.rb +5 -2
- data/lib/puppet/provider/service/freebsd.rb +51 -0
- data/lib/puppet/provider/service/init.rb +16 -40
- data/lib/puppet/provider/service/redhat.rb +1 -6
- data/lib/puppet/provider/service/smf.rb +0 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -1
- data/lib/puppet/provider/user/netinfo.rb +0 -1
- data/lib/puppet/provider/user/pw.rb +0 -1
- data/lib/puppet/provider/user/useradd.rb +0 -1
- data/lib/puppet/provider/zone/solaris.rb +0 -1
- data/lib/puppet/rails.rb +35 -30
- data/lib/puppet/rails/database/schema.rb +0 -1
- data/lib/puppet/rails/host.rb +6 -15
- data/lib/puppet/rails/param_name.rb +1 -2
- data/lib/puppet/rails/param_value.rb +0 -1
- data/lib/puppet/rails/puppet_class.rb +0 -1
- data/lib/puppet/rails/resource.rb +3 -5
- data/lib/puppet/reference/configuration.rb +12 -6
- data/lib/puppet/reference/indirection.rb +34 -0
- data/lib/puppet/reference/node_source.rb +9 -0
- data/lib/puppet/relationship.rb +10 -8
- data/lib/puppet/reports.rb +51 -0
- data/lib/puppet/reports/log.rb +2 -3
- data/lib/puppet/reports/rrdgraph.rb +2 -5
- data/lib/puppet/reports/store.rb +6 -7
- data/lib/puppet/reports/tagmail.rb +2 -3
- data/lib/puppet/resource_reference.rb +79 -0
- data/lib/puppet/simple_graph.rb +251 -0
- data/lib/puppet/sslcertificates.rb +19 -15
- data/lib/puppet/sslcertificates/ca.rb +56 -15
- data/lib/puppet/sslcertificates/certificate.rb +0 -1
- data/lib/puppet/sslcertificates/inventory.rb +2 -6
- data/lib/puppet/sslcertificates/monkey_patch.rb +6 -0
- data/lib/puppet/sslcertificates/support.rb +4 -5
- data/lib/puppet/transaction.rb +93 -96
- data/lib/puppet/transaction/report.rb +5 -1
- data/lib/puppet/transportable.rb +79 -125
- data/lib/puppet/type.rb +44 -10
- data/lib/puppet/type/component.rb +25 -110
- data/lib/puppet/type/cron.rb +1 -2
- data/lib/puppet/type/exec.rb +19 -13
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/host.rb +0 -1
- data/lib/puppet/type/interface.rb +6 -3
- data/lib/puppet/type/k5login.rb +87 -0
- data/lib/puppet/type/mailalias.rb +0 -1
- data/lib/puppet/type/maillist.rb +0 -1
- data/lib/puppet/type/mount.rb +7 -13
- data/lib/puppet/type/notify.rb +0 -1
- data/lib/puppet/type/package.rb +7 -63
- data/lib/puppet/type/pfile.rb +25 -32
- data/lib/puppet/type/pfile/checksum.rb +0 -1
- data/lib/puppet/type/pfile/content.rb +18 -3
- data/lib/puppet/type/pfile/ensure.rb +5 -6
- data/lib/puppet/type/pfile/group.rb +4 -1
- data/lib/puppet/type/pfile/mode.rb +0 -1
- data/lib/puppet/type/pfile/owner.rb +6 -9
- data/lib/puppet/type/pfile/source.rb +28 -11
- data/lib/puppet/type/pfile/target.rb +2 -1
- data/lib/puppet/type/pfile/type.rb +0 -1
- data/lib/puppet/type/pfilebucket.rb +0 -1
- data/lib/puppet/type/port.rb +0 -1
- data/lib/puppet/type/resources.rb +0 -1
- data/lib/puppet/type/schedule.rb +17 -15
- data/lib/puppet/type/service.rb +23 -159
- data/lib/puppet/type/sshkey.rb +0 -1
- data/lib/puppet/type/tidy.rb +15 -7
- data/lib/puppet/type/user.rb +0 -1
- data/lib/puppet/type/zone.rb +0 -1
- data/lib/puppet/util.rb +1 -2
- data/lib/puppet/util/autoload.rb +21 -23
- data/lib/puppet/util/checksums.rb +37 -0
- data/lib/puppet/util/classgen.rb +0 -1
- data/lib/puppet/util/diff.rb +71 -0
- data/lib/puppet/util/docs.rb +8 -2
- data/lib/puppet/util/errors.rb +0 -1
- data/lib/puppet/util/execution.rb +0 -1
- data/lib/puppet/util/fact_store.rb +0 -1
- data/lib/puppet/util/feature.rb +31 -22
- data/lib/puppet/util/fileparsing.rb +3 -2
- data/lib/puppet/util/filetype.rb +30 -12
- data/lib/puppet/util/graph.rb +0 -1
- data/lib/puppet/util/inifile.rb +0 -1
- data/lib/puppet/util/instance_loader.rb +11 -4
- data/lib/puppet/util/loadedfile.rb +0 -1
- data/lib/puppet/util/log.rb +0 -1
- data/lib/puppet/util/log_paths.rb +0 -1
- data/lib/puppet/util/logging.rb +0 -1
- data/lib/puppet/util/metaid.rb +0 -1
- data/lib/puppet/util/methodhelper.rb +0 -2
- data/lib/puppet/util/metric.rb +1 -2
- data/lib/puppet/util/plist.rb +0 -1
- data/lib/puppet/util/plist/generator.rb +0 -1
- data/lib/puppet/util/plist/parser.rb +0 -1
- data/lib/puppet/util/posix.rb +7 -1
- data/lib/puppet/util/provider_features.rb +11 -12
- data/lib/puppet/util/rails/collection_merger.rb +0 -1
- data/lib/puppet/util/reference.rb +2 -3
- data/lib/puppet/util/{config.rb → settings.rb} +424 -300
- data/lib/puppet/util/storage.rb +1 -3
- data/lib/puppet/util/subclass_loader.rb +0 -1
- data/lib/puppet/util/suidmanager.rb +25 -42
- data/lib/puppet/util/uri_helper.rb +22 -0
- data/lib/puppet/util/variables.rb +0 -1
- data/lib/puppet/util/warnings.rb +0 -1
- data/test/Rakefile +1 -1
- data/test/certmgr/ca.rb +8 -2
- data/test/certmgr/certmgr.rb +14 -6
- data/test/certmgr/inventory.rb +18 -30
- data/test/certmgr/support.rb +3 -2
- data/test/executables/filebucket.rb +1 -2
- data/test/executables/puppetbin.rb +1 -2
- data/test/executables/puppetca.rb +7 -2
- data/test/executables/puppetd.rb +23 -29
- data/test/executables/puppetmasterd.rb +1 -2
- data/test/executables/puppetmodule.rb +1 -2
- data/test/language/ast.rb +24 -29
- data/test/language/ast/casestatement.rb +1 -2
- data/test/language/ast/definition.rb +166 -0
- data/test/language/ast/hostclass.rb +50 -29
- data/test/language/ast/resource.rb +59 -0
- data/test/language/ast/{resourceref.rb → resource_reference.rb} +30 -20
- data/test/language/ast/selector.rb +1 -2
- data/test/language/ast/variable.rb +1 -2
- data/test/language/compile.rb +569 -0
- data/test/language/functions.rb +57 -76
- data/test/language/lexer.rb +20 -3
- data/test/language/parser.rb +45 -33
- data/test/language/resource.rb +275 -308
- data/test/language/scope.rb +135 -410
- data/test/language/snippets.rb +19 -41
- data/test/language/transportable.rb +8 -29
- data/test/lib/mocha/auto_verify.rb +6 -6
- data/test/lib/mocha/deprecation.rb +22 -0
- data/test/lib/mocha/exception_raiser.rb +17 -0
- data/test/lib/mocha/expectation.rb +167 -84
- data/test/lib/mocha/infinite_range.rb +4 -6
- data/test/lib/mocha/inspect.rb +3 -1
- data/test/lib/mocha/is_a.rb +9 -0
- data/test/lib/mocha/missing_expectation.rb +27 -0
- data/test/lib/mocha/mock.rb +192 -5
- data/test/lib/mocha/multiple_yields.rb +20 -0
- data/test/lib/mocha/no_yields.rb +11 -0
- data/test/lib/mocha/object.rb +11 -1
- data/test/lib/mocha/parameter_matchers.rb +9 -0
- data/test/lib/mocha/parameter_matchers/all_of.rb +39 -0
- data/test/lib/mocha/parameter_matchers/any_of.rb +44 -0
- data/test/lib/mocha/parameter_matchers/anything.rb +30 -0
- data/test/lib/mocha/parameter_matchers/has_entry.rb +39 -0
- data/test/lib/mocha/parameter_matchers/has_key.rb +39 -0
- data/test/lib/mocha/parameter_matchers/has_value.rb +39 -0
- data/test/lib/mocha/parameter_matchers/includes.rb +37 -0
- data/test/lib/mocha/return_values.rb +31 -0
- data/test/lib/mocha/single_return_value.rb +24 -0
- data/test/lib/mocha/single_yield.rb +18 -0
- data/test/lib/mocha/standalone.rb +2 -0
- data/test/lib/mocha/stub.rb +18 -0
- data/test/lib/mocha/test_case_adapter.rb +3 -3
- data/test/lib/mocha/yield_parameters.rb +31 -0
- data/test/lib/puppettest.rb +38 -20
- data/test/lib/puppettest/certificates.rb +0 -1
- data/test/lib/puppettest/exetest.rb +0 -1
- data/test/lib/puppettest/fakes.rb +0 -1
- data/test/lib/puppettest/fileparsing.rb +8 -15
- data/test/lib/puppettest/filetesting.rb +0 -1
- data/test/lib/puppettest/parsertesting.rb +37 -23
- data/test/lib/puppettest/railstesting.rb +3 -6
- data/test/lib/puppettest/reporttesting.rb +0 -1
- data/test/lib/puppettest/resourcetesting.rb +6 -34
- data/test/lib/puppettest/runnable_test.rb +30 -0
- data/test/lib/puppettest/servertest.rb +2 -3
- data/test/lib/puppettest/support/assertions.rb +13 -41
- data/test/lib/puppettest/support/collection.rb +0 -1
- data/test/lib/puppettest/support/helpers.rb +0 -1
- data/test/lib/puppettest/support/resources.rb +17 -17
- data/test/lib/puppettest/support/utils.rb +45 -27
- data/test/lib/puppettest/testcase.rb +2 -21
- data/test/lib/rake/puppet_test_loader.rb +0 -1
- data/test/lib/rake/puppet_testtask.rb +0 -1
- data/test/network/authconfig.rb +1 -2
- data/test/network/authorization.rb +1 -2
- data/test/network/authstore.rb +1 -2
- data/test/network/client/ca.rb +12 -7
- data/test/network/client/client.rb +17 -22
- data/test/network/client/dipper.rb +1 -2
- data/test/network/client/master.rb +70 -184
- data/test/network/client/resource.rb +9 -2
- data/test/network/client_request.rb +1 -2
- data/test/network/daemon.rb +1 -2
- data/test/network/handler/bucket.rb +2 -31
- data/test/network/handler/ca.rb +9 -3
- data/test/network/handler/configuration.rb +160 -0
- data/test/network/handler/fileserver.rb +24 -5
- data/test/network/handler/handler.rb +1 -2
- data/test/network/handler/master.rb +38 -243
- data/test/network/handler/report.rb +2 -104
- data/test/network/handler/resource.rb +5 -3
- data/test/network/handler/runner.rb +22 -60
- data/test/network/rights.rb +1 -2
- data/test/network/server/mongrel_test.rb +2 -3
- data/test/network/server/webrick.rb +17 -11
- data/test/network/xmlrpc/client.rb +27 -12
- data/test/network/xmlrpc/processor.rb +3 -4
- data/test/network/xmlrpc/server.rb +1 -2
- data/test/network/xmlrpc/webrick_servlet.rb +8 -2
- data/test/other/dsl.rb +2 -4
- data/test/other/events.rb +14 -56
- data/test/other/overrides.rb +3 -6
- data/test/other/propertychange.rb +1 -2
- data/test/other/provider.rb +1 -2
- data/test/other/puppet.rb +1 -2
- data/test/other/relationships.rb +15 -17
- data/test/other/report.rb +14 -20
- data/test/other/transactions.rb +109 -192
- data/test/puppet/conffiles.rb +3 -5
- data/test/puppet/defaults.rb +1 -28
- data/test/puppet/errortest.rb +1 -2
- data/test/puppet/tc_suidmanager.rb +77 -63
- data/test/rails/ast.rb +4 -4
- data/test/rails/configuration.rb +71 -0
- data/test/rails/host.rb +19 -30
- data/test/rails/rails.rb +1 -2
- data/test/rails/railsparameter.rb +3 -4
- data/test/rails/railsresource.rb +6 -5
- data/test/ral/manager/attributes.rb +1 -2
- data/test/ral/manager/instances.rb +3 -3
- data/test/ral/manager/manager.rb +1 -2
- data/test/ral/manager/provider.rb +1 -2
- data/test/ral/manager/type.rb +89 -93
- data/test/ral/providers/cron/crontab.rb +9 -11
- data/test/ral/providers/group.rb +1 -2
- data/test/ral/providers/host/netinfo.rb +1 -2
- data/test/ral/providers/host/parsed.rb +1 -2
- data/test/ral/providers/mailalias/aliases.rb +1 -2
- data/test/ral/providers/mount/netinfo.rb +1 -2
- data/test/ral/providers/nameservice.rb +1 -2
- data/test/ral/providers/package.rb +5 -4
- data/test/ral/providers/package/apt.rb +0 -1
- data/test/ral/providers/package/aptrpm.rb +0 -1
- data/test/ral/providers/parsedfile.rb +1 -2
- data/test/ral/providers/port/parsed.rb +1 -2
- data/test/ral/providers/provider.rb +10 -5
- data/test/ral/providers/service/base.rb +1 -2
- data/test/ral/providers/service/debian.rb +58 -0
- data/test/ral/providers/sshkey/parsed.rb +1 -2
- data/test/ral/providers/user.rb +3 -2
- data/test/ral/providers/user/useradd.rb +0 -1
- data/test/ral/types/basic.rb +4 -9
- data/test/ral/types/cron.rb +6 -12
- data/test/ral/types/exec.rb +6 -7
- data/test/ral/types/file.rb +35 -14
- data/test/ral/types/file/target.rb +6 -5
- data/test/ral/types/filebucket.rb +3 -2
- data/test/ral/types/fileignoresource.rb +10 -42
- data/test/ral/types/filesources.rb +21 -60
- data/test/ral/types/group.rb +3 -3
- data/test/ral/types/host.rb +6 -3
- data/test/ral/types/mailalias.rb +1 -2
- data/test/ral/types/parameter.rb +5 -3
- data/test/ral/types/port.rb +1 -2
- data/test/ral/types/property.rb +3 -3
- data/test/ral/types/resources.rb +1 -2
- data/test/ral/types/service.rb +5 -3
- data/test/ral/types/sshkey.rb +5 -3
- data/test/ral/types/tidy.rb +63 -3
- data/test/ral/types/user.rb +10 -11
- data/test/ral/types/yumrepo.rb +1 -1
- data/test/ral/types/zone.rb +1 -2
- data/test/util/autoload.rb +23 -27
- data/test/util/classgen.rb +1 -2
- data/test/util/execution.rb +1 -2
- data/test/util/features.rb +1 -3
- data/test/util/fileparsing.rb +11 -3
- data/test/util/filetype.rb +1 -2
- data/test/util/inifile.rb +1 -1
- data/test/util/instance_loader.rb +5 -6
- data/test/util/loadedfile.rb +1 -2
- data/test/util/log.rb +1 -2
- data/test/util/metrics.rb +1 -2
- data/test/util/package.rb +1 -2
- data/test/util/posixtest.rb +1 -2
- data/test/util/{config.rb → settings.rb} +123 -265
- data/test/util/storage.rb +1 -2
- data/test/util/subclass_loader.rb +1 -2
- data/test/util/utiltest.rb +1 -111
- metadata +130 -112
- data/ext/tools/passwd2puppet +0 -45
- data/lib/puppet/fact_stores/yaml.rb +0 -42
- data/lib/puppet/network/handler/facts.rb +0 -70
- data/lib/puppet/parser/ast/resourcedef.rb +0 -222
- data/lib/puppet/parser/ast/resourceref.rb +0 -58
- data/test/language/ast/component.rb +0 -142
- data/test/language/collector.rb +0 -179
- data/test/language/interpreter.rb +0 -804
- data/test/language/node.rb +0 -126
- data/test/lib/mocha/mock_methods.rb +0 -122
- data/test/lib/puppettest/graph.rb +0 -41
- data/test/lib/spec.rb +0 -8
- data/test/lib/spec/callback.rb +0 -11
- data/test/lib/spec/callback/callback_container.rb +0 -60
- data/test/lib/spec/callback/extensions/module.rb +0 -24
- data/test/lib/spec/callback/extensions/object.rb +0 -37
- data/test/lib/spec/deprecated.rb +0 -3
- data/test/lib/spec/expectations.rb +0 -59
- data/test/lib/spec/expectations/differs/default.rb +0 -62
- data/test/lib/spec/expectations/errors.rb +0 -6
- data/test/lib/spec/expectations/extensions.rb +0 -3
- data/test/lib/spec/expectations/extensions/object.rb +0 -109
- data/test/lib/spec/expectations/extensions/proc.rb +0 -57
- data/test/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
- data/test/lib/spec/expectations/handler.rb +0 -47
- data/test/lib/spec/expectations/should.rb +0 -5
- data/test/lib/spec/expectations/should/base.rb +0 -64
- data/test/lib/spec/expectations/should/change.rb +0 -69
- data/test/lib/spec/expectations/should/have.rb +0 -128
- data/test/lib/spec/expectations/should/not.rb +0 -74
- data/test/lib/spec/expectations/should/should.rb +0 -81
- data/test/lib/spec/expectations/sugar.rb +0 -47
- data/test/lib/spec/matchers.rb +0 -160
- data/test/lib/spec/matchers/be.rb +0 -161
- data/test/lib/spec/matchers/be_close.rb +0 -37
- data/test/lib/spec/matchers/change.rb +0 -120
- data/test/lib/spec/matchers/eql.rb +0 -43
- data/test/lib/spec/matchers/equal.rb +0 -43
- data/test/lib/spec/matchers/has.rb +0 -44
- data/test/lib/spec/matchers/have.rb +0 -140
- data/test/lib/spec/matchers/include.rb +0 -50
- data/test/lib/spec/matchers/match.rb +0 -41
- data/test/lib/spec/matchers/raise_error.rb +0 -100
- data/test/lib/spec/matchers/respond_to.rb +0 -35
- data/test/lib/spec/matchers/satisfy.rb +0 -47
- data/test/lib/spec/matchers/throw_symbol.rb +0 -75
- data/test/lib/spec/mocks.rb +0 -232
- data/test/lib/spec/mocks/argument_expectation.rb +0 -132
- data/test/lib/spec/mocks/error_generator.rb +0 -85
- data/test/lib/spec/mocks/errors.rb +0 -10
- data/test/lib/spec/mocks/extensions/object.rb +0 -3
- data/test/lib/spec/mocks/message_expectation.rb +0 -231
- data/test/lib/spec/mocks/methods.rb +0 -40
- data/test/lib/spec/mocks/mock.rb +0 -26
- data/test/lib/spec/mocks/mock_handler.rb +0 -166
- data/test/lib/spec/mocks/order_group.rb +0 -29
- data/test/lib/spec/rake/spectask.rb +0 -173
- data/test/lib/spec/rake/verify_rcov.rb +0 -47
- data/test/lib/spec/runner.rb +0 -132
- data/test/lib/spec/runner/backtrace_tweaker.rb +0 -55
- data/test/lib/spec/runner/command_line.rb +0 -34
- data/test/lib/spec/runner/context.rb +0 -154
- data/test/lib/spec/runner/context_eval.rb +0 -142
- data/test/lib/spec/runner/context_runner.rb +0 -55
- data/test/lib/spec/runner/drb_command_line.rb +0 -21
- data/test/lib/spec/runner/execution_context.rb +0 -17
- data/test/lib/spec/runner/extensions/kernel.rb +0 -17
- data/test/lib/spec/runner/extensions/object.rb +0 -32
- data/test/lib/spec/runner/formatter.rb +0 -5
- data/test/lib/spec/runner/formatter/base_text_formatter.rb +0 -118
- data/test/lib/spec/runner/formatter/html_formatter.rb +0 -219
- data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +0 -27
- data/test/lib/spec/runner/formatter/rdoc_formatter.rb +0 -22
- data/test/lib/spec/runner/formatter/specdoc_formatter.rb +0 -23
- data/test/lib/spec/runner/heckle_runner.rb +0 -71
- data/test/lib/spec/runner/heckle_runner_win.rb +0 -10
- data/test/lib/spec/runner/option_parser.rb +0 -224
- data/test/lib/spec/runner/reporter.rb +0 -105
- data/test/lib/spec/runner/spec_matcher.rb +0 -25
- data/test/lib/spec/runner/spec_parser.rb +0 -41
- data/test/lib/spec/runner/spec_should_raise_handler.rb +0 -74
- data/test/lib/spec/runner/specification.rb +0 -114
- data/test/lib/spec/translator.rb +0 -87
- data/test/lib/spec/version.rb +0 -30
- data/test/network/handler/facts.rb +0 -112
- data/test/other/pgraph.rb +0 -290
- data/test/other/relationship.rb +0 -74
- data/test/puppet/modules.rb +0 -59
- data/test/rails/collection.rb +0 -247
- data/test/rails/interpreter.rb +0 -91
- data/test/ral/providers/mount/parsed.rb +0 -251
- data/test/ral/providers/service.rb +0 -235
- data/test/ral/types/component.rb +0 -113
- data/test/ral/types/interface.rb +0 -40
- data/test/ral/types/mount.rb +0 -362
- data/test/ral/types/package.rb +0 -154
- data/test/ral/types/schedule.rb +0 -357
- data/test/tagging/tagging.rb +0 -170
- data/test/util/fact_store.rb +0 -67
- data/test/util/graph.rb +0 -108
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'puppet/util/instance_loader'
|
2
|
+
|
3
|
+
# A simple mechanism for loading and returning reports.
|
4
|
+
class Puppet::Reports
|
5
|
+
extend Puppet::Util::ClassGen
|
6
|
+
extend Puppet::Util::InstanceLoader
|
7
|
+
|
8
|
+
# Set up autoloading and retrieving of reports.
|
9
|
+
instance_load :report, 'puppet/reports'
|
10
|
+
|
11
|
+
class << self
|
12
|
+
attr_reader :hooks
|
13
|
+
end
|
14
|
+
|
15
|
+
# Add a new report type.
|
16
|
+
def self.register_report(name, options = {}, &block)
|
17
|
+
name = symbolize(name)
|
18
|
+
|
19
|
+
mod = genmodule(name, :extend => Puppet::Util::Docs, :hash => instance_hash(:report), :block => block)
|
20
|
+
|
21
|
+
if options[:useyaml]
|
22
|
+
mod.useyaml = true
|
23
|
+
end
|
24
|
+
|
25
|
+
mod.send(:define_method, :report_name) do
|
26
|
+
name
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Collect the docs for all of our reports.
|
31
|
+
def self.reportdocs
|
32
|
+
docs = ""
|
33
|
+
|
34
|
+
# Use this method so they all get loaded
|
35
|
+
instance_loader(:report).loadall
|
36
|
+
loaded_instances(:report).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
|
37
|
+
mod = self.report(name)
|
38
|
+
docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
|
39
|
+
|
40
|
+
docs += Puppet::Util::Docs.scrub(mod.doc) + "\n\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
docs
|
44
|
+
end
|
45
|
+
|
46
|
+
# List each of the reports.
|
47
|
+
def self.reports
|
48
|
+
instance_loader(:report).loadall
|
49
|
+
loaded_instances(:report)
|
50
|
+
end
|
51
|
+
end
|
data/lib/puppet/reports/log.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require 'puppet'
|
1
|
+
require 'puppet/reports'
|
2
2
|
|
3
|
-
Puppet::
|
3
|
+
Puppet::Reports.register_report(:log) do
|
4
4
|
desc "Send all received logs to the local log destinations. Usually
|
5
5
|
the log destination is syslog."
|
6
6
|
|
@@ -11,4 +11,3 @@ Puppet::Network::Handler.report.newreport(:log) do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
# $Id: log.rb 2367 2007-03-29 18:22:24Z luke $
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Puppet::Network::Handler.report.newreport(:rrdgraph) do
|
1
|
+
Puppet::Reports.register_report(:rrdgraph) do
|
4
2
|
desc "Graph all available data about hosts using the RRD library. You
|
5
3
|
must have the Ruby RRDtool library installed to use this report, which
|
6
4
|
you can get from `the RubyRRDTool RubyForge page`_. This package requires
|
@@ -102,7 +100,7 @@ Puppet::Network::Handler.report.newreport(:rrdgraph) do
|
|
102
100
|
|
103
101
|
unless File.directory?(hostdir) and FileTest.writable?(hostdir)
|
104
102
|
# Some hackishness to create the dir with all of the right modes and ownership
|
105
|
-
config = Puppet::Util::
|
103
|
+
config = Puppet::Util::Settings.new
|
106
104
|
config.setdefaults(:reports, :hostdir => {:default => hostdir, :owner => Puppet[:user], :mode => 0755, :group => Puppet[:group], :desc => "eh"})
|
107
105
|
|
108
106
|
# This creates the dir.
|
@@ -135,4 +133,3 @@ Puppet::Network::Handler.report.newreport(:rrdgraph) do
|
|
135
133
|
end
|
136
134
|
end
|
137
135
|
|
138
|
-
# $Id: rrdgraph.rb 2603 2007-06-18 16:26:22Z luke $
|
data/lib/puppet/reports/store.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'puppet'
|
2
2
|
|
3
|
-
Puppet::
|
4
|
-
Puppet.
|
3
|
+
Puppet::Reports.register_report(:store) do
|
4
|
+
Puppet.settings.use(:reporting)
|
5
5
|
|
6
6
|
desc "Store the yaml report on disk. Each host sends its report as a YAML dump
|
7
7
|
and this just stores the file on disk, in the ``reportdir`` directory.
|
@@ -11,9 +11,9 @@ Puppet::Network::Handler.report.newreport(:store, :useyaml => true) do
|
|
11
11
|
default report)."
|
12
12
|
|
13
13
|
def mkclientdir(client, dir)
|
14
|
-
config = Puppet::Util::
|
14
|
+
config = Puppet::Util::Settings.new
|
15
15
|
config.setdefaults("reportclient-#{client}",
|
16
|
-
"
|
16
|
+
"client-#{client}-dir" => { :default => dir,
|
17
17
|
:mode => 0750,
|
18
18
|
:desc => "Client dir for %s" % client,
|
19
19
|
:owner => Puppet[:user],
|
@@ -24,7 +24,7 @@ Puppet::Network::Handler.report.newreport(:store, :useyaml => true) do
|
|
24
24
|
config.use("reportclient-#{client}")
|
25
25
|
end
|
26
26
|
|
27
|
-
def process
|
27
|
+
def process
|
28
28
|
# We don't want any tracking back in the fs. Unlikely, but there
|
29
29
|
# you go.
|
30
30
|
client = self.host.gsub("..",".")
|
@@ -46,7 +46,7 @@ Puppet::Network::Handler.report.newreport(:store, :useyaml => true) do
|
|
46
46
|
|
47
47
|
begin
|
48
48
|
File.open(file, "w", 0640) do |f|
|
49
|
-
f.print
|
49
|
+
f.print to_yaml
|
50
50
|
end
|
51
51
|
rescue => detail
|
52
52
|
if Puppet[:trace]
|
@@ -61,4 +61,3 @@ Puppet::Network::Handler.report.newreport(:store, :useyaml => true) do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
# $Id: store.rb 2259 2007-03-06 19:03:05Z luke $
|
@@ -3,7 +3,7 @@ require 'pp'
|
|
3
3
|
|
4
4
|
require 'net/smtp'
|
5
5
|
|
6
|
-
Puppet::
|
6
|
+
Puppet::Reports.register_report(:tagmail) do
|
7
7
|
desc "This report sends specific log messages to specific email addresses
|
8
8
|
based on the tags in the log messages. See the
|
9
9
|
`UsingTags tag documentation`:trac: for more information
|
@@ -31,7 +31,7 @@ Puppet::Network::Handler.report.newreport(:tagmail) do
|
|
31
31
|
"
|
32
32
|
|
33
33
|
|
34
|
-
Puppet.
|
34
|
+
Puppet.settings.use(:tagmail)
|
35
35
|
|
36
36
|
# Find all matching messages.
|
37
37
|
def match(taglists)
|
@@ -167,4 +167,3 @@ Puppet::Network::Handler.report.newreport(:tagmail) do
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
-
# $Id: tagmail.rb 2463 2007-05-04 23:09:34Z luke $
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-11-28.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet'
|
6
|
+
|
7
|
+
# A simple class to canonize how we refer to and retrieve
|
8
|
+
# resources.
|
9
|
+
class Puppet::ResourceReference
|
10
|
+
attr_reader :type
|
11
|
+
attr_accessor :title, :catalog
|
12
|
+
|
13
|
+
def initialize(type, title)
|
14
|
+
# This will set @type if it looks like a resource reference.
|
15
|
+
self.title = title
|
16
|
+
|
17
|
+
# Don't override whatever was done by setting the title.
|
18
|
+
self.type = type if self.type.nil?
|
19
|
+
|
20
|
+
@builtin_type = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
# Find our resource.
|
24
|
+
def resolve
|
25
|
+
if catalog
|
26
|
+
return catalog.resource(to_s)
|
27
|
+
end
|
28
|
+
# If it's builtin, then just ask for it directly from the type.
|
29
|
+
if t = builtin_type
|
30
|
+
t[@title]
|
31
|
+
else # Else, look for a component with the full reference as the name.
|
32
|
+
Puppet::Type::Component[to_s]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# If the title has square brackets, treat it like a reference and
|
37
|
+
# set things appropriately; else, just set it.
|
38
|
+
def title=(value)
|
39
|
+
if value =~ /^(.+)\[(.+)\]$/
|
40
|
+
self.type = $1
|
41
|
+
@title = $2
|
42
|
+
else
|
43
|
+
@title = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Canonize the type so we know it's always consistent.
|
48
|
+
def type=(value)
|
49
|
+
if value.nil? or value.to_s.downcase == "component"
|
50
|
+
@type = "Class"
|
51
|
+
else
|
52
|
+
@type = value.to_s.split("::").collect { |s| s.capitalize }.join("::")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Convert to the standard way of referring to resources.
|
57
|
+
def to_s
|
58
|
+
"%s[%s]" % [@type, @title]
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def builtin_type?
|
64
|
+
builtin_type ? true : false
|
65
|
+
end
|
66
|
+
|
67
|
+
def builtin_type
|
68
|
+
if @builtin_type.nil?
|
69
|
+
if @type =~ /::/
|
70
|
+
@builtin_type = false
|
71
|
+
elsif klass = Puppet::Type.type(@type.to_s.downcase)
|
72
|
+
@builtin_type = klass
|
73
|
+
else
|
74
|
+
@builtin_type = false
|
75
|
+
end
|
76
|
+
end
|
77
|
+
@builtin_type
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,251 @@
|
|
1
|
+
# Created by Luke A. Kanies on 2007-11-07.
|
2
|
+
# Copyright (c) 2007. All rights reserved.
|
3
|
+
|
4
|
+
require 'puppet/external/gratr/dot'
|
5
|
+
require 'puppet/relationship'
|
6
|
+
require 'puppet/external/gratr/search'
|
7
|
+
|
8
|
+
# A hopefully-faster graph class to replace the use of GRATR.
|
9
|
+
class Puppet::SimpleGraph
|
10
|
+
include GRATR::Graph::Search
|
11
|
+
|
12
|
+
# An internal class for handling a vertex's edges.
|
13
|
+
class VertexWrapper
|
14
|
+
attr_accessor :in, :out, :vertex
|
15
|
+
|
16
|
+
# Remove all references to everything.
|
17
|
+
def clear
|
18
|
+
@adjacencies[:in].clear
|
19
|
+
@adjacencies[:out].clear
|
20
|
+
@vertex = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(vertex)
|
24
|
+
@vertex = vertex
|
25
|
+
@adjacencies = {:in => Hash.new { |h,k| h[k] = [] }, :out => Hash.new { |h,k| h[k] = [] }}
|
26
|
+
#@adjacencies = {:in => [], :out => []}
|
27
|
+
end
|
28
|
+
|
29
|
+
# Find adjacent vertices or edges.
|
30
|
+
def adjacent(options)
|
31
|
+
direction = options[:direction] || :out
|
32
|
+
options[:type] ||= :vertices
|
33
|
+
|
34
|
+
return @adjacencies[direction].values.flatten if options[:type] == :edges
|
35
|
+
|
36
|
+
return @adjacencies[direction].keys
|
37
|
+
end
|
38
|
+
|
39
|
+
# Add an edge to our list.
|
40
|
+
def add_edge(direction, edge)
|
41
|
+
@adjacencies[direction][other_vertex(direction, edge)] << edge
|
42
|
+
end
|
43
|
+
|
44
|
+
# Return all known edges.
|
45
|
+
def edges
|
46
|
+
[:in, :out].collect { |dir| @adjacencies[dir].values }.flatten
|
47
|
+
end
|
48
|
+
|
49
|
+
# Test whether we share an edge with a given vertex.
|
50
|
+
def has_edge?(direction, vertex)
|
51
|
+
return true if @adjacencies[direction][vertex].length > 0
|
52
|
+
return false
|
53
|
+
end
|
54
|
+
|
55
|
+
# The other vertex in the edge.
|
56
|
+
def other_vertex(direction, edge)
|
57
|
+
case direction
|
58
|
+
when :in: edge.source
|
59
|
+
else
|
60
|
+
edge.target
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Remove an edge from our list. Assumes that we've already checked
|
65
|
+
# that the edge is valid.
|
66
|
+
def remove_edge(direction, edge)
|
67
|
+
@adjacencies[direction][other_vertex(direction, edge)].delete(edge)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def initialize
|
72
|
+
@vertices = {}
|
73
|
+
@edges = []
|
74
|
+
end
|
75
|
+
|
76
|
+
# Clear our graph.
|
77
|
+
def clear
|
78
|
+
@vertices.each { |vertex, wrapper| wrapper.clear }
|
79
|
+
@vertices.clear
|
80
|
+
@edges.clear
|
81
|
+
end
|
82
|
+
|
83
|
+
# Whether our graph is directed. Always true. (Used by the GRATR search lib.)
|
84
|
+
def directed?
|
85
|
+
true
|
86
|
+
end
|
87
|
+
|
88
|
+
# Return a reversed version of this graph.
|
89
|
+
def reversal
|
90
|
+
result = self.class.new
|
91
|
+
vertices.each { |vertex| result.add_vertex!(vertex) }
|
92
|
+
edges.each do |edge|
|
93
|
+
newedge = edge.class.new(edge.target, edge.source, edge.label)
|
94
|
+
result.add_edge!(newedge)
|
95
|
+
end
|
96
|
+
result
|
97
|
+
end
|
98
|
+
|
99
|
+
# Return the size of the graph. Used by GRATR.
|
100
|
+
def size
|
101
|
+
@vertices.length
|
102
|
+
end
|
103
|
+
|
104
|
+
# Return the graph as an array. Again, used by GRATR.
|
105
|
+
def to_a
|
106
|
+
@vertices.keys
|
107
|
+
end
|
108
|
+
|
109
|
+
# Add a new vertex to the graph.
|
110
|
+
def add_vertex!(vertex)
|
111
|
+
return false if vertex?(vertex)
|
112
|
+
setup_vertex(vertex)
|
113
|
+
true # don't return the VertexWrapper instance.
|
114
|
+
end
|
115
|
+
|
116
|
+
# Remove a vertex from the graph.
|
117
|
+
def remove_vertex!(vertex)
|
118
|
+
return nil unless vertex?(vertex)
|
119
|
+
@vertices[vertex].edges.each { |edge| remove_edge!(edge) }
|
120
|
+
@vertices[vertex].clear
|
121
|
+
@vertices.delete(vertex)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Test whether a given vertex is in the graph.
|
125
|
+
def vertex?(vertex)
|
126
|
+
@vertices.include?(vertex)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Return a list of all vertices.
|
130
|
+
def vertices
|
131
|
+
@vertices.keys
|
132
|
+
end
|
133
|
+
|
134
|
+
# Add a new edge. The graph user has to create the edge instance,
|
135
|
+
# since they have to specify what kind of edge it is.
|
136
|
+
def add_edge!(source, target = nil, label = nil)
|
137
|
+
if target
|
138
|
+
edge = Puppet::Relationship.new(source, target, label)
|
139
|
+
else
|
140
|
+
edge = source
|
141
|
+
end
|
142
|
+
[edge.source, edge.target].each { |vertex| setup_vertex(vertex) unless vertex?(vertex) }
|
143
|
+
@vertices[edge.source].add_edge :out, edge
|
144
|
+
@vertices[edge.target].add_edge :in, edge
|
145
|
+
@edges << edge
|
146
|
+
true
|
147
|
+
end
|
148
|
+
|
149
|
+
# Find a matching edge. Note that this only finds the first edge,
|
150
|
+
# not all of them or whatever.
|
151
|
+
def edge(source, target)
|
152
|
+
@edges.each_with_index { |test_edge, index| return test_edge if test_edge.source == source and test_edge.target == target }
|
153
|
+
end
|
154
|
+
|
155
|
+
def edge_label(source, target)
|
156
|
+
return nil unless edge = edge(source, target)
|
157
|
+
edge.label
|
158
|
+
end
|
159
|
+
|
160
|
+
# Is there an edge between the two vertices?
|
161
|
+
def edge?(source, target)
|
162
|
+
return false unless vertex?(source) and vertex?(target)
|
163
|
+
|
164
|
+
@vertices[source].has_edge?(:out, target)
|
165
|
+
end
|
166
|
+
|
167
|
+
def edges
|
168
|
+
@edges.dup
|
169
|
+
end
|
170
|
+
|
171
|
+
# Remove an edge from our graph.
|
172
|
+
def remove_edge!(edge)
|
173
|
+
@vertices[edge.source].remove_edge(:out, edge)
|
174
|
+
@vertices[edge.target].remove_edge(:in, edge)
|
175
|
+
|
176
|
+
# Here we are looking for an exact edge, so we don't want to use ==, because
|
177
|
+
# it's too darn expensive (in testing, deleting 3000 edges went from 6 seconds to
|
178
|
+
# 0.05 seconds with this change).
|
179
|
+
@edges.each_with_index { |test_edge, index| @edges.delete_at(index) and break if edge.equal?(test_edge) }
|
180
|
+
nil
|
181
|
+
end
|
182
|
+
|
183
|
+
# Find adjacent edges.
|
184
|
+
def adjacent(vertex, options = {})
|
185
|
+
return [] unless wrapper = @vertices[vertex]
|
186
|
+
return wrapper.adjacent(options)
|
187
|
+
end
|
188
|
+
|
189
|
+
private
|
190
|
+
|
191
|
+
# An internal method that skips the validation, so we don't have
|
192
|
+
# duplicate validation calls.
|
193
|
+
def setup_vertex(vertex)
|
194
|
+
@vertices[vertex] = VertexWrapper.new(vertex)
|
195
|
+
end
|
196
|
+
|
197
|
+
public
|
198
|
+
|
199
|
+
# LAK:FIXME This is just a paste of the GRATR code with slight modifications.
|
200
|
+
|
201
|
+
# Return a DOT::DOTDigraph for directed graphs or a DOT::DOTSubgraph for an
|
202
|
+
# undirected Graph. _params_ can contain any graph property specified in
|
203
|
+
# rdot.rb. If an edge or vertex label is a kind of Hash then the keys
|
204
|
+
# which match +dot+ properties will be used as well.
|
205
|
+
def to_dot_graph (params = {})
|
206
|
+
params['name'] ||= self.class.name.gsub(/:/,'_')
|
207
|
+
fontsize = params['fontsize'] ? params['fontsize'] : '8'
|
208
|
+
graph = (directed? ? DOT::DOTDigraph : DOT::DOTSubgraph).new(params)
|
209
|
+
edge_klass = directed? ? DOT::DOTDirectedEdge : DOT::DOTEdge
|
210
|
+
vertices.each do |v|
|
211
|
+
name = v.to_s
|
212
|
+
params = {'name' => '"'+name+'"',
|
213
|
+
'fontsize' => fontsize,
|
214
|
+
'label' => name}
|
215
|
+
v_label = v.to_s
|
216
|
+
params.merge!(v_label) if v_label and v_label.kind_of? Hash
|
217
|
+
graph << DOT::DOTNode.new(params)
|
218
|
+
end
|
219
|
+
edges.each do |e|
|
220
|
+
params = {'from' => '"'+ e.source.to_s + '"',
|
221
|
+
'to' => '"'+ e.target.to_s + '"',
|
222
|
+
'fontsize' => fontsize }
|
223
|
+
e_label = e.to_s
|
224
|
+
params.merge!(e_label) if e_label and e_label.kind_of? Hash
|
225
|
+
graph << edge_klass.new(params)
|
226
|
+
end
|
227
|
+
graph
|
228
|
+
end
|
229
|
+
|
230
|
+
# Output the dot format as a string
|
231
|
+
def to_dot (params={}) to_dot_graph(params).to_s; end
|
232
|
+
|
233
|
+
# Call +dotty+ for the graph which is written to the file 'graph.dot'
|
234
|
+
# in the # current directory.
|
235
|
+
def dotty (params = {}, dotfile = 'graph.dot')
|
236
|
+
File.open(dotfile, 'w') {|f| f << to_dot(params) }
|
237
|
+
system('dotty', dotfile)
|
238
|
+
end
|
239
|
+
|
240
|
+
# Use +dot+ to create a graphical representation of the graph. Returns the
|
241
|
+
# filename of the graphics file.
|
242
|
+
def write_to_graphic_file (fmt='png', dotfile='graph')
|
243
|
+
src = dotfile + '.dot'
|
244
|
+
dot = dotfile + '.' + fmt
|
245
|
+
|
246
|
+
File.open(src, 'w') {|f| f << self.to_dot << "\n"}
|
247
|
+
|
248
|
+
system( "dot -T#{fmt} #{src} -o #{dot}" )
|
249
|
+
dot
|
250
|
+
end
|
251
|
+
end
|