Como o cliente em particular puxa a política do servidor cfengine

1

Estou trabalhando no CFEngine, mas sou novato nesse conceito. para minha exigência eu estou usando um único servidor e estou usando 10 clientes, agora todos os dez clientes puxam a política do servidor e executam as políticas.

Mas a minha exigência é que a política seja aplicável apenas a um cliente a partir do 10, como o cliente em particular pode apenas extrair as políticas e executá-lo.

Pls me fornece a sugestão, estou muito confuso com isso ..

Obrigado

    
por Ashok 28.01.2013 / 12:05

2 respostas

3

A resposta do maciejmrowiec é boa, mas incompleta; não há obrigação na CFEngine de ter as mesmas promessas em TODOS os seus nós; mas esse é o comportamento padrão

Existem duas maneiras de alcançar o que você deseja:

  1. Tenha as mesmas promessas em todos os lugares (a implementação padrão), e usando classes, controle qual host faz o quê (e para isso eu me refiro à resposta do maciejmrowiec que é bastante abrangente sobre o assunto)
  2. Tenha promessas diferentes no sistema diferente. Há razões para que você não queira que todos os sistemas tenham as mesmas promessas: segredo que você não quer compartilhar, teste / preprod / prod ambiente (mexer com as promessas de teste não deve quebrar a produção). Assim, você pode ter diferentes conjuntos de promessas e armazená-las em pastas diferentes no servidor de políticas (como / var / cfengine / masterfiles / folder1 e / var / cfengine / masterfiles / folder2); e configure o servidor cf para compartilhar essas pastas apenas para os hosts corretos

    bundle server access_rules() {
      access:
        "/var/cfengine/masterfiles/share/folder1"
            admit => { "host1", "host2", "host3" };
    
        "/var/cfengine/masterfiles/folder2"
           admit   => { "host55" };
    }
    

E faça com que o arquivo update.cf copie a promessa da localização correta

    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)");
    
por 30.01.2013 / 19:42
1

Como entendi corretamente, você quer controlar qual política deve ir para um determinado nó ser executado?

O CFEngine funciona dessa maneira, para que TODAS as políticas sejam distribuídas para TODOS os clientes e executadas. Para controlar o que é executado em qual máquina existe um mecanismo na linguagem de política cfengine que é chamado de classes de contexto.

Classes de contexto são apenas atributos do sistema que podem ter 2 estados - existem ou não. Por exemplo, sua máquina é o sistema debian, então, para executar a política em todos os seus sistemas Debian, você usaria essa classe para o escopo onde ela deveria se aplicar. Existem classes difíceis que são descobertas automaticamente pelo cfengine e você pode definir o seu próprio. Para apontar uma máquina específica, você pode usar IP, MAC ou nome de host, que também são definidos como classes.

Por que você precisa distribuir todas as políticas para todos os clientes? Bem, alguns atributos do sistema são menos constantes que o sistema operacional ou o nome do host. As classes podem depender de serviço em execução ou carga de CPU, ficando cheio seu disco rígido e etc. Então você precisa ter toda a política para saber o que fazer com a mudança de ambiente como classes são definidas toda vez quando você deseja executar sua política.

Como usar classes de contexto? Aqui está um exemplo de política simples:

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

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

Esta política irá criar / tmp / file1 em todos os sistemas debian e / tmp / file2 em todos os sistemas redhat.

Você pode usar expressões lógicas como ipv4_192_168_122_116.cpu_high que dizem executar no host com IP 192.168.122.116 E a carga da CPU nesta máquina é alta.

Para obter exemplos mais interessantes, experimente aqui: link

e o manual de referência é sempre um bom ponto de referência: link

Para listar as classes que estão sendo definidas em sua máquina atual, você pode usar 'cf-promises -v'

Espero que isso ajude você.

    
por 29.01.2013 / 11:04

Tags