Rangefinder

Predicts downstream impact of breaking file changes

Overview

Rangefinder provides a command that can infer what a file defines and then tell you what Forge modules use it. In other words, if you change the interface provided by that file -- this will tell you what Forge modules must adapt to that change.

If the file being evaluated is part of a Puppet module, then Rangefinder will use that module's metadata.json to identify the name, and then use it to fine-tune the way the results are presented.

It will separate output by the modules that we know will be impacted and those which we can only guess that will be impacted. We can tell the difference based on whether the impacted module has properly described dependencies in their own metadata.json and whether rangefinder can figure out a dependency match.

This currently knows how to interpret and look up:

  • Puppet 3.x functions
  • Puppet 4.x functions
  • Puppet language functions
  • Classes
  • Defined types
  • Puppet resource types

Configuration

You must configure BigQuery credentials in the ~/.rangefinder.conf file.

Example configuration:

---
:gcloud:
  :dataset: <dataset>
  :project: <project>
  :keyfile: ~/.rangefinder/credentials.json

Contact me for credentials.

Running

Just run the rangefinder command with a list of files. If it knows what the file defines, then it will print out a list of Forge modules that use the thing defined by that file.

You can also --render-as either json or yaml.

Example:

$ rangefinder lib/puppet/functions/mysql/password.rb           \
              lib/puppet/parser/functions/mysql_password.rb    \
              lib/puppet/parser/functions/mysql_strip_hash.rb  \
              lib/puppet/type/mysql_user.rb                    \
              manifests/db.pp                                  \
              manifests/server.pp
