本发明涉及云技术,尤其涉及一种基于openstack4j的子网禁用网关的配置方法。
背景技术:
在为云主机添加虚拟网卡的时候,存在为云主机添加两块网卡的应用场景,一块用于内部网络互相通信,另一块用于访问外部网络。此时如果两块网卡都有默认网关,就会导致路由混乱。而实际上内部互相通信是不需要网关的,所以需要通过禁用子网的网关来达到添加内网网卡时不要默认网关的目的。
云环境的底层用的是openstack,云平台使用的sdk是openstack4j。openstack4j是一java开发的工具包,提供了一套可以管理openstack的javaapi,底层是通过restful接口调用openstack官方提供的api实现。
在使用openstack4j提供的更新子网的接口来执行禁用网关的操作时,发现根据openstack官方api使用说明设置相关参数后,调用openstack4j提供的方法后并不能成功将网关禁用。在对openstack4j调用openstack的接口参数进行捕捉后发现,用于设置禁用网关的参数gateway_id=null并没有传入openstack后台服务,导致后台无法接收到禁用网关的需求。因此,需要对openstack4j提供的方法进行部分修改,才能将禁用网关的参数传给openstack的相关服务,实现禁用子网网关的功能。
技术实现要素:
本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种基于openstack4j的子网禁用网关的配置方法。
本发明解决其技术问题所采用的技术方案是:一种基于openstack4j的子网禁用网关的配置方法,包括以下步骤:
1)监控前台需要禁用子网网关的请求,在收到前台需要禁用子网网关的请求后,创建一个用于禁用子网网关的实体类nogatewaysubnet,实体类nogatewaysubnet继承openstack4j原有的子网实体类neutronsubnet;
2)在实体类nogatewaysubnet中增加一个控制禁用网关的实例变量gateway;
3)构建一个实体类nogatewaysubnet的对象,将对象中的控制禁用网关的实例变量gateway的值设置为null;对象中的其他全局变量按没有禁用网关需求时设置;
4)调用openstack4j提供的更新子网信息的方法,将步骤3)中构建的对象作为参数传入;
5)执行openstack4j提供的更新子网信息的方法,完成子网禁用网关。
本发明产生的有益效果是:本方法简单可靠,通过新增一个实体类解决openstack4j不支持更新子网时禁用网关的问题,同时不会对openstack4j的源代码做过多修改,在解决问题的同时不会引入其他不可预料的问题。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例的方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,一种基于openstack4j的子网禁用网关的配置方法,
本发明方法的过程是在收到前台需要禁用子网网关的请求时,重新构建更新子网时需要传入对象参数,确保openstack4j调用openstack更新子网的api执行禁用网关操作时需要的参数值(gateway_ip=null)能传入后台的openstack服务。具体步骤如下:
步骤1:创建一个专门用于禁用子网网关的实体类nogatewaysubnet(名称可自定义),继承openstack4j原有的子网实体类neutronsubnet,并在新创建的在子类中增加一个控制禁用网关的实例变量gateway(名称可自定义);
步骤2:在云平台的后台处理程序中获取到请求参数,根据请求参数判断,如果有禁用网关的需求就执行专门的处理方法,否则正常执行;
步骤3:需要禁用网关的情况下,构建一个nogatewaysubnet的对象,对象中的其他全局变量按没有禁用网关需求时一样设置,控制禁用网关的实例变量值gateway设置为null;
步骤4:调用openstack4j提供的更新子网信息的方法,将步骤3中构建的对象作为参数传入;
步骤5:执行更新方法并返回;
所述的neutronsubnet实体类为openstack4j已有的实体类,位于org.openstack4j.openstack.networking.domain包下;
所述的openstack更新子网的接口uri为/v2.0/subnets/{subnet_id},请求方式为put,请求参数为json格式,在代码中可通过获取org.openstack4j.api.networking.subnetservice这个对象后执行update方法来调用,只需传入neutronsubnet类型的对象作为参数即可
所述的实例变量gateway需要在变量声明的上方加上注解@jsonproperty("gateway_ip")和@jsoninclude,前一个注解表示实例变量gateway转换为json格式的请求参数时名称会变成gateway_ip,这才是openstackapi能够识别的的参数名称,后一个注解确保当gateway变量值为null时不会被忽略而不传给后台。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。