On Wednesday, July 17, 2013 2:56:34 AM UTC-5, Przemek wrote: > > Hi Puppet Community, > > I prepare manifests and modules to deploy stuff that I need on agent. > During building postgres database I have to export some environmental UNIX > variables stored in "some_file.conf". > Standard procedure to do this is simply run command: > > root@hostname:/path_to_config_file# . some_file.conf >> > > and after this I see all exported variables ("env" command in terminal). > > Now when I trying do the same thing in puppet exec but variables wont > export (no error feedback from agent on debug mode). > Puppet code: > > exec {"enviroments": >> command => '/bin/sh -c ". some_file.conf"', >> path => ["/bin", "/usr/bin","/path_to_config_file"], >> cwd => "/path_to_config_file", >> refreshonly => false, >> require => File["/path_to_config_file/some_file.conf"], >> } >> > >
You seem to have a misconception about the scope of environment variables. Every process has its own, independent environment. When one process spawns another, the child's environment is initialized with copies of those parent-process environment variables that are marked for export, but once a process has started, no changes to another process's (even its parent's or child's) environment has any effect on its own environment. In your case, when that Exec is applied, it launches /bin/sh (presumably a Bourne-compatible shell such as bash), instructing it to execute the commands it finds in some_file.conf. In particular, environment variable assignments in that file are executed, modifying the environment *of that shell process*. If those environment variables are marked for export, then processes subsequently launched *by that shell* will receive copies of those variables in their environments, too. None of that can have any effect on processes launched outside the scope of that Exec's shell process, including the puppet agent's own top-level process or any other process launched by it. Everything runs successfully and correctly; it's just not a useful thing to do. > Puppet version: 3.1.1 > Distributor ID: Debian > Description: Debian GNU/Linux 6.0.7 (squeeze) > Release: 6.0.7 > Codename: squeeze > > I will be very grateful for any help, clues or tips that lead me to > resolve this problem. If the original idea was to subsequently apply additional Execs that rely on the environment you are trying to initialize, then the solution is to wrap it all up into a single Exec. You can do that by writing a wrapper script around the whole thing, using a File resource to ensure it present on the target node, then Execing that, or if it's simple enough then you can do that directly via a more clueful Exec. For example, exec { 'pg_setup': command => '. some_file.conf && do_step_1 && do_step_2', path => ['/bin', '/usr/bin', '/sbin', '/usr/sbin', '/path/to/setup_scripts' ], cwd => '/path/to/config_file', require => File['/path/to/config_file/some_file.conf'], provider => 'shell' } John -- 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 puppet-users+unsubscr...@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users. For more options, visit https://groups.google.com/groups/opt_out.