[mysql::password] is a _function_
==================================
Breaking changes to this file WILL impact these modules:
  * edestecd-mariadb (https://github.com/edestecd/puppet-mariadb.git)

[mysql_password] is a _function_
==================================
Breaking changes to this file MAY impact these modules:
  * eshamow-pe_cert_auth (UNKNOWN)
  * narasimhasv-glance (git or puppet install)
  * vshn-uhosting (https://github.com/vshn/uhosting)
  * hfm-mha ([email protected]:hfm/puppet-mha.git)
  * ULHPC-mysql (https://github.com/ULHPC/puppet-mysql)
  * ULHPC-slurm (https://github.com/ULHPC/puppet-slurm)
  * dmexe-rails (http://github.com/dima-exe/puppet-rails)
  * dmexe-deploy (http://github.com/dima-exe/puppet-deploy)
  * fraenki-galera (https://github.com/fraenki/puppet-galera)
  * vStone-percona (https://github.com/vStone/puppet-percona)
  * openstack-aodh (git://github.com/openstack/puppet-aodh.git)
  * openstack-heat (git://github.com/openstack/puppet-heat.git)
  * stackforge-heat (git://github.com/openstack/puppet-heat.git)
  * openstack-nova (git://github.com/openstack/puppet-nova.git)
  * stackforge-nova (git://github.com/openstack/puppet-nova.git)
  * hunner-wordpress (https://github.com/hunner/puppet-wordpress)
  * johanek-redmine (https://github.com/johanek/johanek-redmine)
  * midonet-neutron (git://github.com/midonet/puppet-neutron.git)
  * openstack-trove (git://github.com/openstack/puppet-trove.git)
  * maxadamo-galera_maxscale (https://github.com/maxadamo/galera_maxscale)
  * maxadamo-galera_proxysql (https://github.com/maxadamo/galera_proxysql)
  * mmitchell-puppetlabs_ironic (https://github.com/stackforge/puppet-ironic)
  * tscopp-jss (https://github.com/tscopp/puppet-jss/issues)
  * gousto-mysql (git://github.com/Gousto/puppetlabs-mysql.git)
  * stackforge-cinder (git://github.com/openstack/puppet-cinder.git)
  * openstack-cinder (git://github.com/openstack/puppet-cinder.git)
  * openstack-glance (git://github.com/openstack/puppet-glance.git)
  * stackforge-glance (git://github.com/openstack/puppet-glance.git)
  * openstack-ironic (git://github.com/openstack/puppet-ironic.git)
  * openstack-manila (git://github.com/openstack/puppet-manila.git)
  * openstack-murano (git://github.com/openstack/puppet-murano.git)
  * openstack-sahara (git://github.com/openstack/puppet-sahara.git)
  * openstack-tuskar (git://github.com/openstack/puppet-tuskar.git)
  * devopera-domysqldb (https://github.com/devopera/puppet-domysqldb)
  * openstack-gnocchi (git://github.com/openstack/puppet-gnocchi.git)
  * stackforge-neutron (git://github.com/openstack/puppet-neutron.git)
  * openstack-neutron (git://github.com/openstack/puppet-neutron.git)
  * lcgdm-voms (https://github.com/cern-it-sdc-id/puppet-voms)
  * infnpd-creamce (https://github.com/italiangrid/puppet-creamce)
  * jtopjian-cubbystack (https://github.com/jtopjian/puppet-cubbystack)
  * openstack-keystone (git://github.com/openstack/puppet-keystone.git)
  * stackforge-keystone (git://github.com/openstack/puppet-keystone.git)
  * lcgdm-lcgdm (https://github.com/cern-it-sdc-id/puppet-lcgdm)
  * wdijkerman-zabbix (https://github.com/dj-wasabi/puppet-zabbix.git)
  * edestecd-mariadb (https://github.com/edestecd/puppet-mariadb.git)
  * puppet-zabbix (https://github.com/voxpupuli/puppet-zabbix.git)
  * openstack-designate (git://github.com/openstack/puppet-designate.git)
  * brainfinger-dukesbank (git://github.com/teyo/brainfinger-dukesbank.git)
  * lcgdm-dmlite (https://github.com/cern-it-sdc-id/puppet-dmlite)
  * neillturner-wordpress (https://github.com/neillturner/puppet-wordpress)
  * openstack-ceilometer (git://github.com/openstack/puppet-ceilometer.git)
  * stackforge-ceilometer (git://github.com/openstack/puppet-ceilometer.git)
  * alanpetersen-moodle (https://github.com/alanpetersen/puppet-moodle.git)
  * eNovance-cloud (https://github.com/enovance/puppet-openstack-cloud)
  * reidmv-pe_console (https://github.com/reidmv/puppet-module-pe_console)
  * Aethylred-puppetdashboard (https://github.com/Aethylred/puppet-puppetdashboard)
  * mikegleasonjr-wordpress (https://github.com/mikegleasonjr/puppet-wordpress.git)
  * ploperations-puppet (https://github.com/puppetlabs-operations/puppet-puppet)
  * puppetlabs-wordpress_app (https://github.com/puppetlabs/puppetlabs-wordpress_app)
  * nubevps-wordpress (https://forge.puppetlabs.com/nubevps-wordpress/nubevps-wordpress)

[mysql_strip_hash] is a _function_
==================================
with no external impact.

[mysql_user] is a _type_
==================================
Breaking changes to this file MAY impact these modules:
  * vshn-uhosting (https://github.com/vshn/uhosting)
  * hfm-mha ([email protected]:hfm/puppet-mha.git)
  * ULHPC-slurm (https://github.com/ULHPC/puppet-slurm)
  * kritz-vagrantlamp (https://github.com/kritznl/vagrantlamp)
  * fraenki-galera (https://github.com/fraenki/puppet-galera)
  * vStone-percona (https://github.com/vStone/puppet-percona)
  * tedivm-hieratic (https://github.com/tedivm/puppet-hieratic)
  * hunner-wordpress (https://github.com/hunner/puppet-wordpress)
  * johanek-redmine (https://github.com/johanek/johanek-redmine)
  * maxadamo-galera_maxscale (https://github.com/maxadamo/galera_maxscale)
  * maxadamo-galera_proxysql (https://github.com/maxadamo/galera_proxysql)
  * gousto-mysql (git://github.com/Gousto/puppetlabs-mysql.git)
  * devopera-domysqldb (https://github.com/devopera/puppet-domysqldb)
  * infnpd-creamce (https://github.com/italiangrid/puppet-creamce)
  * jtopjian-cubbystack (https://github.com/jtopjian/puppet-cubbystack)
  * lcgdm-lcgdm (https://github.com/cern-it-sdc-id/puppet-lcgdm)
  * wdijkerman-zabbix (https://github.com/dj-wasabi/puppet-zabbix.git)
  * edestecd-mariadb (https://github.com/edestecd/puppet-mariadb.git)
  * puppet-zabbix (https://github.com/voxpupuli/puppet-zabbix.git)
  * lcgdm-dmlite (https://github.com/cern-it-sdc-id/puppet-dmlite)
  * neillturner-wordpress (https://github.com/neillturner/puppet-wordpress)
  * puppetlabs-mysql (git://github.com/puppetlabs/puppetlabs-mysql.git)
  * alanpetersen-moodle (https://github.com/alanpetersen/puppet-moodle.git)
  * openstack-openstacklib (git://github.com/openstack/puppet-openstacklib.git)
  * stackforge-openstacklib (git://github.com/openstack/puppet-openstacklib.git)
  * eNovance-cloud (https://github.com/enovance/puppet-openstack-cloud)
  * Aethylred-puppetdashboard (https://github.com/Aethylred/puppet-puppetdashboard)
  * mikegleasonjr-wordpress (https://github.com/mikegleasonjr/puppet-wordpress.git)
  * puppetlabs-wordpress_app (https://github.com/puppetlabs/puppetlabs-wordpress_app)

[mysql::db] is a _type_
==================================
Breaking changes to this file WILL impact these modules:
  * leonardothibes-usvn (git://github.com/leonardothibes/puppet-usvn.git)
  * puppetlabs-bacula (http://github.com/puppetlabs/puppetlabs-bacula)
  * factorit-jasperreports_server (https://github.com/jbbrunsveld/jasperreports_server)
  * hexmode-mediawiki ([email protected]:hexmode/puppet-mediawiki.git)
  * cirrax-roundcube (https://github.com/cirrax/puppet-roundcube)
  * gerardkok-ejbca (https://github.com/gerardkok/puppet-ejbca.git)
  * dmcnicks-sympa (https://github.com/dmcnicks/dmcnicks-sympa.git)
  * ccaum-autoami (git://github.com/ccaum/puppet-autoami)
  * bramwelt-patchwork (https://github.com/bramwelt/puppet-patchwork)
  * cnwr-cacti (https://github.com/cnwrinc/cnwr-cacti)
  * sgnl05-racktables (git://github.com/sgnl05/sgnl05-racktables.git)
  * dsestero-sonarqube (https://github.com/dsestero/sonarqube.git)
  * desalvo-bacula (https://github.com/desalvo/puppet-bacula)
  * bodgit-wordpress (https://github.com/bodgit/puppet-wordpress)
  * fiddyspence-zabbix (https://github.com/fiddyspence/puppet-zabbix)
  * eelcomaljaars-friendica (https://devtools.maljaars-it.nl/opensource/puppet-friendica.git)
  * jefferyb-kualicoeus (https://github.com/jefferyb/kualicoeus)
  * mricon-bugzilla (https://github.com/mricon/puppet-bugzilla)
  * wyrie-snmptt (https://bitbucket.org/wyrie/puppet-snmptt/src)
  * stesie-gluon (https://github.com/ffansbach/gluon-puppet)
  * forj-openfire (https://github.com/forj-oss/puppet-openfire)
  * jsnshrmn-twlight (https://github.com/WikipediaLibrary/twlight_puppet)
  * icann-opendnssec (https://github.com/icann-dns/puppet-opendnssec)
  * shoekstra-owncloud (https://github.com/shoekstra/puppet-owncloud.git)
  * marcdeop-ratticdb (https://github.com/marcdeop/ratticdb)
  * samuelson-custom_webapp (https://github.com/samuelson/samuelson-custom_webapp)
  * hgkamath-owncloud (https://github.com/hgkamath/puppet-owncloud)
  * wyrie-nagiosql (https://bitbucket.org/wyrie/puppet-nagiosql/src)
  * tscopp-jss (https://github.com/tscopp/puppet-jss/issues)
  * treydock-keycloak (git://github.com/treydock/puppet-module-keycloak.git)
  * cesnet-site_hadoop (https://github.com/MetaCenterCloudPuppet/cesnet-site_hadoop)
  * alkivi-owncloud (https://github.com/alkivi-sas/puppet-owncloud)
  * razorsedge-cloudera (https://github.com/razorsedge/puppet-cloudera.git)
  * SchnWalter-happydev (https://github.com/devgateway/happy-deployer/tree/master/puppet/modules/happydev)
  * cirrax-postfixadmin (https://github.com/cirrax/puppet-postfixadmin)
  * martialblog-limesurvey (https://github.com/martialblog/puppet-limesurvey)
  * binford2k-drupal (https://github.com/binford2k/binford2k-drupal)
  * lboynton-gitlab (https://github.com/lboynton/puppet-gitlab)
  * maxadamo-galera_proxysql (https://github.com/maxadamo/galera_proxysql)
  * mmitchell-puppetlabs_ironic (https://github.com/stackforge/puppet-ironic)
  * sensson-powerdns (https://github.com/sensson/puppet-powerdns)
  * ULHPC-slurm (https://github.com/ULHPC/puppet-slurm)
  * alkivi-zabbix (https://github.com/alkivi-sas/puppet-zabbix)
  * brucem-ezpublish (git://github.com/brucem/puppet-ezpublish.git)
  * monkygames-beansbooks (https://bitbucket.org/monkygames/puppet-beansbooks.git)
  * aimonb-nexusis_gerrit (UNKNOWN)
  * rharrison-bacula (http://github.com/rharrison10/rharrison-bacula)
  * gnubilafrance-wisemapping (https://github.com/gnubila-france/puppet-wisemapping)
  * infnpd-ocpattrauth (https://baltig.infn.it/andreett/puppet-ocp-attribute-authority)
  * oris-appserver (https://bitbucket.org/oris/env-puppet-module-appserver)
  * aimonb-nexusis_mediawiki (https://github.com/NexusIS/puppet-mediawiki.git)
  * martasd-mediawiki ([email protected]:martasd/puppet-mediawiki.git)
  * firefield-firefield ([email protected]:firefield/basic-rails-server.git)
  * othalla-nextcloud (https://github.com/othalla/puppet-nextcloud.git)
  * gnubilafrance-redmine (https://github.com/gnubila-france/puppet-redmine)
  * wdijkerman-zabbix (https://github.com/dj-wasabi/puppet-zabbix.git)
  * puppet-zabbix (https://github.com/voxpupuli/puppet-zabbix.git)
  * geoffwilliams-r_profile (https://github.com/GeoffWilliams/r_profile)

Breaking changes to this file MAY impact these modules:
  * abaranov-sqlgrey (https://github.com/spacedog/puppet-sqlgrey)
  * erwbgy-wso2 (https://github.com/erwbgy/puppet-wso2.git)
  * theforeman-foreman (git://github.com/theforeman/puppet-foreman)
  * soli-wrappers (https://github.com/solution-libre/puppet-wrappers)
  * tykeal-gerrit (https://github.com/tykeal/puppet-gerrit.git)
  * jtopjian-cubbystack (https://github.com/jtopjian/puppet-cubbystack)
  * lcgdm-lcgdm (https://github.com/cern-it-sdc-id/puppet-lcgdm)
  * lcgdm-dmlite (https://github.com/cern-it-sdc-id/puppet-dmlite)
  * devopera-domysqldb (https://github.com/devopera/puppet-domysqldb)
  * theforeman-foreman_proxy (git://github.com/theforeman/puppet-foreman_proxy)
  * rspiak-racktables (https://github.com/sgnl05/sgnl05-racktables)
  * echoes-wrappers (https://github.com/echoes-tech/puppet-wrappers)
  * mwils-complete_wordpress (UNKNOWN)
  * halyard-boxen (https://github.com/halyard/puppet-boxen)

[mysql::server] is a _class_
==================================
Breaking changes to this file WILL impact these modules:
  * martialblog-limesurvey (https://github.com/martialblog/puppet-limesurvey)
  * infnpd-creamce (https://github.com/italiangrid/puppet-creamce)
  * puppetlabs-awsdemo_profiles (https://github.com/puppetlabs/puppetlabs-awsdemo_profiles)
  * openstack-openstacklib (git://github.com/openstack/puppet-openstacklib.git)
  * samuelson-custom_webapp (https://github.com/samuelson/samuelson-custom_webapp)
  * kritz-vagrantlamp (https://github.com/kritznl/vagrantlamp)
  * infnpd-ocpattrauth (https://baltig.infn.it/andreett/puppet-ocp-attribute-authority)
  * alexggolovin-lamp (https://github.com/alexggolovin/alexggolovin-lamp)
  * aimonb-nexusis_mediawiki (https://github.com/NexusIS/puppet-mediawiki.git)
  * edestecd-mariadb (https://github.com/edestecd/puppet-mariadb.git)
  * puppetlabs-openstack (https://github.com/puppetlabs/puppetlabs-openstack.git)
  * gajdaw-symfony (https://github.com/puppet-by-examples/puppet-symfony)
  * fraenki-galera (https://github.com/fraenki/puppet-galera)
  * othalla-nextcloud (https://github.com/othalla/puppet-nextcloud.git)
  * thbe-bareos (https://github.com/thbe/puppet-bareos.git)
  * oris-appserver (https://bitbucket.org/oris/env-puppet-module-appserver)
  * ULHPC-slurm (https://github.com/ULHPC/puppet-slurm)
  * binford2k-drupal (https://github.com/binford2k/binford2k-drupal)
  * jefferyb-kualicoeus (https://github.com/jefferyb/kualicoeus)
  * fiddyspence-zabbix (https://github.com/fiddyspence/puppet-zabbix)
  * desalvo-bacula (https://github.com/desalvo/puppet-bacula)
  * jsnshrmn-twlight (https://github.com/WikipediaLibrary/twlight_puppet)
  * forj-openfire (https://github.com/forj-oss/puppet-openfire)
  * firefield-firefield ([email protected]:firefield/basic-rails-server.git)
  * bflad-piwik (git://github.com/bflad/puppet-piwik.git)
  * mricon-bugzilla (https://github.com/mricon/puppet-bugzilla)
  * garystafford-sakila_mysql_db (https://github.com/garystafford/garystafford-sakila_mysql_db)
  * gajdaw-phpmyadmin (https://github.com/puppet-by-examples/puppet-phpmyadmin)
  * leonardothibes-phpmyadmin (git://github.com/leonardothibes/puppet-phpmyadmin.git)
  * gnubilafrance-wisemapping (https://github.com/gnubila-france/puppet-wisemapping)
  * cnwr-cacti (https://github.com/cnwrinc/cnwr-cacti)
  * cesnet-site_hadoop (https://github.com/MetaCenterCloudPuppet/cesnet-site_hadoop)
  * geoffwilliams-r_profile (https://github.com/GeoffWilliams/r_profile)
  * eelcomaljaars-friendica (https://devtools.maljaars-it.nl/opensource/puppet-friendica.git)
  * garethr-wackopicko (git://github.com/garethr/garethr-wackopicko.git)
  * thbe-bacula (https://github.com/thbe/puppet-bacula.git)
  * sartiran-dpm (UNKNOWN)
  * lboynton-gitlab (https://github.com/lboynton/puppet-gitlab)
  * nubevps-wordpress (https://forge.puppetlabs.com/nubevps-wordpress/nubevps-wordpress)
  * monkygames-beansbooks (https://bitbucket.org/monkygames/puppet-beansbooks.git)
  * aimonb-nexusis_gerrit (UNKNOWN)
  * bramwelt-patchwork (https://github.com/bramwelt/puppet-patchwork)
  * factorit-jasperreports_server (https://github.com/jbbrunsveld/jasperreports_server)
  * puppetlabs-wordpress_app (https://github.com/puppetlabs/puppetlabs-wordpress_app)
  * wyrie-nagiosql (https://bitbucket.org/wyrie/puppet-nagiosql/src)
  * gnubilafrance-redmine (https://github.com/gnubila-france/puppet-redmine)
  * sgnl05-racktables (git://github.com/sgnl05/sgnl05-racktables.git)
  * glarizza-profiles (https://github.com/glarizza/puppet-profiles)
  * tscopp-jss (https://github.com/tscopp/puppet-jss/issues)
  * giavac-homer (https://github.com/giavac/giavac-homer)
  * sensson-powerdns (https://github.com/sensson/puppet-powerdns)
  * lyonliang-otrs (https://github.com/ChinaShrimp/puppet-lyonliang-otrs.git)
  * madhukarn-percona_galera_cluster (https://github.com/madhu2852/Percona-Galera-Cluster.git)
  * lcgdm-dpm (https://github.com/cern-it-sdc-id/puppet-dpm)
  * continuent-tungsten (https://github.com/continuent/continuent-tungsten)
  * dsestero-sonarqube (https://github.com/dsestero/sonarqube.git)
  * dmcnicks-sympa (https://github.com/dmcnicks/dmcnicks-sympa.git)
  * brucem-ezpublish (git://github.com/brucem/puppet-ezpublish.git)
  * firm1-zds (https://github.com/firm1/zds-puppet)
  * marcdeop-ratticdb (https://github.com/marcdeop/ratticdb)
  * gerardkok-ejbca (https://github.com/gerardkok/puppet-ejbca.git)
  * leonardothibes-usvn (git://github.com/leonardothibes/puppet-usvn.git)
  * hexmode-mediawiki ([email protected]:hexmode/puppet-mediawiki.git)
  * johanek-redmine (https://github.com/johanek/johanek-redmine)
  * SchnWalter-happydev (https://github.com/devgateway/happy-deployer/tree/master/puppet/modules/happydev)
  * martasd-mediawiki ([email protected]:martasd/puppet-mediawiki.git)

Breaking changes to this file MAY impact these modules:
  * pltraining-dockeragent (https://github.com/puppetlabs/pltraining-dockeragent)
  * suvarnagodri-mediawiki (master)
  * narasimhasv-openstack (Install puppet module)
  * pbhutani-mediawiki (test)
  * erwbgy-wso2 (https://github.com/erwbgy/puppet-wso2.git)
  * karume-openstack (https://github.com/karume/puppetlabs-openstack.git)
  * reidmv-pe_console (https://github.com/reidmv/puppet-module-pe_console)
  * willdurand-bazinga (UNKNOWN)
  * camptocamp-pacemaker (https://github.com/camptocamp/puppet-pacemaker)
  * rocha-dpm (git://github.com/rochaporto/puppet-dpm)
  * rspiak-racktables (https://github.com/sgnl05/sgnl05-racktables)
  * dbsrinivasulu-mediawiki (abcd)
  * vshn-uhosting (https://github.com/vshn/uhosting)
  * lcgdm-lcgdm (https://github.com/cern-it-sdc-id/puppet-lcgdm)
  * eshamow-pe_cert_auth (UNKNOWN)
  * gerapeldoorn-nagiosxi (https://github.com/gerapeldoorn/puppet-nagiosxi)
  * jtopjian-havana (https://github.com/jtopjian/puppet-havana)
  * theforeman-foreman_proxy (git://github.com/theforeman/puppet-foreman_proxy)
  * eNovance-cloud (https://github.com/enovance/puppet-openstack-cloud)
  * gururaj-mediawiki (mediawiki)
  * dmexe-deploy (http://github.com/dima-exe/puppet-deploy)
  * theforeman-foreman (git://github.com/theforeman/puppet-foreman)
  * abaranov-sqlgrey (https://github.com/spacedog/puppet-sqlgrey)
  * byjupv-mediakwiki (mediakwiki)
  * devopera-domysqldb (https://github.com/devopera/puppet-domysqldb)

Limitations

This is super early in development and has not yet been battle tested.

Disclaimer

I take no liability for the use of this tool.

Contact

[email protected]