2016-08-08 39 views
0

Ich verwende https://github.com/openstack/puppet-keystone, um einen OpenStack Management/Controller-Knoten einzurichten. Ich muss den "Blick" -Benutzer zu Keystone hinzufügen. Ich möchte so viel wie möglich in meinen Hiera-Daten tun, damit mein Manifest einfach ist.definieren Keystone_user von Openstack/Puppet-Keystone über Hiera?

Hier ist mein Manifest:

class kilo2_keystone { 
    include controller_ceph 
    include keystone 
    include keystone::config 
    include keystone::user 
# keystone_user { 'glance': 
#  ensure => present, 
# } 

} 

Der Kommentar gesetzt Abschnitt funktioniert, aber ich möchte in der Lage sein include keystone::user zu tun und die Parameter in meine hiera Daten wie so liefern:

keystone::user: 
    "%{hiera('glance_admin_user')}": 
     ensure: present 

Aber wenn ich puppet agent -t auf meinem Knoten laufen lasse, erhalte ich diesen Fehler:

+1

Es scheint keine Benutzerklasse in diesem Modul zu sein, also was versuchst du mit 'include keystone :: user' zu tun? Wenn Sie eine Ressource in dieser Art definieren, dann möchten Sie etwas wie 'create_resources' in der Suche verwenden. Verwenden Sie Hiera <= 3 oder den Puppet Data Provider/Hiera4? –

Antwort

1

Der auskommentierte Code deklariert eine Ressource vom Typ keystone_user, keine Klasse. Vermutlich wird sein Typ keystone_user durch das Puppet-Keystone-Modul bereitgestellt. Die include() Familie von Funktionen sind zum Deklarieren von Klassen, nicht Ressourcen, so dass sie auf keystone_user nicht anwendbar sind.

Es gibt mehrere Möglichkeiten, wie Sie vorgehen könnten. Wenn Sie nicht erwarten, etwas komplizierter zu haben als einen oder mehrere keystone_user s zu deklarieren, dann empfehle ich, Ihrer Klasse einen Parameter für die Benutzernamen zu geben, denen Sie über Hiera einen Wert zuweisen können:

class kilo2_keystone($usernames = []) { 
    include controller_ceph 
    include keystone 
    include keystone::config 

    keystone_user { $usernames: 
    ensure => present, 
    } 
} 

Wenn Sie andererseits in der Lage sein möchten, mehrere Benutzer mit jeweils eigenen Attributen zu deklarieren, ist die create_resources()-Funktion wahrscheinlich der Pfad des geringsten Widerstands. Sie möchten dennoch Ihre Klasse so parametrisieren, dass sie die Daten von Hiera über eine automatisierte Datenbindung erhält, aber nun möchten Sie, dass die Daten anders strukturiert sind, wie in der Dokumentation create_resources() beschrieben: als Hash-Mapping Ressourcentitel (in Ihrem Fall Benutzernamen)) zu inneren Hashes von Ressourcenparametern zu entsprechenden Werten.

Zum Beispiel könnte Ihre Klasse wie folgt aussehen:

class kilo2_keystone($userdata = {}) { 
    include controller_ceph 
    include keystone 
    include keystone::config 

    create_resources('keystone_user', $userdata) 
} 

Die entsprechenden Daten für diese Klasse könnte wie folgt aussehen:

kilo2_keystone::userdata: 
    glance: 
    ensure: present 
    enabled: true 
    another_user: 
    ensure: absent 

Beachten Sie auch, dass Sie Ihre kilo2_keystone Klasse platzieren in der Top-Umfang. Sie sollten es wirklich in ein Modul einfügen und es dem Namensraum dieses Moduls zuweisen. Letzteres würde wie folgt aussehen:

+0

Auch können Sie nicht ein Hiera-Lookup innerhalb der Hieradata, die etwas anderes in dem Beispiel in der Frage ist. –

+1

@MattSchuchard, du * kannst * einen Hiera Lookup in Hiera Daten machen; siehe https://docs.puppet.com/hiera/3.2/variables.html#using-lookup-functions. Der Link ist für die Hiera 3.2 Dokumentation gedacht, aber das Feature ist bis nach Hiera 1 dokumentiert. –

+0

Das scheint wirklich etwas zu sein, was nicht möglich sein sollte, was wohl der Grund sein muss, warum ich es bis jetzt nicht benutzt habe. Interessant. –