Как мне создать ресурсы ssh_authorized_key в марионеточном провайдере? (я заставляю флеш?) - PullRequest
2 голосов
/ 29 марта 2011

Полный код на https://gist.github.com/c9815c1b19a36ed07ca5

В nodes.pp У меня

node 'random.brighterplanet.com' {
  $deploy_user = 'www-data'
  include secured_by_authorized_keys
  include logs_in_as_deploy
}

В modules/logs_in_as_deploy/manifests/logs_in_as_deploy.pp У меня

class logs_in_as_deploy {
  access_via_authorized_key { $deploy_user:
    ensure => present
  }
}

В modules/secured_by_authorized_keys/lib/puppet/provider/authorized_keys.rbУ меня

# [...]
def to_ssh_authorized_key(name, ensure_status)
  k = Puppet::Type.type(:ssh_authorized_key).new :name => id(name), :ensure => ensure_status, :key => public_key, :type => 'ssh-rsa', :user => name
  k.provider.create
  k
end
# [...]
Puppet::Type.type(:access_via_authorized_key).provide(:authorized_keys) do
# [...]
  def create
    ks = AuthorizedParty.all.map do |authorized_party|
      authorized_party.to_ssh_authorized_key resource[:name], :present
    end
  end
# [...]

Я вижу

# puppet --debug  /etc/puppet/manifests/site.pp 
[...]
notice: /Stage[main]/Logs_in_as_deploy/Access_via_authorized_key[www-data]/ensure: created
debug: Finishing transaction -611364608
debug: Storing state
debug: Stored state in 0.01 seconds
notice: Finished catalog run in 2221.41 seconds

Но в файл authorized_keys ничего не записано.Я думаю, мне либо нужно

  • добавить встроенный ресурс ssh_authorized_key в каталог узлов каким-либо образом
  • вызвать его как-то сбрасывать

Чтоя делаю не так?

1 Ответ

0 голосов
/ 07 апреля 2014

Я прокомментировал вашу суть.

Я считаю, что этот код пользовательского типа слишком оптимистичен в отношении использования нативного типа ssh_authorized_key. Жесткое кодирование ресурсов в код типа и игнорирование содержимого каталога является оскорбительным.

Было бы разумно использовать это вместо манифеста

$keys = { 'rimuhosting' => { 'id' => ... }, ... }

define my_authorized_key($ensure = present) {
  $data = $keys[$title]
  $key_name = $data['email'] + "-" + $data['public_key_version'] + "-" + $data['user']
  ssh_authorized_key {
    "$key_name":
      ensure => $ensure,
      type => 'ssh-rsa',
      ...
  }
}

А поскольку цель "все или ничего", кажется, является целью

class authorized_keys($ensure = present) {
  $names = keys($keys)   # <- function from puppetlabs-stdlib module
  my_authorized_key { $names: ensure => $ensure }
}

Параметризованные классы могут быть неудобными для использования, если вы хотите пойти по этому пути, я настоятельно рекомендую объединить его с Hiera .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...