mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			146 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python
 | |
| # Licensed to the Apache Software Foundation (ASF) under one
 | |
| # or more contributor license agreements.  See the NOTICE file
 | |
| # distributed with this work for additional information
 | |
| # regarding copyright ownership.  The ASF licenses this file
 | |
| # to you 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 cloudstack_pluginlib as lib
 | |
| import logging
 | |
| import os
 | |
| import sys
 | |
| import subprocess
 | |
| import time
 | |
| import XenAPIPlugin
 | |
| 
 | |
| sys.path.append("/opt/xensource/sm/")
 | |
| import util
 | |
| 
 | |
| from time import localtime as _localtime, asctime as _asctime
 | |
| 
 | |
| xePath = "/opt/xensource/bin/xe"
 | |
| lib.setup_logging("/var/log/ovs-pvlan.log")
 | |
| dhcpSetupPath = "/opt/xensource/bin/ovs-pvlan-dhcp-host.sh"
 | |
| vmSetupPath = "/opt/xensource/bin/ovs-pvlan-vm.sh"
 | |
| getDhcpIfacePath = "/opt/xensource/bin/ovs-get-dhcp-iface.sh"
 | |
| pvlanCleanupPath = "/opt/xensource/bin/ovs-pvlan-cleanup.sh"
 | |
| getBridgePath = "/opt/xensource/bin/ovs-get-bridge.sh"
 | |
| 
 | |
| def echo(fn):
 | |
|     def wrapped(*v, **k):
 | |
|         name = fn.__name__
 | |
|         util.SMlog("#### VMOPS enter  %s ####" % name)
 | |
|         res = fn(*v, **k)
 | |
|         util.SMlog("#### VMOPS exit  %s ####" % name)
 | |
|         return res
 | |
|     return wrapped
 | |
| 
 | |
| @echo
 | |
| def setup_pvlan_dhcp(session, args):
 | |
|     op = args.pop("op")
 | |
|     nw_label = args.pop("nw-label")
 | |
|     primary = args.pop("primary-pvlan")
 | |
|     isolated = args.pop("isolated-pvlan")
 | |
|     dhcp_name = args.pop("dhcp-name")
 | |
|     dhcp_ip = args.pop("dhcp-ip")
 | |
|     dhcp_mac = args.pop("dhcp-mac")
 | |
| 
 | |
|     res = lib.check_switch()
 | |
|     if res != "SUCCESS":
 | |
|         return "FAILURE:%s" % res
 | |
| 
 | |
|     logging.debug("Network is:%s" % (nw_label))
 | |
|     bridge = lib.do_cmd([getBridgePath, nw_label])
 | |
|     logging.debug("Determine bridge/switch is :%s" % (bridge))
 | |
| 
 | |
|     if op == "add":
 | |
|         logging.debug("Try to get dhcp vm %s port on the switch:%s" % (dhcp_name, bridge))
 | |
|         dhcp_iface = lib.do_cmd([getDhcpIfacePath, bridge, dhcp_name])
 | |
|         logging.debug("About to setup dhcp vm on the switch:%s" % bridge)
 | |
|         res = lib.do_cmd([dhcpSetupPath, "-A", "-b", bridge, "-p", primary,
 | |
|             "-i", isolated, "-n", dhcp_name, "-d", dhcp_ip, "-m", dhcp_mac,
 | |
|             "-I", dhcp_iface])
 | |
| 	if res:
 | |
| 	    result = "FAILURE:%s" % res
 | |
| 	    return result;
 | |
| 	logging.debug("Setup dhcp vm on switch program done")
 | |
|     elif op == "delete":
 | |
|         logging.debug("About to remove dhcp the switch:%s" % bridge)
 | |
|         res = lib.do_cmd([dhcpSetupPath, "-D", "-b", bridge, "-p", primary,
 | |
|             "-i", isolated, "-n", dhcp_name, "-d", dhcp_ip, "-m", dhcp_mac])
 | |
| 	if res:
 | |
| 	    result = "FAILURE:%s" % res
 | |
| 	    return result;
 | |
| 	logging.debug("Remove DHCP on switch program done")
 | |
|     
 | |
|     result = "true"
 | |
|     logging.debug("Setup_pvlan_dhcp completed with result:%s" % result)
 | |
|     return result
 | |
| 
 | |
| @echo
 | |
| def setup_pvlan_vm(session, args):
 | |
|     op = args.pop("op")
 | |
|     nw_label = args.pop("nw-label")
 | |
|     primary = args.pop("primary-pvlan")
 | |
|     isolated = args.pop("isolated-pvlan")
 | |
|     vm_mac = args.pop("vm-mac")
 | |
|     trunk_port = 1
 | |
| 
 | |
|     res = lib.check_switch()
 | |
|     if res != "SUCCESS":
 | |
|         return "FAILURE:%s" % res
 | |
| 
 | |
|     bridge = lib.do_cmd([getBridgePath, nw_label])
 | |
|     logging.debug("Determine bridge/switch is :%s" % (bridge))
 | |
| 
 | |
|     if op == "add":
 | |
|         logging.debug("About to setup vm on the switch:%s" % bridge)
 | |
|         res = lib.do_cmd([vmSetupPath, "-A", "-b", bridge, "-p", primary, "-i", isolated, "-v", vm_mac])
 | |
| 	if res:
 | |
| 	    result = "FAILURE:%s" % res
 | |
| 	    return result;
 | |
| 	logging.debug("Setup vm on switch program done")
 | |
|     elif op == "delete":
 | |
|         logging.debug("About to remove vm on the switch:%s" % bridge)
 | |
|         res = lib.do_cmd([vmSetupPath, "-D", "-b", bridge, "-p", primary, "-i", isolated, "-v", vm_mac])
 | |
| 	if res:
 | |
| 	    result = "FAILURE:%s" % res
 | |
| 	    return result;
 | |
| 	logging.debug("Remove vm on switch program done")
 | |
| 
 | |
|     result = "true"
 | |
|     logging.debug("Setup_pvlan_vm_alone completed with result:%s" % result)
 | |
|     return result
 | |
| 
 | |
| @echo
 | |
| def cleanup(session, args):
 | |
|     res = lib.check_switch()
 | |
|     if res != "SUCCESS":
 | |
|         return "FAILURE:%s" % res
 | |
| 
 | |
|     res = lib.do_cmd([pvlanCleanUpPath])
 | |
|     if res:
 | |
|         result = "FAILURE:%s" % res
 | |
|         return result;
 | |
| 
 | |
|     result = "true"
 | |
|     logging.debug("Setup_pvlan_vm_dhcp completed with result:%s" % result)
 | |
|     return result
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     XenAPIPlugin.dispatch({"setup-pvlan-dhcp": setup_pvlan_dhcp,
 | |
|                            "setup-pvlan-vm": setup_pvlan_vm,
 | |
|                            "cleanup":cleanup})
 |