2013-09-13 3 views
2

В настроенных модулях на кукольном у меня естьКак проверить наличие файла на Хозяине Марионеток

g_iptables 
├── files 
│ └── fqdn-of-server 
├── lib 
│ └── puppet 
│  └── parser 
│   └── functions 
│    └── file_exists.rb 
└── manifests 
    └── init.pp 

, и я хочу, чтобы модуль сделать что-то или нет файла «FQDN-оф-сервер «существуют на Марионеточном Мастере. Погуглить сделали принесите мне функцию file_exists.rb:

#!/usr/bin/ruby 

require 'puppet' 

module Puppet::Parser::Functions 
    newfunction(:file_exists, :type => :rvalue) do |args| 
    if File.exists?(args[0]) 
     return 1 
    else 
     return 0 
    end 
    end 
end 

и это делает работу, если положить в чем-то вроде:

$does_fqdn_file_exists = file_exists("/tmp/$fqdn") 

if $does_fqdn_file_exists == 1 { 
... 
} 

в моем манифесте init.pp (конечно $ FQDN является facter). Проблема заключается в том, что он работает только на клиенте (так что $ is_fqdn_file_exists равно 1, если на клиентском $ fqdn существует значение/tmp/$ fqdn, оно не работает на марионетке.

Кроме того, я хочу использовать марионетку : /// структуры uri в этой конструкции, но при этом sofar, моя функция не понимает этот uri.

Может кто-нибудь мне помочь? Функция ruby ​​проистекает от кого-то в Интернете, который утверждает, что проверяет существование файла . на мастера, который не так (по крайней мере, не то, что я могу видеть)

ответ

2

в кукловодом вы могли проверить это следующим образом:

# create a temporary file that may look like this : 

]$ cat /tmp/checkfile.pp 
$does_fqdn_file_exists = file_exists("/tmp/$fqdn") 
notify{ "Check File = $does_fqdn_file_exists" : } 

# Then run it : 

]$ puppet apply /tmp/checkfile.pp 
1

Вот как это сделать со стандартной библиотекой функций. Создайте файл в известном месте с содержанием «не найдено», и использовать эту проверку:

if file('/does/it/exist', '/file/containing/not_found') != 'not found' { 
    # /does/it/exist must exist, do things here 
} 

Это происходит потому, что file() функция в кукольном будет считывать содержимое первого файла при условии, что на самом деле существует. Вид kludge, чтобы использовать его таким образом, но он работает и не требует изменения набора функций по умолчанию.

4

Alex G Предложенное решение с некоторыми исправлениями работает для меня, и, возможно, будет полезным для кого-то еще:

if file('/does/it/exist', '/dev/null') != '' { 
    # /does/it/exist must exist, do things here 
} 
Смежные вопросы