Hi cwebber, Thank you for the detail example!
I finally figured out how to do this. Very simple. https://docs.puppetlabs.com/facter/2.0/custom_facts.html#external-facts With recent versions of facter, you can create external facts using any executable format, or even simple yaml or text files, placed in: <MODULEPATH>/<MODULE>/facts.d/. or in */etc/facter/facts.d/* External facts provide a way to use arbitrary executables or scripts as facts, or set facts statically with structured data. If you’ve ever wanted to write a custom fact in Perl, C, or a one-line text file, this is how. So what I did is just to place my existing perl script which will connect to my sybase and query into the facts.d folder. Modify it a little bit to return key/value pairs: key1=value1 key2=value2 key3=value3 Then I can use "key1", "key2" and "key3" as global facts (variables). Thanks! On Tuesday, October 21, 2014 12:11:21 PM UTC-4, cwebber wrote: > > Assuming the libraries to connect to sybase from ruby exist… you could > just write a custom function. > https://docs.puppetlabs.com/guides/custom_functions.html > > so basically you want to do something like: > > ```` > $workgroup = sybase_workgroup($::hostname) > > case $workgroup { > > ‘A’: { > $template = template(‘modulename/A/template.erb’) > } > ‘B’: { > $template = template(‘modulename/B/template.erb’) > } > default: { > $template = template(‘modulename/default/template.erb’) > } > } > > And then the custom function would do something like > ```` > require ‘an_sybase_library’ > > module Puppet::Parser::Functions > > newfunction(:sybase_workstation) do |args| > db = sybase_db_connection > result = db.query(“SELECT workgroup FROM workgroups WHERE hostname = > ‘#{args[0]}’”) > result[‘workgroup’] > end > end > ```` > Totally full of pseudo code, but that hopefully makes sense. > > — cwebber > > On Oct 21, 2014, at 7:20 AM, Stella <[email protected] <javascript:>> > wrote: > > Hi Johan, > > Thank you very much for the information. > > I am not using the machine information from Sybase to do node > classification in puppet. My node classification is done by Puppet > Dashboard. > > My Sybase database doesn't contain any puppet class information. It > contains the hostname and the workgroup the host belongs to. What I want > to return from my database query is: given a hostname, please tell me which > workgroup it belongs to, then based on the workgroup value, my puppet class > will decide which template to apply to this host. > > That's why I think a custom fact might do this job: I will define a custom > fact, which will get hostname and then connect to Sybase to determine this > host's workgroup. I actually already have the perl script to do this job, > but need to convert it to Ruby scirpt (puppet fact is defined in Ruby). > > I am still doing research to find out what is the best approach. Will let > you know. > > Thanks, > Stella > > On Monday, October 20, 2014 5:36:50 PM UTC-4, Johan De Wit wrote: >> >> Hi Stella, >> >> my first thought goes to implement a ENC script. Since you are already >> keeping inventory data in a database, you could keep everything in one >> place. If it is possible to add puppet support, in practice, make it >> possible to assign puppet classes to your nodes in your sybase setup. >> >> If that is not possible, I would look at a hiera backend getting the info >> from your sybase database. >> >> Keep in mind that it is the puppet master that needs the info from your >> sybase database, so facts is not really an option. >> >> (technically you can, but then every node needs access to your database, >> but your master can get the needed info also, only keep in mind your master >> identifies the nodes with the 'clientcert' or 'certname'. >> >> Personally, I would go for the ENC first place, hiera in second, but >> facts is a no-go. >> >> hth a bit >> >> jo >> >> >> >> On 20/10/14 19:27, Stella wrote: >> >> Hi, >> >> I am using Puppet 3.62. Trying to figure out what is the best way to >> connect to my sybase database to query machine information. >> >> Which is better: >> >> 1. Define facts that will connect to my sybase and do the query. >> >> 2. Use Hiera to connect to my sybase and do the query. >> >> Anyone has any example to share? >> >> Thanks! >> >> Stella >> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/puppet-users/69fa9702-708a-442c-803c-1b3bead7ab2f%40googlegroups.com >> >> <https://groups.google.com/d/msgid/puppet-users/69fa9702-708a-442c-803c-1b3bead7ab2f%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> >> >> >> -- >> Johan De Wit >> >> Open Source Consultant >> >> Red Hat Certified Engineer (805008667232363) >> Puppet Certified Professional 2013/2014 (PCP0000006) >> _________________________________________________________ >> >> Open-Future Phone +32 (0)2/255 70 70 >> Zavelstraat 72 Fax +32 (0)2/255 70 71 >> 3071 KORTENBERG Mobile +32 (0)474/42 40 73 >> BELGIUM http://www.open-future.be >> _________________________________________________________ >> >> >> >> Upcoming Events: >> >> Puppet Introduction Course | >> http://www.open-future.be/puppet-introduction-course-13th-october >> >> Puppet Practitioner Training | >> http://www.open-future.be/puppet-practitioner-former-puppet-advanced-training-14-till-16th-october >> >> Linux Training | >> http://www.open-future.be/linux-training-20-till-24th-october >> >> Puppet Introduction Course | >> http://www.open-future.be/puppet-introduction-course-10th-november >> >> Puppet Fundamentals Training | >> http://www.open-future.be/puppet-fundamentals-training-12-till-14th-november >> >> Subscribe to our newsletter: http://eepurl.com/BUG8H >> >> > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/puppet-users/90b2a777-424d-49ec-a236-ab8dcd85d41e%40googlegroups.com > > <https://groups.google.com/d/msgid/puppet-users/90b2a777-424d-49ec-a236-ab8dcd85d41e%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > > > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/220e5814-1b73-4787-af02-e3968551ba2a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
