# knife node

A node is any physical, virtual, or cloud machine that is configured to be maintained by a chef-client.

The knife node subcommand is used to manage the nodes that exist on a server.

Note

Review the list of common options available to this (and all) Knife subcommands and plugins.

## bulk delete

The `bulk delete` argument is used to delete one or more nodes that match a pattern defined by a regular expression. The regular expression must be within quotes and not be surrounded by forward slashes (/).

### Syntax

This argument has the following syntax:

    $ knife node bulk delete REGEX

### Options

This command does not have any specific options.

### Examples

The following examples show how to use this Knife subcommand:

Bulk delete nodes

Use a regular expression to define the pattern used to bulk delete nodes:

    $ knife node bulk delete "^[0-9]{3}$"

Type `Y` to confirm a deletion.

## create

The `create` argument is used to add a node to the server. Node data is stored as JSON on the server.

### Syntax

This argument has the following syntax:

    $ knife node create NODE_NAME

### Options

This command does not have any specific options.

### Examples

The following examples show how to use this Knife subcommand:

Create a node

To add a node, enter:

    $ knife node create node1

In the $EDITOR enter the node data in JSON:

    ## sample:
    {
       "normal": {
       },
       "name": "foobar",
       "override": {
       },
       "default": {
       },
       "json_class": "Chef::Node",
       "automatic": {
       },
       "run_list": [
          "recipe[zsh]",
          "role[webserver]"
       ],
       "chef_type": "node"
    }

When finished, save it.

## delete

The `delete` argument is used to delete a node from the server.

Note

Deleting a node will not delete any corresponding API clients.

### Syntax

This argument has the following syntax:

    $ knife node delete NODE_NAME

### Options

This command does not have any specific options.

### Examples

The following examples show how to use this Knife subcommand:

Delete a node

    $ knife node delete node_name

## edit

The `edit` argument is used to edit the details of a node on a server. Node data is stored as JSON on the server.

### Syntax

This argument has the following syntax:

    $ knife node edit NODE_NAME (options)

### Options

This argument has the following options:

`-a`, `--all`
  Displays a node in the $EDITOR. By default, attributes that are default, override, or automatic are not shown.

### Examples

The following examples show how to use this Knife subcommand:

Edit a node

To edit the data for a node named “node1”, enter:

    $ knife node edit node1 -a

Update the role data in JSON:

    ## sample:
    {
       "normal": {
       },
       "name": "node1",
       "override": {
       },
       "default": {
       },
       "json_class": "Chef::Node",
       "automatic": {
       },
       "run_list": [
          "recipe[devops]",
          "role[webserver]"
       ],
       "chef_type": "node"
    }

When finished, save it.

## from file

The `from file` argument is used to create a node using existing node data as a template.

### Syntax

This argument has the following syntax:

    $ knife node from file FILE

### Options

This command does not have any specific options.

### Examples

The following examples show how to use this Knife subcommand:

Create a node using a JSON file

To add a node using data contained in a JSON file:

    $ knife node from file "path to JSON file"

## list

The `list` argument is used to view all of the nodes that exist on a server.

### Syntax

This argument has the following syntax:

    $ knife node list (options)

### Options

This argument has the following options:

`-w`, `--with-uri`
  Indicates that the corresponding URIs will be shown.

### Examples

The following examples show how to use this Knife subcommand:

View a list of nodes

To verify the list of nodes that are registered with the server, enter:

    $ knife node list

to return something similar to:

    i-12345678
    rs-123456

## run_list add

A run-list is an ordered list of roles and/or recipes that are run in an exact order. A run-list is always specific to the node on which it runs, though it is possible for many nodes to have run-lists that are similar or even identical. The items within a run-list are maintained using Knife and are uploaded to the server and stored as part of the node object for each node. The chef-client always configures a node in the exact order specified by its run-list and will never run the same recipe twice.

The `run_list add` argument is used to add run list items (roles or recipes) to a node.

A run-list must be in one of the following formats: fully qualified, cookbook, or default. Both roles and recipes must be in quotes, for example:

    'role[ROLE_NAME]'

or

    'recipe[COOKBOOK::RECIPE_NAME]'

