diff options
Diffstat (limited to 'ceilometer/hardware/discovery.py')
-rw-r--r-- | ceilometer/hardware/discovery.py | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/ceilometer/hardware/discovery.py b/ceilometer/hardware/discovery.py deleted file mode 100644 index b3c38f07..00000000 --- a/ceilometer/hardware/discovery.py +++ /dev/null @@ -1,144 +0,0 @@ -# -*- encoding: utf-8 -*- -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import warnings - -from oslo_config import cfg -from oslo_log import log -from oslo_utils import timeutils - -from ceilometer import nova_client -from ceilometer.polling import plugin_base - -LOG = log.getLogger(__name__) - -OPTS = [ - cfg.StrOpt('url_scheme', - default='snmp://', - deprecated_for_removal=True, - help='URL scheme to use for hardware nodes.'), - cfg.StrOpt('readonly_user_name', - default='ro_snmp_user', - deprecated_for_removal=True, - help='SNMPd user name of all nodes running in the cloud.'), - cfg.StrOpt('readonly_user_password', - default='password', - deprecated_for_removal=True, - help='SNMPd v3 authentication password of all the nodes ' - 'running in the cloud.', - secret=True), - cfg.StrOpt('readonly_user_auth_proto', - choices=['md5', 'sha'], - deprecated_for_removal=True, - help='SNMPd v3 authentication algorithm of all the nodes ' - 'running in the cloud'), - cfg.StrOpt('readonly_user_priv_proto', - choices=['des', 'aes128', '3des', 'aes192', 'aes256'], - deprecated_for_removal=True, - help='SNMPd v3 encryption algorithm of all the nodes ' - 'running in the cloud'), - cfg.StrOpt('readonly_user_priv_password', - deprecated_for_removal=True, - help='SNMPd v3 encryption password of all the nodes ' - 'running in the cloud.', - secret=True), - cfg.StrOpt('tripleo_network_name', - default='ctlplane', - deprecated_for_removal=True, - help='Name of the control plane Tripleo network') -] - - -class NodesDiscoveryTripleO(plugin_base.DiscoveryBase): - def __init__(self, conf): - super(NodesDiscoveryTripleO, self).__init__(conf) - self.nova_cli = nova_client.Client(conf) - self.last_run = None - self.instances = {} - - warnings.warn('GenericHardwareDeclarativePollster has been deprecated ' - 'and will be removed in a future release.', - category=DeprecationWarning, stacklevel=3) - - def _make_resource_url(self, ip): - hwconf = self.conf.hardware - url = hwconf.url_scheme - username = hwconf.readonly_user_name - password = hwconf.readonly_user_password - if username: - url += username - if password: - url += ':' + password - if username or password: - url += '@' - url += ip - - opts = ['auth_proto', 'priv_proto', 'priv_password'] - query = "&".join(opt + "=" + hwconf['readonly_user_%s' % opt] - for opt in opts - if hwconf['readonly_user_%s' % opt]) - if query: - url += '?' + query - - return url - - def discover(self, manager, param=None): - """Discover resources to monitor. - - instance_get_all will return all instances if last_run is None, - and will return only the instances changed since the last_run time. - """ - try: - instances = self.nova_cli.instance_get_all(self.last_run) - except Exception: - # NOTE(zqfan): instance_get_all is wrapped and will log exception - # when there is any error. It is no need to raise it again and - # print one more time. - return [] - - for instance in instances: - if getattr(instance, 'OS-EXT-STS:vm_state', None) in ['deleted', - 'error']: - self.instances.pop(instance.id, None) - else: - self.instances[instance.id] = instance - self.last_run = timeutils.utcnow(True).isoformat() - - resources = [] - for instance in self.instances.values(): - addresses = instance.addresses.get( - self.conf.hardware.tripleo_network_name) - if addresses is None: - # NOTE(sileht): This is not a tripleo undercloud instance, this - # is a cheap detection if ironic node deployed by tripleo, but - # nova don't expose anything more useful and we must not log a - # ERROR when the instance is not a tripleo undercloud one. - continue - try: - ip_address = addresses[0].get('addr') - final_address = self._make_resource_url(ip_address) - resource = { - 'resource_id': instance.id, - 'resource_url': final_address, - 'mac_addr': addresses[0].get('OS-EXT-IPS-MAC:mac_addr'), - 'image_id': instance.image['id'], - 'flavor_id': instance.flavor['id'] - } - - resources.append(resource) - except KeyError: - LOG.error("Couldn't obtain IP address of " - "instance %s" % instance.id) - - return resources |