【问题标题】:copy shell script from puppet master to puppet agent and execute it on puppet agent将 shell 脚本从 puppet master 复制到 puppet agent 并在 puppet agent 上执行
【发布时间】:2017-05-16 23:17:45
【问题描述】:

我正在尝试将 shell 脚本从 puppet master 复制到 puppet 客户端。

这是我在 puppet master 上的 shell 脚本:

cat /etc/puppetlabs/code/environments/production/modules/mymodule/mybash.sh
echo hi hello

我也在/home/myserver/mybash.sh 中复制了相同的shell 脚本。

这是我在 puppet master 上的 site.pp 文件:

cat /etc/puppetlabs/code/environments/production/manifests/site.pp

notify{"Message : I am a message from puppet master": }

class myfile {
  file { '/home/myserver/mybash.sh':
    mode   => '0755',
    owner  => 'root',
    source => 'puppet:///modules/mymodule/mybash.sh',
    notify => Exec['run_my_script'],
  }
  exec { 'run_my_script':
    command => '/home/npatel/mybash.sh',
  }
}
notify{"Message : new msg test": }

这是 puppet agent 的输出:

myclient:~$ sudo /opt/puppetlabs/bin/puppet agent --test
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for myclient.test.com
Info: Applying configuration version '1483393652'
Notice: Message : I am a message from puppet master
Notice: /Stage[main]/Main/Notify[Message : I am a message from puppet master]/message: defined 'message' as 'Message : I am a message from puppet master'
Notice: Message : new msg test
Notice: /Stage[main]/Main/Notify[Message : new msg test]/message: defined 'message' as 'Message : new msg test'
Notice: Applied catalog in 0.20 seconds

看起来只有带有 notify{"Message : 的行在 puppet 代理上被执行,而不是它们之间的行。

我没有看到mybash.sh 被复制到文件部分中提到的/home/my-client 路径中,并且也没有日志来确保文件是否被复制。

我是否遗漏了源值中的任何内容?

【问题讨论】:

    标签: puppet


    【解决方案1】:

    在 Puppet 中,定义一个类不会自动将它包含在配置中,它只是使它可以被声明。定义一个类类似于用 Ruby、Python 或 C 等语言定义一个函数。该函数只有在被调用时才会生效。同样,Puppet 类定义在我们声明它们之前没有任何效果。

    如果您想实际使用该类,可以使用include 函数声明它。这告诉 Puppet 评估该类并管理其中声明的所有资源。

    除了include 函数之外,还可以使用resource-like class {'myfile':} 语法。

    所以在你的代码中,如果你想声明这个类,你必须这样做:

    /etc/puppetlabs/code/environments/production/manifests/site.pp

    notify{"Message : I am a message from puppet master": }
    
    class myfile {
      file { "/home/myserver/mybash.sh":
        mode   => '0755',
        owner  => 'root',
        source => 'puppet:///modules/mymodule/mybash.sh',
        notify => Exec['run_my_script'],
      }
      exec { 'run_my_script':
        command => '/home/npatel/mybash.sh',
      }
    }
    
    include myfile
    notify{"Message : new msg test": }
    

    我还建议将您的类代码直接放入模块清单中,然后将该类包含在您的 site.pp 文件中:

    /etc/puppetlabs/code/environments/production/modules/mymodule/init.pp

    class myfile {
      file { "/home/myserver/mybash.sh":
        mode   => '0755',
        owner  => 'root',
        source => 'puppet:///modules/mymodule/mybash.sh',
        notify => Exec['run_my_script'],
      }
      exec { 'run_my_script':
        command => '/home/npatel/mybash.sh',
      }
    }
    

    然后在你的site.pp中声明这个类:

    node default {
      include myclass
    } 
    

    【讨论】:

    • 感谢彼得的清晰回答!我能够解决这个问题。
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    相关资源
    最近更新 更多