Puppet module filefetcher

6 January 2015

The module I want to present facilitates installation of various one-file-applications, like composer, phpunit, symfony installer, box, php-cs-fixer, and many others.

Binary version of filefetcher module is available on Puppet Forge.

1. Introduction

During last year or two the php world has changed. More and more applications are distributed as phar archives. The most frequently used are

  • composer
  • phpunit
  • php-cs-fixer
  • box

but there are others to follow

  • symfony installer

The installation of such an application consists of:

  • wget | curl
  • mv
  • chown

Well. And that’s exactly what filefetcher module helps to do. The module defines filefetcher::fetch resource which:

  • downloads a file using URL parameter (e.g. https://getcomposer.org/composer.phar)
  • saves it under a given name (e.g. composer) in an arbitrary directory (e.g. /usr/local/bin)
  • sets the owner (e.g. root)
  • sets the rights (e.g. a+x)

2. How to use filefetcher puppet module?

2.1. System wide install with Puppet

To install the module in your system run:

sudo puppet module install gajdaw-filefetcher

You may lock the version to avoid using the latest version:

sudo puppet module install gajdaw-filefetcher --version 0.1.0

2.2. System wide install with Git

You may also use git to install the module:

mkdir -p /etc/puppet/modules/box
cd /etc/puppet/modules/box
git clone --depth 1 https://github.com/pro-vagrant/puppet-filefetcher.git .

To lock the version, use:

git clone --depth 1 --branch v0.1.0 https://github.com/pro-vagrant/puppet-filefetcher.git .

3. Usage examples

The examples are stored under examples/ directory.

3.1. Composer

Here is composer.pp example:

# Filename: examples/composer.pp
filefetcher::fetch { 'composer':
    source => 'https://getcomposer.org/composer.phar',
}

To run it use the following command:

sudo puppet apply examples/composer.pp

Try to run the above command a number of times:

sudo puppet apply examples/composer.pp
sudo puppet apply examples/composer.pp
sudo puppet apply examples/composer.pp

As you can see the file is not downloaded if it already exists. You can change this behaviour with redownload parameter, as described in phpunit example.

3.2. Phpunit

Here is phpunit.pp example:

# Filename: examples/phpunit.pp
filefetcher::fetch { 'phpunit':
    source     => 'https://phar.phpunit.de/phpunit.phar',
    redownload => true,
}

Thanks to redownload => true the file phpunit will be redownloaded even if it exists.

To run it use the following command:

sudo puppet apply examples/phpunit.pp

Now the file is downloaded every time you run the command:

sudo puppet apply examples/phpunit.pp
sudo puppet apply examples/phpunit.pp
sudo puppet apply examples/phpunit.pp

3.3. Php-cs-fixer

Here is php-cs-fixer.pp example:

# Filename: examples/php-cs-fixer.pp
filefetcher::fetch { 'php-cs-fixer':
    source => 'http://cs.sensiolabs.org/get/php-cs-fixer.phar',
}

To run it use the following command:

sudo puppet apply examples/php-cs-fixer.pp

3.4. Box

Here is box.pp example:

# Filename: examples/box.pp
filefetcher::fetch { 'box':
    source => 'https://github.com/box-project/box2/releases/download/2.5.0/box-2.5.0.phar',
}

To run it use the following command:

sudo puppet apply examples/box.pp

3.5. Symfony Installer

And symfony-installer.pp example:

# Filename: examples/symfony-installer.pp
filefetcher::fetch { 'symfony':
    url => 'http://symfony.com/installer',
}

To run it use the following command:

sudo puppet apply examples/symfony-installer.pp

3.6. Symfony Standard - composer.json file

You can use filefetcher::fetch to download arbitrary file, for example composer.json in Symfony Standard distribution:

# Filename: examples/symfony-standard-composer-json.pp
filefetcher::fetch { 'Symfony Standard composer.json file':
    filename   => 'composer.json',
    target_dir => '/tmp',
    user       => 'vagrant',
    rights     => '755',
    url        => 'https://raw.githubusercontent.com/symfony/symfony-standard/2.7/composer.json',
}

To run it use the following command:

sudo puppet apply examples/symfony-standard-composer-json.pp

3.7. Running phar binaries (phpunit, composer, etc.)

If php is missing, install it with:

sudo apt-get install php5 -y

Now, you can use the binaries:

phpunit --version
composer --version
php-cs-fixer --version
box --version

6. Reading list

Inspiration

The inspiration came from willdurrand-composer authored by William Durand.

2014 gajdaw

Fork me on GitHub