On 2020-01-20 2:34 a.m., Joaquin Veira wrote: > I understand what you mean but I guess there must be any way to check if I > file exists on the client and act in consecuence. > > I mean, if I want to identify a MySQL server by the existance of > /etc/my.cnf and execute a systemctl enable mysql && systemctl start mysql > that should work, right?
I guess you could write a boolean custom fact that is true if the file exists and false otherwise. but I guess what Ben was trying to expose was that this makes the logic somewhat reversed for what ppl usually do with puppet. with puppet you usually want to dictate what a machine should have, e.g. your logic would read somewhat like "This host is a mysql server". If you have some manifest that configures something if a certain file exists it means that puppet is not authoritative about what a server is but is merely reacting to what sysadmins do directly on the machine. It also means that if someone installs mysql by mistake or somehow gets an /etc/my.cnf file created, then your manifests might wrongly install some things as though this machine was supposed to be a production mysql server, but without a clear decision about this in your infrastructure code. > El sábado, 18 de enero de 2020, 1:12:57 (UTC+1), Ben Ford escribió: >> >> But when I execute this from a server-client infrastructure it seems like >>> the conditionals don't work They are not even processed: >> >> >> Oh, they're processed just the same. But the key part that you've missed >> is that the catalog is compiled on the *master*. That's where all >> functions run. The catalog that the agents get is just a json file that >> describes what state the system should be in. The reason it appeared to >> work when you ran puppet apply was that apply operates like both master and >> agent in that it compiles the catalog and then enforces it. >> >> What's the use case you're trying to solve? Writing code that does >> different things based on some arbitrary condition that might have >> completely different results at different times is generally a brittle >> anti-pattern. We generally want a catalog to manage a system with a known >> end state. >> >> On Fri, Jan 17, 2020 at 8:15 AM Joaquin Veira <[email protected] >> <javascript:>> wrote: >> >>> Hi, >>> >>> I'm trying to use a condition based on the existance of a file. Something >>> like this: >>> >>> if find_file('/etc/if_this_file_exists') { >>> file { '/etc/create_this_file': >>> ensure => present, >>> owner => 'root', >>> group => 'root', >>> mode => '0755', >>> source => >>> "puppet:///modules/${module_name}/etc/create_this_file", >>> } >>> } >>> >>> This is working correctly in a laboratory environment launched with: >>> >>> [root@labserver ~]# puppet apply --modulepath=/home/user/git/ -e "include >>> my_module" --verbose --noop >>> Info: Loading facts >>> Notice: Compiled catalog for labserver in environment lab in 0.04 seconds >>> Info: Applying configuration version '1579255663' >>> Notice: /Stage[main]/my_module::Files/File[/...]/mode: current_value >>> '0777', should be '0755' (noop) >>> Notice: /Stage[main]/my_module::Files/File[/....]/mode: current_value >>> '0777', should be '0755' (noop) >>> Notice: /Stage[main]/my_module::Files/File[/...]/mode: current_value >>> '0777', should be '0644' (noop) >>> Notice: /Stage[main]/my_module::Files/File[/...]/mode: current_value >>> '0777', should be '0770' (noop) >>> Notice: /Stage[main]/my_module::Files/File[/...]/ensure: current_value >>> 'absent', should be 'file' (noop) >>> Notice: Class[my_module::Files]: Would have triggered 'refresh' from 5 >>> events >>> Notice: Stage[main]: Would have triggered 'refresh' from 1 event >>> Notice: Applied catalog in 0.12 second >>> >>> But when I execute this from a server-client infrastructure it seems like >>> the conditionals don't work They are not even processed: >>> >>> [root@devserver ~]# puppet agent -tv --debug --noop >>> ... >>> Debug: /Stage[main]/previous_module::Install/File[/...]: Adding >>> autorequire relationship with User[root] >>> Debug: /Stage[main]/my_module::Files/File[/...]: Adding autorequire >>> relationship with File[/etc/cron.daily] >>> Debug: /Stage[main]/my_module::Files/File[/...]: Adding autorequire >>> relationship with User[root] >>> Debug: /Stage[main]/next_module::Config/App::Conf[00-syslog]/File[/...]: >>> Adding autorequire relationship with User[root] >>> ... >>> >>> Sorry I have to modify the output so I don't show the real paths & files. >>> >>> Can anyone explain to me why is this not working, please? >>> >>> Thanks & regards, >>> >>> Joaquín >>> >>> -- >>> 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/a13df78f-e816-47e8-92d7-3cc46c316276%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/puppet-users/a13df78f-e816-47e8-92d7-3cc46c316276%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> > -- 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/11c85422-3389-5bd1-6f70-51f545e2d02a%40lelutin.ca.
signature.asc
Description: OpenPGP digital signature