Use a comma to separate roles and recipes when adding more than one item the run-list:

    'recipe[COOKBOOK::RECIPE_NAME],COOKBOOK::RECIPE_NAME,role[ROLE_NAME]'

### Syntax

This argument has the following syntax:

    $ knife node run_list add NODE_NAME RUN_LIST_ITEM (options)

### Options

This argument has the following options:

`-a ITEM`, `--after ITEM`
  Use this to add the run list item after the specified run list item.

### Examples

The following examples show how to use this Knife subcommand:

Add a role

To add a role to a run list, enter:

    $ knife node run_list add node 'role[ROLE_NAME]'

Add roles and recipes

To add roles and recipes to a run list, enter:

    $ knife node run_list add node 'recipe[COOKBOOK::RECIPE_NAME],recipe[COOKBOOK::RECIPE_NAME],role[ROLE_NAME]'

Add a recipe with a FQDN

To add a recipe to a run list using the fully qualified format, enter:

    $ knife node run_list add node 'recipe[COOKBOOK::RECIPE_NAME]'

Add a recipe with a cookbook

To add a recipe to a run list using the cookbook format, enter:

    $ knife node run_list add node 'COOKBOOK::RECIPE_NAME'

Add the default recipe

To add the default recipe of a cookbook to a run list, enter:

    $ knife node run_list add node 'COOKBOOK'

## run_list remove

The `run_list remove` argument is used to remove run list items (roles or recipes) from a node. A recipe must be in one of the following formats: fully qualified, cookbook, or default. Both roles and recipes must be in quotes, for example: `'role[ROLE_NAME]'` or `'recipe[COOKBOOK::RECIPE_NAME]'`. Use a comma to separate roles and recipes when removing more than one, like this: `'recipe[COOKBOOK::RECIPE_NAME],COOKBOOK::RECIPE_NAME,role[ROLE_NAME]'`.

### Syntax

This argument has the following syntax:

    $ knife node run_list remove NODE_NAME RUN_LIST_ITEM

### Options

This command does not have any specific options.

### Examples

The following examples show how to use this Knife subcommand:

Remove a role

To remove a role from a run list, enter:

    $ knife node run_list remove node 'role[ROLE_NAME]'

Remove a run-list

To remove a recipe from a run list using the fully qualified format, enter:

    $ knife node run_list remove node 'recipe[COOKBOOK::RECIPE_NAME]'

## show

The `show` argument is used to display information about a node.

### Syntax

This argument has the following syntax:

    $ knife node show NODE_NAME (options)

### Options

This argument has the following options:

`-a ATTR`, `--attribute ATTR`
  The attribute (or attributes) to show.
`-l`, `--long`
  Display long output when searching nodes while using the default summary format.
`-m`, `--medium`
  Display more, but not all, of a node’s data when searching using the default summary format.
`-r`, `--run-list`
  Indicates that only the run-list will be shown.

### Examples

The following examples show how to use this Knife subcommand:

Show all data about nodes

To view all data for a node named “build”, enter:

    $ knife node show build

to return:

    Node Name:   build
    Environment: _default
    FQDN:
    IP:
    Run List:
    Roles:
    Recipes:
    Platform:

Show basic information about nodes

To show basic information about a node, truncated and nicely formatted:

    knife node show <node_name>

Show all data about nodes, truncated

To show all information about a node, nicely formatted:

    knife node show -l <node_name>

Show attributes

To list a single node attribute:

    knife node show <node_name> -a <attribute_name>

where `<attribute_name>` is something like kernel or platform. (This doesn’t work for nested attributes like `node[kernel][machine]` because `knife node show` doesn’t understand nested attributes.)

Show the FQDN

To view the FQDN for a node named “i-12345678”, enter:

    $ knife node show i-12345678 -a fqdn

to return:

    fqdn: ip-10-251-75-20.ec2.internal

Show a run-list

To view the run list for a node named “dev”, enter:

    $ knife node show dev -r

Show as JSON data

To view information in JSON format, use the `-F` common option as part of the command like this:

    $ knife role show devops -F json

Other formats available include `text`, `yaml`, and `pp`.

Show as raw JSON data

To view node information in raw JSON, use the `-l` or `--long` option:

    knife node show -l -F json <node_name>

and/or:

    knife node show -l --format=json <node_name>