Puppet - 依赖关系不起作用

时间:2016-04-05 15:25:11

标签: elasticsearch puppet kibana elastic-stack

我一直在研究一个小模块,它使用预制的kibana木偶模块(编辑:'lesaux / kibana4'),还包含一个简单的exec,它为kibana安装了shield插件。 (旁注:对于这个例子,我也是从我的清单中包含的另一个模块安装java8)

我的问题是exec在实际安装kibana之前一直在运行。我想首先安装kibana,然后安装exec。所以我添加了一个'require',如下所示,并添加了一个链以确保exec发生在。

之后
class test_kibana {

  class { '::kibana4':
     package_ensure             => '4.4.0-linux-x64',
     package_provider           => 'archive',
     config                     => {
       'server.host'            => 'localhost',
       'elasticsearch.url'      => 'http://localhost:9200',
       'elasticsearch.username' => 'testUserName',
       'elasticsearch.password' => 'testPassword',
       'shield.encryptionKey'   => 'testencryptionkey',
     }
  } ->

   exec { 'install kibana shield plugin':
     require                    => Class['::kibana4'],
     path                       => '/opt/kibana4/bin',
     command                    => 'kibana plugin --install kibana/shield/latest',
   }

}

需求和链条似乎不起作用。因此,当exec尝试运行时,它不知道命令的含义和失败,因为kibana还不存在。

为什么木偶不按我要求的顺序安装?

这是我的输出:

==> nat: Notice: Scope(Archive::Download[kibana-4.4.0-linux-x64.tar.gz]): No checksum for this archive
==> nat: Notice: Compiled catalog for nat.test.com in environment production in 2.58 seconds
==> nat: Notice: /Stage[main]/Apt/File[preferences]/ensure: created
==> nat: Notice: /Stage[main]/test_java8/File[/tmp/java.preseed]/ensure: defined content as '{md5}fa13124e9e801dd42c91fa94ef7f1c1e'
==> nat: Notice: /Stage[main]/test_java8/File[/tmp/jce]/ensure: created
==> nat: Notice: /Stage[main]/test_java8/File[/tmp/jce/local_policy.jar]/ensure: defined content as '{md5}dabfcb23d7bf9bf5a201c3f6ea9bfb2c'
==> nat: Notice: /Stage[main]/test_java8/File[/tmp/jce/US_export_policy.jar]/ensure: defined content as '{md5}ef6e8eae7d1876d7f05d765d2c2e0529'
==> nat: Notice: /Stage[main]/Kibana4::User/Group[kibana4]/ensure: created
==> nat: Notice: /Stage[main]/Kibana4::User/User[kibana4]/ensure: created
==> nat: Error: Could not find command 'kibana'
==> nat: Error: /Stage[main]/Smart_monitoring_kibana/Exec[install kibana shield plugin]/returns: change from notrun to 0 failed: Could not find command 'kibana'
==> nat: Notice: /Stage[main]/Apt/Apt::Setting[conf-update-stamp]/File[/etc/apt/apt.conf.d/15update-stamp]/content: content changed '{md5}b9de0ac9e2c9854b1bb213e362dc4e41' to '{md5}0962d70c4ec78bbfa6f3544ae0c41974'
==> nat: Notice: /Stage[main]/test_java8/Apt::Ppa[ppa:webupd8team/java]/Exec[add-apt-repository-ppa:webupd8team/java]/returns: executed successfully
==> nat: Notice: /Stage[main]/Apt::Update/Exec[apt_update]: Triggered 'refresh' from 1 events
==> nat: Notice: /Stage[main]/test_java8/Exec[apt-update]/returns: executed successfully
==> nat: Notice: /Stage[main]/test_java8/Package[oracle-java8-installer]/ensure: created
==> nat: Notice: /Stage[main]/test_java8/File[/etc/profile.d/set_java_home.sh]/ensure: defined content as '{md5}717258a243a8addc2506097f12cd611f'
==> nat: Notice: /Stage[main]/test_java8/Exec[install-jce]/returns: executed successfully
==> nat: Notice: /Stage[main]/Kibana4::Install/Archive[kibana-4.4.0-linux-x64]/Archive::Download[kibana-4.4.0-linux-x64.tar.gz]/Exec[download archive kibana-4.4.0-linux-x64.tar.gz and check sum]/returns: executed successfully
==> nat: Notice: /Stage[main]/Kibana4::Install/Archive[kibana-4.4.0-linux-x64]/Archive::Extract[kibana-4.4.0-linux-x64]/Exec[kibana-4.4.0-linux-x64 unpack]/returns: executed successfully
==> nat: Notice: /Stage[main]/Kibana4::Install/Exec[chown_kibana_directory]: Triggered 'refresh' from 1 events
==> nat: Notice: /Stage[main]/Kibana4::Install/File[/opt/kibana4]/ensure: created
==> nat: Notice: /Stage[main]/Kibana4::Config/File[kibana-config-file]/content: content changed '{md5}dacdab7bddd2bcede2cc7cd8c6948307' to '{md5}7c24ae699bfbfbb5314ce01bdcdc3b6d'
==> nat: Notice: /Stage[main]/Kibana4::Config/File[kibana-config-file]/mode: mode changed '0644' to '0755'
==> nat: Notice: /Stage[main]/Kibana4::Config/File[/var/run/kibana.pid]/ensure: created
==> nat: Notice: /Stage[main]/Kibana4::Config/File[/var/log/kibana]/ensure: created
==> nat: Notice: /Stage[main]/Kibana4::Service/File[/etc/init.d/kibana4]/ensure: defined content as '{md5}0c5c726cdabb5355276abc6394a868a7'
==> nat: Notice: /Stage[main]/Kibana4::Service/File[/etc/default/kibana4]/ensure: defined content as '{md5}57b82a4af4f8872bfbc6488b0a85c652'
==> nat: Notice: /Stage[main]/Kibana4::Service/Service[kibana4]/ensure: ensure changed 'stopped' to 'running'
==> nat: Notice: Applied catalog in 644.11 seconds
编辑:我发现lesaux / kibana模块最近已经更新,现在它允许你在安装过程中安装插件。 (因此我不再需要使用此exec函数。问题已解决!)

1 个答案:

答案 0 :(得分:3)

您遇到containment问题。

类充当它们直接声明的所有资源的容器。如果您声明与类的关系,则意味着与所有这些资源具有相同的关系。

但是,类不是资源,并且不会自动充当它们声明的其他类的容器。这有很好的理由,但它们并不是真正相关的。您的结果是Exec和类kibana4::installkibana4::execkibana4::service之间没有任何关系。 Puppet不限于在这三个之后同步Exec

通常(但绝不是通用的)你确实希望一个类包含它声明的部分或全部其他类。为此,有contain函数/语句(自Puppet 3.4起)。如果你添加

contain 'kibana4::install'
contain 'kibana4::exec'
contain 'kibana4::service'

在类Kibana4的主体的 end ,然后您将获得您正在寻找的包含语义。

如果您遇到的是比v3.4更旧的Puppet(当前为4.4; v3树中的最新版本是v3.8),那么还有其他方法可以确保正确收容,您可以在我链接的手册部分中阅读