def get_ovs_controller(node): # find ovs controller and manager ovs_controller, _ = node.execute('ovs-vsctl get-controller ' 'br-int', as_root=True) ovs_controller = ovs_controller.rstrip() if ovs_controller == '': LOG.warning("OVS controller for node {} is empty!".format( node.address)) else: return ovs_controller
def run(self, sys_args, config): pod_config = sys_args.pod_config odl_artifact = sys_args.odl_artifact node_config = utils_yaml.read_dict_from_yaml(pod_config) # TODO Add validation of incoming node config # self.check_node_config() # copy ODL to all nodes where it need to be copied self.nodes = NodeManager(node_config['servers']).get_nodes() for node in self.nodes: node.execute('ovs-vsctl del-controller br-int', as_root=True) for node in self.nodes: # Check if ODL runs on this node rv, _ = node.execute('ps aux |grep -v grep |grep karaf', as_root=True, check_exit_code=[0, 1]) if 'java' in rv: self.odl_node = node LOG.info("ODL node found: {}".format(self.odl_node.name)) node.execute('systemctl stop opendaylight', as_root=True) self.disconnect_ovs(node) # Upgrade ODL self.reinstall_odl(self.odl_node, odl_artifact) # Wait for ODL to come back up full_netvirt_url = "http://{}:8081/{}".format( self.odl_node.config['address'], self.netvirt_url) counter = 1 while counter <= 10: try: self.odl_node.execute("curl --fail -u admin:admin {}".format( full_netvirt_url)) LOG.info("New OpenDaylight NetVirt is Up") break except processutils.ProcessExecutionError: LOG.warning("NetVirt not up. Attempt: {}".format(counter)) if counter >= 10: LOG.warning("NetVirt not detected as up after 10 " "attempts...deployment may be unstable!") counter += 1 time.sleep(10) # Reconnect OVS instances LOG.info("Reconnecting OVS instances") for node in self.nodes: self.connect_ovs(node) # Sleep for a few seconds to allow TCP connections to come up time.sleep(5) # Validate OVS instances LOG.info("Validating OVS configuration") for node in self.nodes: self.validate_ovs(node) LOG.info("OpenDaylight Upgrade Successful!")
def gen_node_info(self): overcloud_ip_list = TripleoHelper.find_overcloud_ips() for node_ip in overcloud_ip_list: LOG.info('Introspecting node %s' % node_ip) node = Node('intro-%s' % node_ip, address=node_ip, user=self.overcloud_user) node_mac = None virsh_domain = None server_name, _ = node.execute('hostname') server_name = server_name.rstrip() if 'overcloud-controller' in server_name: node_type = 'controller' elif 'overcloud-novacompute' in server_name: node_type = 'compute' else: raise TripleOInspectorException('Unknown type ' '(controller/compute) %s ' % server_name) try: processutils.execute('ping -c 1 %s' % node_ip) res, _ = processutils.execute('/usr/sbin/arp -a ' '%s' % node_ip) node_mac = \ re.search('([0-9a-z]+:){5}[0-9a-z]+', res).group(0) virsh_domain = \ TripleoHelper.get_virtual_node_name_from_mac(node_mac) except AttributeError: LOG.warning("Unable to find MAC address for node {" "}".format(node_ip)) # find ovs controller and manager ovs_controller = self.get_ovs_controller(node) out, _ = node.execute('ovs-vsctl get-manager', as_root=True) ovs_managers = out.rstrip().split("\n") if all(ovs_manager == '' for ovs_manager in ovs_managers): LOG.warning( "OVS managers for node {} is empty!".format(node_ip)) self.node_info['servers'][server_name] = { 'address': node_ip, 'user': self.overcloud_user, 'type': node_type, 'orig-ctl-mac': node_mac, 'vNode-name': virsh_domain, 'ovs-controller': ovs_controller, 'ovs-managers': ovs_managers }
def run(self, sys_args, config): pod_config = sys_args.pod_config odl_artifact = sys_args.odl_artifact node_config = utils_yaml.read_dict_from_yaml(pod_config) # TODO Add validation of incoming node config # self.check_node_config() # copy ODL to all nodes where it need to be copied self.nodes = NodeManager(node_config['servers']).get_nodes() for node in self.nodes: node.execute('ovs-vsctl del-controller br-int', as_root=True) first_controller = None for node in self.nodes: if not first_controller: if 'controller' in node.execute('echo $HOSTNAME')[0]: first_controller = node # Check if ODL runs on this node jrv, _ = node.execute('ps aux |grep -v grep |grep karaf', as_root=True, check_exit_code=[0, 1]) rv, (_, rc) = node.execute('docker ps | grep opendaylight_api', as_root=True, check_exit_code=[0, 1]) if rc == 0: LOG.info("ODL is running as docker container") node.execute('docker stop opendaylight_api', as_root=True) self.odl_node = node elif 'java' in jrv: LOG.info("ODL is running as systemd service") self.odl_node = node node.execute('systemctl stop opendaylight', as_root=True) if self.odl_node is not None: LOG.info("ODL node found: {}".format(self.odl_node.name)) # rc 5 means the service is not there. # rc 4 means the service cannot be found node.execute('systemctl stop bgpd', as_root=True, check_exit_code=[0, 4, 5]) node.execute('systemctl stop zrpcd', as_root=True, check_exit_code=[0, 4, 5]) self.disconnect_ovs(node) # Upgrade ODL if not self.odl_node: self.odl_node = first_controller self.reinstall_odl(self.odl_node, odl_artifact) # Wait for ODL to come back up full_netvirt_url = "http://{}:8081/diagstatus".format( self.odl_node.config['address']) counter = 1 while counter <= 10: try: self.odl_node.execute("curl --fail {}".format( full_netvirt_url)) LOG.info("New OpenDaylight NetVirt is Up") break except processutils.ProcessExecutionError: LOG.warning("NetVirt not up. Attempt: {}".format(counter)) if counter >= 10: LOG.warning("NetVirt not detected as up after 10 " "attempts...deployment may be unstable!") counter += 1 time.sleep(15) # Reconnect OVS instances LOG.info("Reconnecting OVS instances") for node in self.nodes: self.connect_ovs(node) # Sleep for a few seconds to allow TCP connections to come up time.sleep(5) # Validate OVS instances LOG.info("Validating OVS configuration") for node in self.nodes: self.validate_ovs(node) LOG.info("OpenDaylight Upgrade Successful!")