diff --git a/deployment/puppet/osnailyfacter/modular/ceilometer/tasks.yaml b/deployment/puppet/osnailyfacter/modular/ceilometer/tasks.yaml index 2d62e8e1c9..5fd7ea6658 100644 --- a/deployment/puppet/osnailyfacter/modular/ceilometer/tasks.yaml +++ b/deployment/puppet/osnailyfacter/modular/ceilometer/tasks.yaml @@ -17,7 +17,7 @@ - id: ceilometer-compute type: puppet - groups: [compute] + groups: [compute, compute-vmware] required_for: [deploy_end] requires: [ceilometer-controller, top-role-compute] cross-depends: diff --git a/deployment/puppet/osnailyfacter/modular/vmware/compute-vmware.pp b/deployment/puppet/osnailyfacter/modular/vmware/compute-vmware.pp index dd8dfa69bf..cf9c663a77 100644 --- a/deployment/puppet/osnailyfacter/modular/vmware/compute-vmware.pp +++ b/deployment/puppet/osnailyfacter/modular/vmware/compute-vmware.pp @@ -1,7 +1,6 @@ notice('MODULAR: vmware/compute-vmware.pp') $debug = hiera('debug', true) -$ceilometer_hash = hiera('ceilometer',{}) $vcenter_hash = hiera('vcenter', {}) $computes_hash = parse_vcenter_settings($vcenter_hash['computes']) @@ -9,8 +8,43 @@ $computes_hash = parse_vcenter_settings($vcenter_hash['computes']) $uid = hiera('uid') $node_name = "node-$uid" $defaults = { - current_node => $node_name, - vlan_interface => $vcenter_hash['esxi_vlan_interface'] - } + current_node => $node_name, + vlan_interface => $vcenter_hash['esxi_vlan_interface'] +} create_resources(vmware::compute_vmware, $computes_hash, $defaults) + + +$ceilometer_hash = hiera('ceilometer', {}) +$ceilometer_enabled = $ceilometer_hash['enabled'] + +if $ceilometer_enabled { + $computes = $vcenter_hash['computes'] + $compute = $computes[0] + + $password = $ceilometer_hash['user_password'] + $tenant = pick($ceilometer_hash['tenant'], 'services') + + $service_endpoint = hiera('service_endpoint') + $management_vip = hiera('management_vip') + $ssl_hash = hiera_hash('use_ssl', {}) + $auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'protocol', 'http') + $auth_host = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'hostname', [hiera('keystone_endpoint', ''), $service_endpoint, $management_vip]) + + $auth_port = '5000' + $identity_uri = "${auth_protocol}://${auth_host}:${auth_port}" + + class { 'vmware::ceilometer::compute_vmware': + debug => $debug, + availability_zone_name => $compute['availability_zone_name'], + vc_cluster => $compute['vc_cluster'], + vc_host => $compute['vc_host'], + vc_user => $compute['vc_user'], + vc_password => $compute['vc_password'], + service_name => $compute['service_name'], + identity_uri => $identity_uri, + auth_user => 'ceilometer', + auth_password => $password, + tenant => $tenant, + } +} diff --git a/deployment/puppet/osnailyfacter/modular/vmware/tasks.yaml b/deployment/puppet/osnailyfacter/modular/vmware/tasks.yaml index b7f6b28d7f..7034dac8a2 100644 --- a/deployment/puppet/osnailyfacter/modular/vmware/tasks.yaml +++ b/deployment/puppet/osnailyfacter/modular/vmware/tasks.yaml @@ -28,7 +28,7 @@ type: puppet groups: [compute-vmware] required_for: [deploy_end] - requires: [top-role-compute] + requires: [top-role-compute, ceilometer-compute, ceilometer-keystone] condition: "settings:common.use_vcenter.value == true" parameters: puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/vmware/compute-vmware.pp diff --git a/deployment/puppet/vmware/manifests/ceilometer.pp b/deployment/puppet/vmware/manifests/ceilometer.pp index 4cc70dd08e..b91d6b3995 100644 --- a/deployment/puppet/vmware/manifests/ceilometer.pp +++ b/deployment/puppet/vmware/manifests/ceilometer.pp @@ -11,6 +11,7 @@ class vmware::ceilometer ( $debug = false, ) { + # $default_log_levels gets used in template file. Do not remove. if $debug { # Enable debug for rabbit and vmware only $default_log_levels = 'amqp=DEBUG,amqplib=DEBUG,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,oslo.vmware=DEBUG' @@ -23,8 +24,8 @@ class vmware::ceilometer ( include ceilometer::params package { 'ceilometer-agent-compute': - name => $ceilometer::params::agent_compute_package_name, - ensure => present + ensure => present, + name => $::ceilometer::params::agent_compute_package_name, } create_resources(vmware::ceilometer::ha, parse_vcenter_settings($vcenter_settings)) diff --git a/deployment/puppet/vmware/manifests/ceilometer/compute_vmware.pp b/deployment/puppet/vmware/manifests/ceilometer/compute_vmware.pp new file mode 100644 index 0000000000..7041f9d536 --- /dev/null +++ b/deployment/puppet/vmware/manifests/ceilometer/compute_vmware.pp @@ -0,0 +1,81 @@ +# == Class: vmware::ceilometer::compute_vmware + +# Class configures ceilometer compute agent on compute-vmware node. +# +# It does the following: +# - configure keystone auth parameters +# - reload ceilometer compute agent service, package is already +# installed by ceilometer-compute deployment task +# +# === Parameters +# [*availability_zone_name*] +# (required) Availability zone name that will be used to form host parameter +# [*vc_cluster*] +# (required) vCenter cluster name that is going to be monitored +# [*vc_host*] +# (required) vCenter cluster name that is going to be monitored +# [*vc_user*] +# (required) vCenter user name to use +# [*vc_password*] +# (required) Password for above vCenter user +# [*service_name*] +# (required) Parameter to form 'host' parameter +# [*target_node*] +# (optional) Parameter that specifies on which node service will be placed +# [*datastore_regex*] +# (optional) Regex which match datastore that will be used for openstack vms +# [*debug*] +# (optional) Flag that turn debug logging +# [*identity_uri*] +# (optional) URL to access Keystone service +# [*auth_user*] +# (optional) Keystone user +# [*auth_password*] +# (optional) Keystone password +# [*tenant*] +# (optional) Admin tenant name +# +class vmware::ceilometer::compute_vmware( + $availability_zone_name, + $vc_cluster, + $vc_host, + $vc_user, + $vc_password, + $service_name, + $target_node = undef, + $datastore_regex = undef, + $debug = undef, + $identity_uri = undef, + $auth_user = undef, + $auth_password = undef, + $tenant = undef, +) { + if $debug { + # Enable debug for rabbit and vmware only + $default_log_levels = 'amqp=DEBUG,amqplib=DEBUG,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,oslo.vmware=DEBUG' + } else { + $default_log_levels = 'amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,oslo.vmware=WARN' + } + + ceilometer_config { + 'DEFAULT/default_log_levels': value => $default_log_levels; + 'DEFAULT/hypervisor_inspector': value => 'vsphere'; + 'DEFAULT/host': value => "${availability_zone_name}-${service_name}"; + 'vmware/host_ip': value => $vc_host; + 'vmware/host_username': value => $vc_user; + 'vmware/host_password': value => $vc_password; + 'keystone_authtoken/admin_user': value => $auth_user; + 'keystone_authtoken/admin_password': value => $auth_password; + 'keystone_authtoken/admin_tenant_name': value => $tenant; + 'keystone_authtoken/identity_uri': value => $identity_uri; + } + + include ceilometer::params + + service { 'ceilometer-agent-compute': + ensure => running, + name => $::ceilometer::params::agent_compute_service_name, + } + + Ceilometer_config<| |> ~> Service['ceilometer-agent-compute'] +} diff --git a/deployment/puppet/vmware/manifests/ceilometer/ha.pp b/deployment/puppet/vmware/manifests/ceilometer/ha.pp index 6bf2e6b875..fcd4bac1f5 100644 --- a/deployment/puppet/vmware/manifests/ceilometer/ha.pp +++ b/deployment/puppet/vmware/manifests/ceilometer/ha.pp @@ -11,60 +11,62 @@ define vmware::ceilometer::ha ( $ceilometer_config = '/etc/ceilometer/ceilometer.conf', $ceilometer_conf_dir = '/etc/ceilometer/ceilometer-compute.d', ) { - $ceilometer_compute_conf = "${ceilometer_conf_dir}/vmware-${availability_zone_name}_${service_name}.conf" + if ($target_node == 'controllers') { + $ceilometer_compute_conf = "${ceilometer_conf_dir}/vmware-${availability_zone_name}_${service_name}.conf" - if ! defined(File[$ceilometer_conf_dir]) { - file { $ceilometer_conf_dir: - ensure => directory, - owner => 'ceilometer', - group => 'ceilometer', - mode => '0750' + if ! defined(File[$ceilometer_conf_dir]) { + file { $ceilometer_conf_dir: + ensure => directory, + owner => 'ceilometer', + group => 'ceilometer', + mode => '0750' + } } - } - if ! defined(File[$ceilometer_compute_conf]) { - file { $ceilometer_compute_conf: - ensure => present, - content => template('vmware/ceilometer-compute.conf.erb'), - mode => '0600', - owner => 'ceilometer', - group => 'ceilometer', + if ! defined(File[$ceilometer_compute_conf]) { + file { $ceilometer_compute_conf: + ensure => present, + content => template('vmware/ceilometer-compute.conf.erb'), + mode => '0600', + owner => 'ceilometer', + group => 'ceilometer', + } } - } - cs_resource { "p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}": - ensure => present, - primitive_class => 'ocf', - provided_by => 'fuel', - primitive_type => 'ceilometer-agent-compute', - metadata => { - 'target-role' => 'stopped', - 'resource-stickiness' => '1' - }, - parameters => { - amqp_server_port => $amqp_port, - config => $ceilometer_config, - pid => "/var/run/ceilometer/ceilometer-agent-compute-${availability_zone_name}_${service_name}.pid", - user => "ceilometer", - additional_parameters => "--config-file=${ceilometer_compute_conf}", - }, - operations => { - monitor => { timeout => '20', interval => '30' }, - start => { timeout => '360' }, - stop => { timeout => '360' } + cs_resource { "p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}": + ensure => present, + primitive_class => 'ocf', + provided_by => 'fuel', + primitive_type => 'ceilometer-agent-compute', + metadata => { + 'target-role' => 'stopped', + 'resource-stickiness' => '1' + }, + parameters => { + amqp_server_port => $amqp_port, + config => $ceilometer_config, + pid => "/var/run/ceilometer/ceilometer-agent-compute-${availability_zone_name}_${service_name}.pid", + user => "ceilometer", + additional_parameters => "--config-file=${ceilometer_compute_conf}", + }, + operations => { + monitor => { timeout => '20', interval => '30' }, + start => { timeout => '360' }, + stop => { timeout => '360' } + } } - } - service { "p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}": - ensure => running, - enable => true, - hasstatus => true, - hasrestart => true, - provider => 'pacemaker', - } + service { "p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}": + ensure => running, + enable => true, + hasstatus => true, + hasrestart => true, + provider => 'pacemaker', + } - File["${ceilometer_conf_dir}"]-> - File["${ceilometer_compute_conf}"]-> - Cs_resource["p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}"]-> - Service["p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}"] + File["${ceilometer_conf_dir}"]-> + File["${ceilometer_compute_conf}"]-> + Cs_resource["p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}"]-> + Service["p_ceilometer_agent_compute_vmware_${availability_zone_name}_${service_name}"] + } } diff --git a/tests/noop/astute.yaml/novanet_flat.compute-vmware-role.yaml b/tests/noop/astute.yaml/novanet_flat.compute-vmware-role.yaml index 69181a3a30..0302b15799 100644 --- a/tests/noop/astute.yaml/novanet_flat.compute-vmware-role.yaml +++ b/tests/noop/astute.yaml/novanet_flat.compute-vmware-role.yaml @@ -118,6 +118,7 @@ libvirt_type: qemu puppet: modules: rsync://10.109.5.2:/puppet/2015.1.0-8.0/modules/ manifests: rsync://10.109.5.2:/puppet/2015.1.0-8.0/manifests/ +host_uuid: '00000000-0000-0000-0000-000000000000' mysql: root_password: 9aXGuMEH wsrep_password: O9DMNRw7 @@ -219,10 +220,14 @@ network_metadata: - compute-vmware name: node-2 vips: - public_vrouter_vip: 10.109.6.3 - management_vip: 10.109.7.2 - public_vip: 10.109.6.2 - management_vrouter_vip: 10.109.7.3 + vrouter_pub: + ipaddr: 10.109.6.3 + management: + ipaddr: 10.109.7.2 + public: + ipaddr: 10.109.6.2 + vrouter: + ipaddr: 10.109.7.3 openstack_version: 2015.1.0-8.0 public_vrouter_vip: 10.109.6.3 kernel_params: diff --git a/tests/noop/astute.yaml/novanet_vlan.compute-vmware-role.yaml b/tests/noop/astute.yaml/novanet_vlan.compute-vmware-role.yaml index 1f84f40bad..b884915387 100644 --- a/tests/noop/astute.yaml/novanet_vlan.compute-vmware-role.yaml +++ b/tests/noop/astute.yaml/novanet_vlan.compute-vmware-role.yaml @@ -121,6 +121,7 @@ storage: metadata: weight: 60 label: Storage +host_uuid: '00000000-0000-0000-0000-000000000000' resume_guests_state_on_host_boot: true public_vip: 10.109.6.2 syslog: diff --git a/tests/noop/spec/hosts/vmware/compute-vmware_spec.rb b/tests/noop/spec/hosts/vmware/compute-vmware_spec.rb index f2d4e005d5..b5f8a02b79 100644 --- a/tests/noop/spec/hosts/vmware/compute-vmware_spec.rb +++ b/tests/noop/spec/hosts/vmware/compute-vmware_spec.rb @@ -21,6 +21,16 @@ describe manifest do end end + ceilometer_enabled = Noop.hiera_structure('ceilometer/enabled') + + if ceilometer_enabled == 'true' + it 'should have /etc/ceilometer/ceilometer.conf' do + should contain_file('/etc/ceilometer/ceilometer.conf').with_content( + %r{\n\s*hypervisor_inspector=vsphere\n} + ) + end + end + end # end of shared_examples test_ubuntu_and_centos manifest diff --git a/tests/noop/spec/lib/tasks.rb b/tests/noop/spec/lib/tasks.rb index a2700bbf9b..f62388a021 100644 --- a/tests/noop/spec/lib/tasks.rb +++ b/tests/noop/spec/lib/tasks.rb @@ -56,9 +56,21 @@ class Noop next unless file.end_with? 'tasks.yaml' task = YAML.load_file(file) @tasks += task if task.is_a? Array - end - @tasks end + @tasks.each do |group| + next unless group['type'] == 'group' + group_tasks = group.fetch 'tasks', [] + group_tasks.each do |group_task| + @tasks.each do |task| + next unless task['id'] == group_task + next unless task['groups'].is_a? Array + next if task['groups'].include? group + task['groups'] << group['id'] + end + end + end + @tasks + end # this functions returns the name of the currently running spec # @return [String]