summaryrefslogtreecommitdiffstats
path: root/nova/netconf.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/netconf.py')
-rw-r--r--nova/netconf.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/nova/netconf.py b/nova/netconf.py
new file mode 100644
index 000000000..531a9e200
--- /dev/null
+++ b/nova/netconf.py
@@ -0,0 +1,62 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2012 Red Hat, Inc.
+#
+# 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 socket
+
+from nova.openstack.common import cfg
+
+CONF = cfg.CONF
+
+
+def _get_my_ip():
+ """
+ Returns the actual ip of the local machine.
+
+ This code figures out what source address would be used if some traffic
+ were to be sent out to some well known address on the Internet. In this
+ case, a Google DNS server is used, but the specific address does not
+ matter much. No traffic is actually sent.
+ """
+ try:
+ csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ csock.connect(('8.8.8.8', 80))
+ (addr, port) = csock.getsockname()
+ csock.close()
+ return addr
+ except socket.error:
+ return "127.0.0.1"
+
+
+netconf_opts = [
+ cfg.StrOpt('my_ip',
+ default=_get_my_ip(),
+ help='ip address of this host'),
+ cfg.StrOpt('host',
+ default=socket.getfqdn(),
+ help='Name of this node. This can be an opaque identifier. '
+ 'It is not necessarily a hostname, FQDN, or IP address. '
+ 'However, the node name must be valid within '
+ 'an AMQP key, and if using ZeroMQ, a valid '
+ 'hostname, FQDN, or IP address'),
+ cfg.BoolOpt('use_ipv6',
+ default=False,
+ help='use ipv6'),
+]
+
+CONF.register_opts(netconf_opts)