elasticsearch - Puppet - 依赖项不起作用

标签 elasticsearch puppet kibana elastic-stack

我一直在研究一个小模块,它使用预制的 kibana puppet 模块(编辑:'lesaux/kibana4'),还包含一个简单的 exec,它为 kibana 安装屏蔽插件。 (旁注:对于此示例,我还从 list 中包含的另一个模块安装 java8)

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

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 尚不存在。

为什么 puppet 不按我要求的顺序安装这些?

这是我的输出:
==> 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 函数。问题已解决!)

最佳答案

您有一个 containment问题。

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

然而,类不是资源,并且类不会自动充当它们声明的其他类的容器。这有很好的理由,但在这里它们并不真正相关。你的结果是你和 Exec 没有任何关系。和类(class) kibana4::install , kibana4::exec , 和 kibana4::service . Puppet 不限于同步 Exec在这三个之后。

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

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

在类(class)正文的末尾Kibana4 ,然后您将获得您正在寻找的包含语义。

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

关于elasticsearch - Puppet - 依赖项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36430636/

相关文章:

ruby-on-rails - 按Tire/ElasticSearch中的整个字段值分组

oracle - 初始sql_last_value的Logstash jdbc-input-plugin配置

puppet - 在 Vagrant 中使用自定义 puppet 函数

elasticsearch - Kibana管道聚合

elasticsearch - 如何从现有日志中提取字段(ECS中的流利位)

elasticsearch - 安装 ElasticSearch APM

elasticsearch - Elasticsearch不允许使用括号将字段名称用于脚本

elasticsearch - Elasticsearch 中带有提升字段的查询字符串

php - 带有 Vagrant 的 LEMP 堆栈 - 无法安装 Php5-fpm/Nginx?

puppet - Vagrant & Puppet - 配置失败