Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

chef-berksfile-env

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chef-berksfile-env

  • 1.5.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

Chef-Berksfile-Env

A Chef plugin which allows you to lock down your Chef Environment's cookbook versions with a Berksfile.

This is effectively the same as doing berks apply ... but via knife environment from file ....

View the Change Log to see what has changed.

Installation

/opt/chef/embedded/bin/gem install chef-berksfile-env

Usage

In your chef repo create a Berksfile next to your Chef environment file like this,

chef-repo/environments/[ENV_NAME]/Berksfile

This is the default location that will used by the plugin. We have to put the Berksfile in its own directory since multiple Berksfiles can't exist in the same directory.

The berksfile should include any cookbooks that your nodes or roles explicitly mention for that environment,

source "https://supermarket.getchef.com"

cookbook "java"
cookbook "yum", "~> 2.0"
...

Next we need to generate our Berksfile's lock file,

berks install

Your environment file must by in .rb format and look like this,

require 'chef-berksfile-env'

# The name must be defined first so we can use it to find the Berksfile
name "my_env"

# Load Berksfile locked dependencies as my environment's cookbook version contraints
load_berksfile

...

Now our environment will use the locked versions of the cookbooks and transitive dependencies generated by our Berksfile. Upgrading to the latest dependecies is now as simple as,

berks install

Our Berksfile also provides an easy way to ensure all the cookbooks and their versions that our environment requires are uploaded to our chef-server,

berks upload

How the Plugin Finds the Berksfile

If you are curious how the plugin knows to find the Berksfile in chef-repo/environments/[ENV]/Berksfile, you want to put your Berksfile somewhere else or you have run into this error Expected Berksfile at [/path/../Berksfile] but does not exist, this section will explain how this works and ways to tweak the path or fix your error.

load_berksfile has an optional argument which represents the path to your Berksfile. This path can be pseduo relative (explained in a moment) or absolute. By default the value is environments/[ENV_NAME]/Berksfile.

By pseduo relative I mean that its a relative path but the plugin will check to see if the directory we are executing from partially matches our relative path. So if we are running knife from /home/chef-repo/environments and our relative path is chef-repo/environments/dev/Berksfile the plugin will see that the relative path is partially included in our execution directory and will attempt to merge the two to come up with /home/chef-repo/environments/dev/Berksfile. If we can't make any match at all we attempt to guess the path by just joining the relative path with our execution directory.

So why do we do this? Well the only way to use this plugin is if your environment is in Ruby format. Chef's knife from file ... uses Ruby's instance_eval in order to do this. This means the code on Chef's end effectively looks like this,

env.instance_eval(IO.read(env_ruby_file))

which means that any context about the location of the environment file is lost. So we have no great way to discern the location of our environment Ruby file, so instead we guess.

FAQs

Package last updated on 04 May 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc