| 
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 | # File 'manifests/compute/rbd.pp', line 53
class nova::compute::rbd (
  $libvirt_rbd_user,
  $libvirt_rbd_secret_uuid      = false,
  $libvirt_rbd_secret_key       = undef,
  $libvirt_images_rbd_pool      = 'rbd',
  $libvirt_images_rbd_ceph_conf = '/etc/ceph/ceph.conf',
  $rbd_keyring                  = 'client.nova',
) {
  include nova::params
  nova_config {
    'libvirt/images_type':          value => 'rbd';
    'libvirt/images_rbd_pool':      value => $libvirt_images_rbd_pool;
    'libvirt/images_rbd_ceph_conf': value => $libvirt_images_rbd_ceph_conf;
    'libvirt/rbd_user':             value => $libvirt_rbd_user;
  }
  if $libvirt_rbd_secret_uuid {
    nova_config {
      'libvirt/rbd_secret_uuid': value => $libvirt_rbd_secret_uuid;
    }
    file { '/etc/nova/secret.xml':
      content => template('nova/secret.xml-compute.erb')
    }
    exec { 'get-or-set virsh secret':
      command => '/usr/bin/virsh secret-define --file /etc/nova/secret.xml | /usr/bin/awk \'{print $2}\' | sed \'/^$/d\' > /etc/nova/virsh.secret',
      creates => '/etc/nova/virsh.secret',
      require => File['/etc/nova/secret.xml']
    }
    if $libvirt_rbd_secret_key {
      $libvirt_key = $libvirt_rbd_secret_key
    } else {
      $libvirt_key = "$(ceph auth get-key ${rbd_keyring})"
    }
    exec { 'set-secret-value virsh':
      command => "/usr/bin/virsh secret-set-value --secret ${libvirt_rbd_secret_uuid} --base64 ${libvirt_key}",
      unless  => "/usr/bin/virsh secret-get-value ${libvirt_rbd_secret_uuid}",
      require => Exec['get-or-set virsh secret']
    }
  }
} |