Knife-Zero doesn't include Berkshelf support, so vendoring everything in the repo is convenient again
333 lines
10 KiB
Markdown
333 lines
10 KiB
Markdown
# Poise-Javascript Cookbook
|
||
|
||
[](https://travis-ci.org/poise/poise-javascript)
|
||
[](https://rubygems.org/gems/poise-javascript)
|
||
[](https://supermarket.chef.io/cookbooks/poise-javascript)
|
||
[](https://codecov.io/github/poise/poise-javascript)
|
||
[](https://gemnasium.com/poise/poise-javascript)
|
||
[](https://www.apache.org/licenses/LICENSE-2.0)
|
||
|
||
A [Chef](https://www.chef.io/) cookbook to provide a unified interface for
|
||
installing server-side JavaScript runtimes like Node.js and io.js.
|
||
|
||
## Quick Start
|
||
|
||
To install the latest available version of Node.js 0.12:
|
||
|
||
```ruby
|
||
javascript_runtime '0.12'
|
||
```
|
||
|
||
## Supported JavaScript Runtimes
|
||
|
||
This cookbook can install Node.js and io.js on Linux and OS X.
|
||
|
||
## Requirements
|
||
|
||
Chef 12.1 or newer is required.
|
||
|
||
## Attributes
|
||
|
||
Attributes are used to configure the default recipe.
|
||
|
||
* `node['poise-javascript']['install_nodejs']` – Install a Node.js runtime. *(default: true)*
|
||
* `node['poise-javascript']['install_iojs']` – Install an io.js runtime. *(default: false)*
|
||
|
||
## Recipes
|
||
|
||
### `default`
|
||
|
||
The default recipe installs Node.js or io.js based on the node attributes. It is
|
||
entirely optional and can be ignored in favor of direct use of the
|
||
`javascript_runtime` resource.
|
||
|
||
## Resources
|
||
|
||
### `javascript_runtime`
|
||
|
||
The `javascript_runtime` resource installs a JavaScript interpreter.
|
||
|
||
```ruby
|
||
javascript_runtime '0.12'
|
||
```
|
||
|
||
#### Actions
|
||
|
||
* `:install` – Install the JavaScript interpreter. *(default)*
|
||
* `:uninstall` – Uninstall the JavaScript interpreter.
|
||
|
||
#### Properties
|
||
|
||
* `version` – Version of the runtime to install. If a partial version is given,
|
||
use the latest available version matching that prefix. *(name property)*
|
||
|
||
#### Provider Options
|
||
|
||
The `poise-javascript` library offers an additional way to pass configuration
|
||
information to the final provider called "options". Options are key/value pairs
|
||
that are passed down to the `javascript_runtime` provider and can be used to control how it
|
||
installs JavaScript. These can be set in the `javascript_runtime`
|
||
resource using the `options` method, in node attributes or via the
|
||
`javascript_runtime_options` resource. The options from all sources are merged
|
||
together in to a single hash.
|
||
|
||
When setting options in the resource you can either set them for all providers:
|
||
|
||
```ruby
|
||
javascript_runtime 'myapp' do
|
||
version '0.10'
|
||
options dev_package: false
|
||
end
|
||
```
|
||
|
||
or for a single provider:
|
||
|
||
```ruby
|
||
javascript_runtime 'myapp' do
|
||
version '0.10'
|
||
options :system, dev_package: false
|
||
end
|
||
```
|
||
|
||
Setting via node attributes is generally how an end-user or application cookbook
|
||
will set options to customize installations in the library cookbooks they are using.
|
||
You can set options for all installations or for a single runtime:
|
||
|
||
```ruby
|
||
# Global, for all installations.
|
||
override['poise-javascript']['options']['version'] = '0.10'
|
||
# Single installation.
|
||
override['poise-javascript']['myapp']['version'] = 'iojs'
|
||
```
|
||
|
||
The `javascript_runtime_options` resource is also available to set node attributes
|
||
for a specific installation in a DSL-friendly way:
|
||
|
||
```ruby
|
||
javascript_runtime_options 'myapp' do
|
||
version 'iojs'
|
||
end
|
||
```
|
||
|
||
Unlike resource attributes, provider options can be different for each provider.
|
||
Not all providers support the same options so make sure to the check the
|
||
documentation for each provider to see what options the use.
|
||
|
||
### `javascript_runtime_options`
|
||
|
||
The `javascript_runtime_options` resource allows setting provider options in a
|
||
DSL-friendly way. See [the Provider Options](#provider-options) section for more
|
||
information about provider options overall.
|
||
|
||
```ruby
|
||
javascript_runtime_options 'myapp' do
|
||
version 'iojs'
|
||
end
|
||
```
|
||
|
||
#### Actions
|
||
|
||
* `:run` – Apply the provider options. *(default)*
|
||
|
||
#### Properties
|
||
|
||
* `resource` – Name of the `javascript_runtime` resource. *(name property)*
|
||
* `for_provider` – Provider to set options for.
|
||
|
||
All other attribute keys will be used as options data.
|
||
|
||
### `javascript_execute`
|
||
|
||
The `javascript_execute` resource executes a JavaScript script using the configured runtime.
|
||
|
||
```ruby
|
||
javascript_execute 'myapp.js' do
|
||
user 'myuser'
|
||
end
|
||
```
|
||
|
||
This uses the built-in `execute` resource and supports all the same properties.
|
||
|
||
#### Actions
|
||
|
||
* `:run` – Execute the script. *(default)*
|
||
|
||
#### Properties
|
||
|
||
* `command` – Script and arguments to run. Must not include the `node`. *(name attribute)*
|
||
* `javascript` – Name of the `javascript_runtime` resource to use. If not specified, the
|
||
most recently declared `javascript_runtime` will be used. Can also be set to the
|
||
full path to a `node` binary.
|
||
|
||
For other properties see the [Chef documentation](https://docs.chef.io/resource_execute.html#attributes).
|
||
|
||
### `node_package`
|
||
|
||
The `node_package` resource installs Node.js packages using
|
||
[NPM](https://www.npmjs.com/).
|
||
|
||
```ruby
|
||
node_package 'express' do
|
||
version '4.13.3'
|
||
end
|
||
```
|
||
|
||
This uses the built-in `package` resource and supports the same actions and
|
||
properties. Multi-package installs are supported using the standard syntax.
|
||
|
||
#### Actions
|
||
|
||
* `:install` – Install the package. *(default)*
|
||
* `:upgrade` – Upgrade the package.
|
||
* `:remove` – Uninstall the package.
|
||
|
||
The `:purge` and `:reconfigure` actions are not supported.
|
||
|
||
#### Properties
|
||
|
||
* `group` – System group to install the package.
|
||
* `package_name` – Package or packages to install. *(name property)*
|
||
* `path` – Path to install the package in to. If unset install using `--global`.
|
||
*(default: nil)*
|
||
* `version` – Version or versions to install.
|
||
* `javascript` – Name of the `javascript_runtime` resource to use. If not specified, the
|
||
most recently declared `javascript_runtime` will be used. Can also be set to the
|
||
full path to a `node` binary.
|
||
* `unsafe_perm` – Enable `--unsafe-perm`. *(default: true)*
|
||
* `user` – System user to install the package.
|
||
|
||
For other properties see the [Chef documentation](https://docs.chef.io/resource_package.html#attributes).
|
||
The `response_file`, `response_file_variables`, and `source` properties are not
|
||
supported.
|
||
|
||
### `npm_install`
|
||
|
||
The `npm_install` resource runs `npm install` for a package.
|
||
|
||
```ruby
|
||
npm_install '/opt/myapp'
|
||
```
|
||
|
||
The underlying `npm install` command will run on every converge, but notifications
|
||
will only be triggered if a package is actually installed.
|
||
|
||
#### Actions
|
||
|
||
* `:install` – Run `npm install`. *(default)*
|
||
|
||
#### Properties
|
||
|
||
* `path` – Path to the package folder containing a `package.json`. *(name attribute)*
|
||
* `group` – System group to install the packages.
|
||
* `javascript` – Name of the `javascript_runtime` resource to use. If not specified, the
|
||
most recently declared `javascript_runtime` will be used. Can also be set to the
|
||
full path to a `node` binary.
|
||
* `production` – Enable production install mode. *(default: true)*
|
||
* `unsafe_perm` – Enable `--unsafe-perm`. *(default: true)*
|
||
* `user` – System user to install the packages.
|
||
|
||
## Javascript Providers
|
||
|
||
### Common Options
|
||
|
||
These provider options are supported by all providers.
|
||
|
||
* `version` – Override the runtime version.
|
||
|
||
### `system`
|
||
|
||
The `system` provider installs Node.js using system packages. This is currently
|
||
only tested on platforms using `apt-get` and `yum` (Debian, Ubuntu, RHEL, CentOS
|
||
Amazon Linux, and Fedora). It may work on other platforms but is untested.
|
||
|
||
```ruby
|
||
javascript_runtime 'myapp' do
|
||
provider :system
|
||
version '0.10'
|
||
end
|
||
```
|
||
|
||
#### Options
|
||
|
||
* `dev_package` – Install the package with the headers and other development
|
||
files. Can be set to a string to select the dev package specifically.
|
||
*(default: true)*
|
||
* `package_name` – Override auto-detection of the package name.
|
||
* `package_upgrade` – Install using action `:upgrade`. *(default: false)*
|
||
* `package_version` – Override auto-detection of the package version.
|
||
|
||
### `scl`
|
||
|
||
The `scl` provider installs Node.js using the [Software Collections](https://www.softwarecollections.org/)
|
||
packages. This is only available on RHEL and CentOS. SCL offers more
|
||
recent versions of Node.js than the system packages for the most part. If an SCL
|
||
package exists for the requests version, it will be used in preference to the
|
||
`system` provider.
|
||
|
||
```ruby
|
||
javascript_runtime 'myapp' do
|
||
provider :scl
|
||
version '0.10'
|
||
end
|
||
```
|
||
|
||
### `nodejs`
|
||
|
||
The `nodejs` provider installs Node.js from the static binaries on nodejs.org.
|
||
Support is included for Linux and OS X.
|
||
|
||
```ruby
|
||
javascript_runtime 'myapp' do
|
||
provider :nodejs
|
||
version '0.12'
|
||
end
|
||
```
|
||
|
||
#### Options
|
||
|
||
* `path` – Folder to install Node.js to. *(default: /opt/nodejs-<version>)*
|
||
* `static_version` – Specific version number to use for computing the URL and
|
||
path. *(default: automatic from `version`)*
|
||
* `strip_components` – Value to pass to tar --strip-components. *(automatic)*
|
||
* `url` – URL template to download the archive from. *(default: automatic)*
|
||
|
||
### `iojs`
|
||
|
||
The `iojs` provider installs io.js from the static binaries on iojs.org.
|
||
Support is included for Linux and OS X.
|
||
|
||
```ruby
|
||
javascript_runtime 'myapp' do
|
||
provider :iojs
|
||
version '3'
|
||
end
|
||
```
|
||
|
||
#### Options
|
||
|
||
* `path` – Folder to install io.js to. *(default: /opt/iojs-<version>)*
|
||
* `static_version` – Specific version number to use for computing the URL and
|
||
path. *(default: automatic from `version`)*
|
||
* `strip_components` – Value to pass to tar --strip-components. *(automatic)*
|
||
* `url` – URL template to download the archive from. *(default: automatic)*
|
||
|
||
## Sponsors
|
||
|
||
The Poise test server infrastructure is sponsored by [Rackspace](https://rackspace.com/).
|
||
|
||
## License
|
||
|
||
Copyright 2015-2017, Noah Kantrowitz
|
||
|
||
Licensed under the Apache License, Version 2.0 (the "License");
|
||
you may not use this file except in compliance with the License.
|
||
You may obtain a copy of the License at
|
||
|
||
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
||
Unless required by applicable law or agreed to in writing, software
|
||
distributed under the License is distributed on an "AS IS" BASIS,
|
||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
See the License for the specific language governing permissions and
|
||
limitations under the License.
|