Puppet - API RESTful
A Puppet usa APIs RESTful como canal de comunicação entre o mestre da Puppet e os agentes da Puppet. A seguir está o URL básico para acessar esta API RESTful.
https://brcleprod001:8140/{environment}/{resource}/{key}
https://brcleprod001:8139/{environment}/{resource}/{key}
Segurança da API REST
A Puppet geralmente cuida da segurança e do gerenciamento de certificados SSL. No entanto, se alguém deseja usar a API RESTful fora do cluster, é necessário gerenciar o certificado por conta própria, ao tentar se conectar a uma máquina. A política de segurança do Puppet pode ser configurada por meio do arquivo authconfig restante.
Testando REST API
O utilitário Curl pode ser usado como um utilitário básico para descansar a conectividade da API RESTful. A seguir está um exemplo de como podemos recuperar o catálogo de nós usando o comando curl da API REST.
curl --cert /etc/puppet/ssl/certs/brcleprod001.pem --key
/etc/puppet/ssl/private_keys/brcleprod001.pem
No seguinte conjunto de comandos estamos apenas configurando o certificado SSL, que será diferente dependendo de onde o diretório SSL está e do nome do nó sendo usado. Por exemplo, vamos examinar o seguinte comando.
curl --insecure -H 'Accept: yaml'
https://brcleprod002:8140/production/catalog/brcleprod001
No comando acima, apenas enviamos um cabeçalho especificando o formato ou formatos que queremos de volta e uma URL RESTful para gerar um catálogo de brcleprod001 no ambiente de produção, irá gerar a seguinte saída.
--- &id001 !ruby/object:Puppet::Resource::Catalog
aliases: {}
applying: false
classes: []
...
Vamos supor outro exemplo, onde queremos obter o certificado CA de volta do Puppet master. Não requer autenticação com o próprio certificado SSL assinado, uma vez que é necessário antes de ser autenticado.
curl --insecure -H 'Accept: s' https://brcleprod001:8140/production/certificate/ca
-----BEGIN CERTIFICATE-----
MIICHTCCAYagAwIBAgIBATANBgkqhkiG9w0BAQUFADAXMRUwEwYDVQQDDAxwdXBw
Referência da API Puppet Master e Agent Shared
GET /certificate/{ca, other}
curl -k -H "Accept: s" https://brcelprod001:8140/production/certificate/ca
curl -k -H "Accept: s" https://brcleprod002:8139/production/certificate/brcleprod002
Referência da API Puppet Master
Recursos autenticados (certificado válido e assinado necessário).
Catálogos
GET /{environment}/catalog/{node certificate name}
curl -k -H "Accept: pson" https://brcelprod001:8140/production/catalog/myclient
Lista de revogação de certificado
GET /certificate_revocation_list/ca
curl -k -H "Accept: s" https://brcleprod001:8140/production/certificate/ca
Pedido de Certificado
GET /{environment}/certificate_requests/{anything} GET
/{environment}/certificate_request/{node certificate name}
curl -k -H "Accept: yaml" https://brcelprod001:8140/production/certificate_requests/all
curl -k -H "Accept: yaml" https://brcleprod001:8140/production/certificate_request/puppetclient
Relatórios Envie um Relatório
PUT /{environment}/report/{node certificate name}
curl -k -X PUT -H "Content-Type: text/yaml" -d "{key:value}" https://brcleprod002:8139/production
Nó - Fatos sobre um nó específico
GET /{environment}/node/{node certificate name}
curl -k -H "Accept: yaml" https://brcleprod002:8140/production/node/puppetclient
Status - usado para teste
GET /{environment}/status/{anything}
curl -k -H "Accept: pson" https://brcleprod002:8140/production/certificate_request/puppetclient
Referência da API Puppet Agent
Quando um novo agente é configurado em qualquer máquina, por padrão, o agente Puppet não escuta a solicitação HTTP. Ele precisa ser habilitado no Puppet adicionando “listen = true” no arquivo puppet.conf. Isso permitirá que os agentes Puppet escutem a solicitação HTTP quando o agente Puppet estiver inicializando.
Fatos
GET /{environment}/facts/{anything}
curl -k -H "Accept: yaml" https://brcelprod002:8139/production/facts/{anything}
Run - Faz com que o cliente atualize como um fantoche ou chute de marionete.
PUT /{environment}/run/{node certificate name}
curl -k -X PUT -H "Content-Type: text/pson" -d "{}"
https://brcleprod002:8139/production/run/{anything}