pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/sysutils/puppet Update puppet to version 0.24.4. Chan...
details: https://anonhg.NetBSD.org/pkgsrc/rev/65a1d01de79b
branches: trunk
changeset: 540511:65a1d01de79b
user: jlam <jlam%pkgsrc.org@localhost>
date: Fri Apr 04 15:20:48 2008 +0000
description:
Update puppet to version 0.24.4. Changes from verison 0.22.4 include:
+ Install as a Ruby gem.
- Better caching of external lookups.
- Many bug fixes.
- External node commands can specify an environment and Puppet will now
use it.
- Always duplicating resource defaults in the parser, so that stacked
metaparameter values do not result in all resources that receive a
given default also getting those stacked values.
- Puppet's parser no longer changes the order in which statements are
evaluated, which means that case statements can now set variables that
are used by other variables.
- Clients should now fail to install files whose checksums do not match the
checksum from the server.
- Autoloading now searches the plugins directory in each module, in
addition to the lib directory.
- Virtual defined types are no longer evaluated.
NOTE: This introduces a behaviour change, in that you previously could
realize a resource within a virtual defined resource, and now you must
realize the entire defined resource, rather than just the contained
resource.
- Added builtin support for Nagios types using Naginator to parse and
generate the files.
- Modifying the behaviour of the certdnsnames setting. It now defaults
to an empty string, and will only be used if it is set to something
else.
- External node support now requires that you set the 'node_terminus'
setting to 'exec'.
- You now must specify an environment and you are required to specify
the valid environments for your site.
- The --use-nodes and --no-nodes options are now obsolete. Puppet
automatically detects when nodes are defined, and if they are defined it
will require that a node be found, else it will not look for a node nor
will it fail if it fails to find one.
- Added support for managing interfaces.
- Puppet clients now have http proxy support.
- Adding module autoloading.
- Significantly reworked external node support, in a way that's NOT
backward-compatible:
Only ONE node source can be used -- you can use LDAP, code, or
an external node program, but not more than one.
LDAP node support has two changes: First, the "ldapattrs" attribute is
now used for setting the attributes to retrieve from the server (in
addition to required attriutes), and second, all retrieved attributes
are set as variables in the top scope. This means you can set attributes
on your LDAP nodes and they will automatically appear as variables
in your configurations.
External node support has been completely rewritten. These programs must
now generate a YAML dump of a hash, with "classes" and "parameters" keys.
The classes should be an array, and the parameters should be a hash. The
external node program has no support for parent nodes -- the script must
handle that on its own.
- Replaced the obsolete RRD ruby library with the maintained RubyRRDtool
library
- Significantly reworking configuration parsing. Executables all now
look for 'puppet.conf', although they will parse the old-style
configuration files if they are present, although they throw a
deprecation warning. Also, file parameters (owner, mode, group) are now
set on the same line as the parameter, in brackets.
diffstat:
sysutils/puppet/Makefile | 61 +-
sysutils/puppet/PLIST | 1057 +++++++++++++++++++++----------
sysutils/puppet/distinfo | 12 +-
sysutils/puppet/files/puppetd.sh | 8 +-
sysutils/puppet/files/puppetmasterd.sh | 8 +-
sysutils/puppet/patches/patch-aa | 16 -
sysutils/puppet/patches/patch-ab | 27 -
sysutils/puppet/patches/patch-ac | 16 -
sysutils/puppet/patches/patch-ad | 13 +
9 files changed, 770 insertions(+), 448 deletions(-)
diffs (truncated from 1319 to 300 lines):
diff -r e10a14de4714 -r 65a1d01de79b sysutils/puppet/Makefile
--- a/sysutils/puppet/Makefile Fri Apr 04 15:20:41 2008 +0000
+++ b/sysutils/puppet/Makefile Fri Apr 04 15:20:48 2008 +0000
@@ -1,58 +1,37 @@
-# $NetBSD: Makefile,v 1.2 2008/03/13 20:05:09 tonnerre Exp $
-#
+# $NetBSD: Makefile,v 1.3 2008/04/04 15:20:48 jlam Exp $
-DISTNAME= puppet-0.22.4
+DISTNAME= puppet-0.24.4
CATEGORIES= sysutils
-MASTER_SITES= http://www.reductivelabs.com/downloads/puppet/
-EXTRACT_SUFX= .tgz
MAINTAINER= tonnerre%NetBSD.org@localhost
HOMEPAGE= http://www.reductivelabs.com/projects/puppet/
COMMENT= Configuration management framework written in Ruby
-NO_BUILD= yes
-DOCS= CHANGELOG TODO README LICENSE COPYING
-PUPPET_DOCSDIR= ${PREFIX}/share/doc/puppet
-PUPPET_EGDIR= ${PREFIX}/share/examples/puppet
-EXAMPLEROOT_DIRS= bin etc etc/init.d etc/puppet
-EXAMPLEROOT_FILES= bin/sleeper etc/init.d/sleeper \
- etc/puppet/puppetd.conf etc/puppet/fileserver.conf \
- etc/puppet/puppetmasterd.conf etc/puppet/namespaceauth.conf \
- etc/puppet/tagmail.conf etc/otherfile etc/configfile \
- etc/debian-passwd etc/debian-syslog.conf
+DEPENDS+= ${RUBY_PKGPREFIX}-facter>=1.3.8:../../sysutils/ruby-facter
+
+GEM_BUILD= gemspec
+
+PKG_SYSCONFSUBDIR= puppet
RCD_SCRIPTS= puppetd puppetmasterd
SUBST_CLASSES+= prefix
SUBST_STAGE.prefix= post-patch
-SUBST_FILES.prefix= lib/puppet/configuration.rb
-SUBST_SED.prefix= -e "s@/etc/puppet@${PREFIX}/etc/puppet@"
+SUBST_FILES.prefix= lib/puppet/reference/configuration.rb
+SUBST_SED.prefix= -e "s|/etc/puppet|${PKG_SYSCONFDIR}|g"
-INSTALLATION_DIRS= ${PUPPET_DOCSDIR} ${PUPPET_EGDIR} ${PUPPET_EGDIR}/code
-INSTALLATION_DIRS+= ${PUPPET_EGDIR}/root/bin ${PUPPET_EGDIR}/root/etc
-INSTALLATION_DIRS+= ${PUPPET_EGDIR}/root/etc/init.d
-INSTALLATION_DIRS+= ${PUPPET_EGDIR}/root/etc/puppet
-
-.include "../../lang/ruby/buildlink3.mk"
-
-DEPENDS+= ${RUBY_PKGPREFIX}-facter-[0-9]*:../../sysutils/ruby-facter
+EXAMPLEDIR= ${PREFIX}/share/examples/${PKGBASE}
-do-install:
- cd ${WRKSRC} && ${SETENV} DSTDIR=${DESTDIR}/${PREFIX} \
- ${RUBY} ${WRKSRC}/install.rb --full
-.for file in ${DOCS}
- ${INSTALL_DATA} ${WRKSRC}/${file} ${PUPPET_DOCSDIR}
-.endfor
- ${INSTALL_DATA} ${WRKSRC}/examples/code/* ${PUPPET_EGDIR}/code
-.for file in ${EXAMPLEROOT_FILES}
- ${INSTALL_DATA} ${WRKSRC}/examples/root/${file} \
- ${PUPPET_EGDIR}/root/${file}
-.endfor
+pre-build:
+ cd ${WRKSRC} && ${RUBY} -Ilib bin/puppetmasterd \
+ --confdir=${PKG_SYSCONFDIR:Q} --rundir=${VARBASE:Q}/run \
+ --genconfig | \
+ ${SED} -e 's/genconfig = true/# genconfig = false/' \
+ > examples/puppetmasterd.conf
post-install:
- ${RUBY} ${PREFIX}/bin/puppetmasterd \
- --confdir=${PREFIX}/etc/puppet --rundir=/var/run \
- --genconfig | \
- ${SED} -e 's/genconfig = true/# genconfig = false/' \
- > ${PUPPET_EGDIR}/puppetmasterd.conf.sample
+ ${INSTALL_DATA_DIR} ${DESTDIR}${EXAMPLEDIR}
+ ${INSTALL_DATA} ${WRKSRC}/examples/puppetmasterd.conf \
+ ${DESTDIR}${EXAMPLEDIR}
+.include "../../misc/rubygems/rubygem.mk"
.include "../../mk/bsd.pkg.mk"
diff -r e10a14de4714 -r 65a1d01de79b sysutils/puppet/PLIST
--- a/sysutils/puppet/PLIST Fri Apr 04 15:20:41 2008 +0000
+++ b/sysutils/puppet/PLIST Fri Apr 04 15:20:48 2008 +0000
@@ -1,340 +1,731 @@
-@comment $NetBSD: PLIST,v 1.2 2008/03/13 20:05:09 tonnerre Exp $
+@comment $NetBSD: PLIST,v 1.3 2008/04/04 15:20:48 jlam Exp $
bin/puppet
bin/puppetca
bin/puppetd
bin/puppetdoc
bin/puppetmasterd
bin/puppetrun
-${RUBY_SITELIBDIR}/puppet.rb
-${RUBY_SITELIBDIR}/puppet/propertychange.rb
-${RUBY_SITELIBDIR}/puppet/transportable.rb
-${RUBY_SITELIBDIR}/puppet/provider.rb
-${RUBY_SITELIBDIR}/puppet/configuration.rb
-${RUBY_SITELIBDIR}/puppet/modules.rb
-${RUBY_SITELIBDIR}/puppet/error.rb
-${RUBY_SITELIBDIR}/puppet/parameter.rb
-${RUBY_SITELIBDIR}/puppet/daemon.rb
-${RUBY_SITELIBDIR}/puppet/transaction.rb
-${RUBY_SITELIBDIR}/puppet/rails.rb
-${RUBY_SITELIBDIR}/puppet/pgraph.rb
-${RUBY_SITELIBDIR}/puppet/dsl.rb
-${RUBY_SITELIBDIR}/puppet/relationship.rb
-${RUBY_SITELIBDIR}/puppet/event.rb
-${RUBY_SITELIBDIR}/puppet/sslcertificates.rb
-${RUBY_SITELIBDIR}/puppet/type.rb
-${RUBY_SITELIBDIR}/puppet/util.rb
-${RUBY_SITELIBDIR}/puppet/element.rb
-${RUBY_SITELIBDIR}/puppet/type/parsedtype.rb
-${RUBY_SITELIBDIR}/puppet/type/cron.rb
-${RUBY_SITELIBDIR}/puppet/type/sshkey.rb
-${RUBY_SITELIBDIR}/puppet/type/property.rb
-${RUBY_SITELIBDIR}/puppet/type/resources.rb
-${RUBY_SITELIBDIR}/puppet/type/component.rb
-${RUBY_SITELIBDIR}/puppet/type/pfilebucket.rb
-${RUBY_SITELIBDIR}/puppet/type/group.rb
-${RUBY_SITELIBDIR}/puppet/type/notify.rb
-${RUBY_SITELIBDIR}/puppet/type/zone.rb
-${RUBY_SITELIBDIR}/puppet/type/tidy.rb
-${RUBY_SITELIBDIR}/puppet/type/exec.rb
-${RUBY_SITELIBDIR}/puppet/type/mount.rb
-${RUBY_SITELIBDIR}/puppet/type/yumrepo.rb
-${RUBY_SITELIBDIR}/puppet/type/service.rb
-${RUBY_SITELIBDIR}/puppet/type/user.rb
-${RUBY_SITELIBDIR}/puppet/type/host.rb
-${RUBY_SITELIBDIR}/puppet/type/schedule.rb
-${RUBY_SITELIBDIR}/puppet/type/package.rb
-${RUBY_SITELIBDIR}/puppet/type/port.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/target.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/group.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/content.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/checksum.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/mode.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/source.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/type.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/ensure.rb
-${RUBY_SITELIBDIR}/puppet/type/pfile/owner.rb
-${RUBY_SITELIBDIR}/puppet/util/warnings.rb
-${RUBY_SITELIBDIR}/puppet/util/execution.rb
-${RUBY_SITELIBDIR}/puppet/util/graph.rb
-${RUBY_SITELIBDIR}/puppet/util/autoload.rb
-${RUBY_SITELIBDIR}/puppet/util/docs.rb
-${RUBY_SITELIBDIR}/puppet/util/config.rb
-${RUBY_SITELIBDIR}/puppet/util/loadedfile.rb
-${RUBY_SITELIBDIR}/puppet/util/pidlock.rb
-${RUBY_SITELIBDIR}/puppet/util/inifile.rb
-${RUBY_SITELIBDIR}/puppet/util/posix.rb
-${RUBY_SITELIBDIR}/puppet/util/filetype.rb
-${RUBY_SITELIBDIR}/puppet/util/log.rb
-${RUBY_SITELIBDIR}/puppet/util/methodhelper.rb
-${RUBY_SITELIBDIR}/puppet/util/logging.rb
-${RUBY_SITELIBDIR}/puppet/util/storage.rb
-${RUBY_SITELIBDIR}/puppet/util/fileparsing.rb
-${RUBY_SITELIBDIR}/puppet/util/subclass_loader.rb
-${RUBY_SITELIBDIR}/puppet/util/variables.rb
-${RUBY_SITELIBDIR}/puppet/util/metaid.rb
-${RUBY_SITELIBDIR}/puppet/util/package.rb
-${RUBY_SITELIBDIR}/puppet/util/classgen.rb
-${RUBY_SITELIBDIR}/puppet/util/plist.rb
-${RUBY_SITELIBDIR}/puppet/util/feature.rb
-${RUBY_SITELIBDIR}/puppet/util/errors.rb
-${RUBY_SITELIBDIR}/puppet/util/metric.rb
-${RUBY_SITELIBDIR}/puppet/util/provider_features.rb
-${RUBY_SITELIBDIR}/puppet/util/suidmanager.rb
-${RUBY_SITELIBDIR}/puppet/util/plist/parser.rb
-${RUBY_SITELIBDIR}/puppet/util/plist/generator.rb
-${RUBY_SITELIBDIR}/puppet/util/rails/collection_merger.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr.rb
-${RUBY_SITELIBDIR}/puppet/external/lock.rb
-${RUBY_SITELIBDIR}/puppet/external/event-loop.rb
-${RUBY_SITELIBDIR}/puppet/external/base64.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/rdot.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/graph.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/common.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/edge.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/undirected_graph.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/labels.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/comparability.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/graph_api.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/strong_components.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/dot.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/digraph_distance.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/search.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/base.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/digraph.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/maximum_flow.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/biconnected.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/adjacency_graph.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/import.rb
-${RUBY_SITELIBDIR}/puppet/external/gratr/chinese_postman.rb
-${RUBY_SITELIBDIR}/puppet/external/event-loop/better-definers.rb
-${RUBY_SITELIBDIR}/puppet/external/event-loop/event-loop.rb
-${RUBY_SITELIBDIR}/puppet/external/event-loop/signal-system.rb
-${RUBY_SITELIBDIR}/puppet/metatype/providers.rb
-${RUBY_SITELIBDIR}/puppet/metatype/evaluation.rb
-${RUBY_SITELIBDIR}/puppet/metatype/manager.rb
-${RUBY_SITELIBDIR}/puppet/metatype/tags.rb
-${RUBY_SITELIBDIR}/puppet/metatype/attributes.rb
-${RUBY_SITELIBDIR}/puppet/metatype/closure.rb
-${RUBY_SITELIBDIR}/puppet/metatype/schedules.rb
-${RUBY_SITELIBDIR}/puppet/metatype/instances.rb
-${RUBY_SITELIBDIR}/puppet/metatype/metaparams.rb
-${RUBY_SITELIBDIR}/puppet/metatype/container.rb
-${RUBY_SITELIBDIR}/puppet/metatype/relationships.rb
-${RUBY_SITELIBDIR}/puppet/reports/tagmail.rb
-${RUBY_SITELIBDIR}/puppet/reports/rrdgraph.rb
-${RUBY_SITELIBDIR}/puppet/reports/log.rb
-${RUBY_SITELIBDIR}/puppet/reports/store.rb
-${RUBY_SITELIBDIR}/puppet/rails/source_file.rb
-${RUBY_SITELIBDIR}/puppet/rails/resource.rb
-${RUBY_SITELIBDIR}/puppet/rails/fact_name.rb
-${RUBY_SITELIBDIR}/puppet/rails/fact_value.rb
-${RUBY_SITELIBDIR}/puppet/rails/param_name.rb
-${RUBY_SITELIBDIR}/puppet/rails/host.rb
-${RUBY_SITELIBDIR}/puppet/rails/param_value.rb
-${RUBY_SITELIBDIR}/puppet/rails/puppet_class.rb
-${RUBY_SITELIBDIR}/puppet/rails/external/tagging/tag.rb
-${RUBY_SITELIBDIR}/puppet/rails/external/tagging/tagging.rb
-${RUBY_SITELIBDIR}/puppet/rails/external/tagging/acts_as_taggable.rb
-${RUBY_SITELIBDIR}/puppet/rails/external/tagging/init.rb
-${RUBY_SITELIBDIR}/puppet/rails/database/schema.rb
-${RUBY_SITELIBDIR}/puppet/rails/database/001_add_indexes.rb
-${RUBY_SITELIBDIR}/puppet/feature/base.rb
-${RUBY_SITELIBDIR}/puppet/feature/rails.rb
-${RUBY_SITELIBDIR}/puppet/network/authconfig.rb
-${RUBY_SITELIBDIR}/puppet/network/client_request.rb
-${RUBY_SITELIBDIR}/puppet/network/authorization.rb
-${RUBY_SITELIBDIR}/puppet/network/server.rb
-${RUBY_SITELIBDIR}/puppet/network/rights.rb
-${RUBY_SITELIBDIR}/puppet/network/handler.rb
-${RUBY_SITELIBDIR}/puppet/network/client.rb
-${RUBY_SITELIBDIR}/puppet/network/authstore.rb
-${RUBY_SITELIBDIR}/puppet/network/client/ca.rb
-${RUBY_SITELIBDIR}/puppet/network/client/resource.rb
-${RUBY_SITELIBDIR}/puppet/network/client/report.rb
-${RUBY_SITELIBDIR}/puppet/network/client/logger.rb
-${RUBY_SITELIBDIR}/puppet/network/client/file.rb
-${RUBY_SITELIBDIR}/puppet/network/client/master.rb
-${RUBY_SITELIBDIR}/puppet/network/client/runner.rb
-${RUBY_SITELIBDIR}/puppet/network/client/dipper.rb
-${RUBY_SITELIBDIR}/puppet/network/client/status.rb
-${RUBY_SITELIBDIR}/puppet/network/client/proxy.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/fileserver.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/ca.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/resource.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/report.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/logger.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/master.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/filebucket.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/runner.rb
-${RUBY_SITELIBDIR}/puppet/network/handler/status.rb
-${RUBY_SITELIBDIR}/puppet/network/server/mongrel.rb
-${RUBY_SITELIBDIR}/puppet/network/server/webrick.rb
-${RUBY_SITELIBDIR}/puppet/network/xmlrpc/processor.rb
-${RUBY_SITELIBDIR}/puppet/network/xmlrpc/server.rb
-${RUBY_SITELIBDIR}/puppet/network/xmlrpc/webrick_servlet.rb
-${RUBY_SITELIBDIR}/puppet/network/xmlrpc/client.rb
-${RUBY_SITELIBDIR}/puppet/sslcertificates/ca.rb
-${RUBY_SITELIBDIR}/puppet/sslcertificates/inventory.rb
-${RUBY_SITELIBDIR}/puppet/sslcertificates/certificate.rb
-${RUBY_SITELIBDIR}/puppet/sslcertificates/support.rb
-${RUBY_SITELIBDIR}/puppet/parser/parser.rb
-${RUBY_SITELIBDIR}/puppet/parser/functions.rb
-${RUBY_SITELIBDIR}/puppet/parser/collector.rb
-${RUBY_SITELIBDIR}/puppet/parser/resource.rb
-${RUBY_SITELIBDIR}/puppet/parser/scope.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast.rb
-${RUBY_SITELIBDIR}/puppet/parser/lexer.rb
-${RUBY_SITELIBDIR}/puppet/parser/interpreter.rb
-${RUBY_SITELIBDIR}/puppet/parser/templatewrapper.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/resourceref.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/resourceparam.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/hostclass.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/leaf.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/astarray.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/component.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/resourceoverride.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/function.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/else.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/vardef.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/selector.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/caseopt.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/collection.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/casestatement.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/node.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/ifstatement.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/resourcedefaults.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/tag.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/collexpr.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/branch.rb
-${RUBY_SITELIBDIR}/puppet/parser/ast/resourcedef.rb
-${RUBY_SITELIBDIR}/puppet/parser/resource/param.rb
-${RUBY_SITELIBDIR}/puppet/parser/resource/reference.rb
-${RUBY_SITELIBDIR}/puppet/transaction/report.rb
Home |
Main Index |
Thread Index |
Old Index