2013-08-01 2 views
1

Я пытаюсь самостоятельно загрузить узел и запустить рецепт getting-started при первой загрузке. Кажется, все работает отлично, за исключением того, что рецепт никогда не запускается.«chef-client -j» не работает, как ожидалось

Вот мой скрипт, который запускается rc.local:

#!/bin/bash 

wget http://<some_IP_Address>/chef-11.6.0-1.el6.x86_64.rpm -P /var/tmp/ 
rpm -ivh /var/tmp/chef-11.6.0-1.el6.x86_64.rpm 
mkdir -p /etc/chef 
cd /etc/chef 
wget http://<some_IP_Address>/chef-validator.pem 
mv chef-validator.pem validation.pem 

cat > client.rb << EOL 
log_level  :auto 
log_location  STDOUT 
chef_server_url "MY_CHEF_SERVER_FQDN" 
validation_client_name "chef-validator" 
EOL 

cat > /etc/chef/firstboot.json << EOL 
{"run_list": ["recipe[getting-started]"]} 
EOL 

chef-client -j /etc/chef/firstboot.json 

После того, как узел загружается, я вижу, что узел регистрируется с сервером шефа однако getting-started рецепта, который был указан в firstboot.json вместе с chef-client -j на последней строке моего скрипта не запускается.

Он действует как только chef-client в настоящее время срабатывает и не chef-client -j /etc/chef/firstboot.json

Если я смотрю на свою рабочую станцию, я вижу, что этот рецепт добавляется run_list узла, а также, только, что это еще не выполнена.

Вот вывод команды из моего шефа рабочей станции для узла, который был бутстрапированная:

$ knife node show node_name.domain.com --run-list 
node_name.domain.com: 
    run_list: recipe[getting-started] 

ВОПРОС: Не могли бы вы сказать мне, что я мог бы быть здесь не хватает? почему шеф-клиент не может запускать все, что упоминалось в firstboot.json.

UPDATE: Если я бегу chef-client -j /etc/chef/firstboot.json вручную, то он делает работу. Так что, похоже, что-то не так с вызовом rc.local. Он работает только chef-client, даже если я упомянул chef-client -j /etc/chef/firstboot.json

Спасибо.

+0

Имеет ли он достаточное количество разрешений для выполнения вещей, указанных в рецепте _getting-started_? –

+0

Я так думаю. Если я запускаю один и тот же сценарий вручную, рецепт выполняется нормально. Должен ли я искать какое-либо конкретное разрешение в отношении запуска его через 'rc.local'? Кроме того, я думаю об использовании 'cloudinit' в качестве альтернативы. Но эту проблему не так сложно взломать. Наверное, мне не хватает чего-то очевидного. Спасибо за ваше время. – slayedbylucifer

ответ

0

"Подготовка к стартером" рецепт предполагается создать "шеф-посаживания started.txt" под домашний каталог пользователя , Он действительно создавал этот файл в разделе «/».

Но так или иначе, это подтверждает мое мышление о том, как загружать экземпляр с точки зрения автосогласования.

2

Вместо

cat > /etc/chef/firstboot.json << EOL 
{"run_list": ["recipe[getting-started]"]} 
EOL 

chef-client -j /etc/chef/firstboot.json 

в вашем скрипте, попробуйте:

chef-client -o 'getting-started' 
+0

Спасибо. Но он все еще не запускает рецепт. Он регистрируется на сервере шеф-повара, как если бы я запускал только «chef-client». Но рецепт 'get-started' не запускается. Опять же, если я запускаю его вручную, он отлично работает. Я думаю, что это имеет какое-то отношение к 'rc.local', потому что мой, а также ваш подход работают отлично, когда я запускаю свой сценарий вручную. Спасибо за ваше время. – slayedbylucifer

Смежные вопросы