2013-06-25 8 views
5

Si è verificato un errore durante il tentativo di creare una directory in C: \ Programmi utilizzando Chef. Sono amministratore delegato di un ambiente PowerShell come amministratore, quindi non ci dovrebbero essere restrizioni su quali azioni posso eseguire.Chef: autorizzazioni insufficienti per la creazione di una directory in C:

ricette/default.rb

directory node['app']['unzip_path'] do 
    action :create 
end 

attributi/default.rb

default['app']['unzip_path'] = 'C:/Program files/App'

sto ottenendo questo errore:

[2013-06-25T01:51:13+00:00] FATAL: Chef::Exceptions::InsufficientPermissions: directory[C:/Program files/App] (app::agent line 15) had an error: Chef::Exceptions::InsufficientPermissions: Cannot create directory[C:/Program files/App] at C:/Program files/App due to insufficient permissions 

Domanda aggiuntiva: Chef-solo esegue come utente il comando powershell o è in esecuzione come utente speciale "chef"

+1

Gli utenti normali non possono scrivere lì. – pguardiario

+0

Modificato il mio post per riflettere che lo chef viene eseguito come amministratore – BrianJakovich

risposta

3

Seguito sulla risposta di BrianJakovich. La chiamata mkdir_p dovrebbe preservare idempotence in entrambi i casi, ma utilizzando un blocco rubino sarà probabilmente meglio dato che verrà eseguito in fase di convergenza:

ruby_block "hack to mkdir on windows" do 
    block do 
     FileUtils.mkdir_p node['app']['unzip_path'] 
    end 
end 
0

La mia soluzione per questo tipo di problema con chef non consente di effettuare cambiamenti all'interno C: \ Program Files \ è quello di creare un semplice file di script batch come:

@ECHO OFF 
MKDIR "C:\\Program Files\\YourDirectory" 
:END 

e denominarlo programfiles_yourdirectory.bat.erb, allora Aggiungi sotto modelli sul tuo libro di cucina e sulla ricetta chiamarlo come:

template "C:\\chef\\cache\\programfiles_yourdirectory.bat" do 
    source "programfiles_yourdirectory.bat.erb" 
    rights :full_control, "Administrators" 
end 

execute "Create Program Files_YourDirectory Directory" do 
    cwd "C:\\chef\\cache" 
    command "programfiles_yourdirectory.bat" 
    action :run 
    not_if do ::File.exists?('C:\Program Files\YourDirectory') end 
end 

Questo creerà un modello bat all'interno della cartella cuoco \ cache, quindi lo chef-client verrà eseguito il file bat con diritti di amministratore che significa che la cartella verrà creata senza richiedere le autorizzazioni insufficienti cuoco.

Problemi correlati