Auto registration Chef node on server

Скрипт для установки Chef-Client и автоматической регистрации ноды на Chef-Server - без Knife и лишних телодвижений.

node_name соответсвует текущему имени хоста указанному в /etc/hostname ($HOSTNAME переменная окружения), в run_list="" необходимо указать рецепт(ы)/роль(и) или оставить пустым.
Другие параметры Chef-Client смотрите в офф. документации client.rb , chef-client

Если используются подготовленные инсталяционные образы, то Chef-Client возможно интергрировать сразу в образ вместе с postinstall скриптом.

В случае если заданное имя хоста не резолвиться через DNS то на Chef-Server параметр FQDN останется незаполненным для этой ноды, в большинстве случаев это не мешает работе но при возможности необходимо обеспечить резолвинг имени через DNS сервер или /etc/hosts и при следующей синхронизации FQDN будет >заполнена.

Имя ноды необязательно должно соответсвовать имени хоста но в этом случае необходимо явно указать node_name в конфигурационном файле >/etc/chef/client.rb до первого запуска Chef-Client, также это необходимо сделать если по какой либо причине пришлось изменить имя хоста (необходимо в node_name прописать старое имя) иначе клиент не сможет пройти авторизацию на сервере.
Для задания имени ноды можно использовать переменную окружения $NODE_NAME

#!/bin/bash

# settings
chef_package="chef_12.9.41-1_amd64.deb" # Set Chef package version
chef_package_url="https://packages.chef.io/stable/ubuntu/14.04/${chef_package}" # Download URL
org_name="ORG_NAME" # set organizations name  
validation_name="validator" # Validator username
chef_url="https://chef.server/organizations/${org_name}"

config_dir="/etc/chef" # config directory
log="/var/log/chef-client.log" # log file

#####################################
# Roles and Recipes, assigned for Node
# "role[ROLE_NAME], recipe[RECIPE_NAME], ..."
run_list=""

wget ${chef_url}
dpkg -i ${chef_package}

# Create client config file
# See other parameters in the officiall documentation
# https://docs.chef.io/config_rb_client.html
cat <<EOF > ${config_dir}/client.rb
log_level        :info
log_location     '${log}'
chef_server_url  '${chef_url}'
validation_client_name '${validation_name}'
ssl_verify_mode  :none
node_name ENV[NODE_NAME] || ENV[HOSTNAME]
EOF

# Create "validation" key file
# Insert content your validate private key
cat <<EOF > ${config_dir}/validation.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBA
......
dPQ7sje3GKXqsGfT58hBCCPc=
-----END RSA PRIVATE KEY-----
EOF

# Run client
chef-client -r "${run_list}"