Puppet Apache Expires Code

111 Views Asked by At

We moving to using Puppet to manage. Using the apache module (from Puppet).

Trying to figure out syntax to make puppet produce something like:

<Directory "/data/websites/mysite">
   ExpiresActive On
   ExpiresDefault "access plus 0 seconds"
   ExpiresByType text/javascript "access plus 12 hours"
   ExpiresByType application/x-javascript "access plus 12 hours"
   ExpiresByType text/css "access plus 12 hours"
   ExpiresByType image/gif "access plus 12 hours"
   ExpiresByType image/jpeg "access plus 12 hours"
   ExpiresByType application/x-shockwave-flash "access plus 12 hours"
</Directory>

I tried this:

  apache::vhost {  'mysite':
    servername      => 'mysite.com',
    vhost_name      => $::ipaddress,
    port            => '80',
    docroot         => $docroot,

    directories => [
      {
        path => '/var/www/mysite,
        provider => 'directory',
        options => ['-Indexes','FollowSymLinks'],
        expires_active  => 'On',
        expires_default => 'access plus 0 seconds',
        expires_by_type => [
          {'text/javascript' => 'access plus 12 hours' },
          {'application/x-javascript' => 'access plus 12 hours' },
          {'text/css' => 'access plus 12 hours' },
          {'image/gif' => 'access plus 12 hours' },
          {'image/jpeg' => 'access plus 12 hours' },
          {'application/x-shockwave-flash' => 'access plus 12 hours' },
        ],
      },
    ],

  }

This will create this which is not quite what I want:

  <Directory "/var/www/mysite">
    Options -Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    ExpiresActive On
    ExpiresDefault access plus 0 seconds
    ExpiresByType {"text/javascript"=>"access plus 12 hours"}
    ExpiresByType {"application/x-javascript"=>"access plus 12 hours"}
    ExpiresByType {"text/css"=>"access plus 12 hours"}
    ExpiresByType {"image/gif"=>"access plus 12 hours"}
    ExpiresByType {"image/jpeg"=>"access plus 12 hours"}
    ExpiresByType {"application/x-shockwave-flash"=>"access plus 12 hours"}
  </Directory>

The ExpiresDefault and ExpiresByType is not working. The rest looks good to me.

1

There are 1 best solutions below

4
Alex Harvey On BEST ANSWER

If you change your code to:

  apache::vhost {  'mysite':
    servername      => 'mysite.com',
    vhost_name      => '1.1.1.1',
    port            => '80',
    docroot         => 'mydocroot',
    directories => [
      {
        path => '/var/www/mysite',
        provider => 'directory',
        options => ['-Indexes','FollowSymLinks'],
        expires_active  => 'On',
        expires_default => '"access plus 0 seconds"',
        expires_by_type => [
          'text/javascript "access plus 12 hours"',
          'application/x-javascript "access plus 12 hours"',
          'text/css "access plus 12 hours"',
          'image/gif "access plus 12 hours"',
          'image/jpeg "access plus 12 hours"',
          'application/x-shockwave-flash "access plus 12 hours"',
        ],
      },
    ],
  }

You get:

  <Directory "/var/www/mysite">
    Options -Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    ExpiresActive On
    ExpiresDefault "access plus 0 seconds"
    ExpiresByType text/javascript "access plus 12 hours"
    ExpiresByType application/x-javascript "access plus 12 hours"
    ExpiresByType text/css "access plus 12 hours"
    ExpiresByType image/gif "access plus 12 hours"
    ExpiresByType image/jpeg "access plus 12 hours"
    ExpiresByType application/x-shockwave-flash "access plus 12 hours"
  </Directory>

I didn't dig deep enough to decide whether this behaviour is as-documented, is confusing and should be fixed, should be better documented, or is unexpected.

If it is anything other than as-documented, then definitely someone should raise a pull request to improve the Apache module.