web-dev-qa-db-ja.com

特定のクライアントがcfengineサーバーからポリシーをプルする方法

私はCFEngineに取り組んでいますが、この概念は初めてです。私の要件では、単一のサーバーを使用しており、10個のクライアントを使用しています。現在、10個のクライアントすべてがサーバーからポリシーをプルし、ポリシーを実行しています。

しかし、私の要件は、ポリシーは10のうち1つのクライアントにのみ適用可能であり、特定のクライアントがポリシーをプルして実行するだけであるということです。

Plsは私に提案を提供します、私はそれと非常に混乱しています..

ありがとう

1
Ashok

Maciejmrowiecの答えは良いですが、不完全です。 CFEngineには、すべてのノードで同じ約束をする義務はありません。しかし、それがデフォルトの動作です

あなたがやりたいことを達成するための2つの方法があります:

  1. どこでも同じ約束をし(デフォルトの実装)、クラスを使用して、どのホストが何をするかを制御します(このために、このトピックについて非常に包括的なmaciejmrowiecの回答を参照します)
  2. 異なるシステムで異なる約束をします。すべてのシステムに同じプロミスを持たせたくない理由があります。共有したくない秘密、テスト/準備/製品環境(テストプロミスをいじっても本番環境が損なわれることはありません)。したがって、さまざまなPromiseのセットを作成し、それらをポリシーサーバー上のさまざまなフォルダー(/ var/cfengine/masterfiles/folder1や/ var/cfengine/masterfiles/folder2など)に保存できます。これらのフォルダを適切なホストとのみ共有するようにcf-serverを設定します

    bundle server access_rules() {
      access:
        "/var/cfengine/masterfiles/share/folder1"
            admit => { "Host1", "Host2", "Host3" };
    
        "/var/cfengine/masterfiles/folder2"
           admit   => { "Host55" };
    }
    

そして、update.cfファイルにpromiseを適切な場所からコピーしてもらいます

    Host55::
      "$(sys.workdir)"
        copy_from =>u_rcp("/var/cfengine/masterfiles/folder2", "$(sys.policy_hub)");


    !Host55::
      "$(sys.workdir)"
        copy_from =>u_rcp("/var/cfengine/masterfiles/folder1", "$(sys.policy_hub)");
3
Nicolas Charles

私が正しく理解しているように、実行するために特定のノードに移動するポリシーを制御したいですか?

CFEngineは、すべてのポリシーがすべてのクライアントに配布されて実行されるように機能します。どのマシンで何が実行されるかを制御するために、コンテキストクラスと呼ばれるcfengineポリシー言語のメカニズムがあります。

コンテキストクラスは、存在するかどうかという2つの状態を持つことができる単なるシステム属性です。たとえば、マシンがDebianシステムである場合、すべてのDebianシステムでポリシーを実行するには、このクラスを使用して、適用する場所をスコープします。 cfengineによって自動検出されるハードクラスがあり、独自に設定できます。特定のマシンを指すには、クラスとしても設定されているIP、MAC、またはホスト名を使用できます。

すべてのポリシーをすべてのクライアントに配布する必要があるのはなぜですか?一部のシステム属性は、オペレーティングシステムまたはホスト名よりも一定ではありません。クラスは、実行中のサービスやCPU負荷、ハードドライブがいっぱいになるなどに依存する可能性があります。次に、ポリシーを実行するたびにクラスが設定されるため、環境の変化にどう対処するかを知るためのポリシー全体が必要です。

コンテキストクラスの使用方法は?簡単なポリシーの例を次に示します。

bundle agent my_test
{
 files:
  debian::            #hardclass
   "/tmp/file1"
    create => "true";

  redhat::             #hardclass
   "/tmp/file2"
    create => "true";
}  

このポリシーは、すべてのDebianシステムで/ tmp/file1を作成し、すべてのredhatシステムで/ tmp/file2を作成します。

Ipv4_192_168_122_116.cpu_highのような論理式を使用できます。これは、IP 192.168.122.116のホストで実行され、このマシンのCPU負荷が高いことを示します。

さらに興味深い例を取得するには、ここで試してください: https://github.com/cfengine/design-center/tree/master/examples

そしてリファレンスマニュアルは常に良いリファレンスポイントです: http://cfengine.com/manuals/cf3-Reference#Decisions

現在のマシンに設定されているクラスを一覧表示するには、「cf-promises-v」を使用できます。

これがお役に立てば幸いです。

1
maciejmrowiec