Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
openXG-WIC-Cnf
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
alex037yang
openXG-WIC-Cnf
Commits
23da4682
Commit
23da4682
authored
Jun 15, 2020
by
Elf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改后的代码
parent
3100dd01
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
98 additions
and
86 deletions
+98
-86
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/IndexController.java
...ava/top/ninwoo/edgecenter/controller/IndexController.java
+27
-5
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/TransferTopoController.java
.../ninwoo/edgecenter/controller/TransferTopoController.java
+32
-0
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/LogicTopoService.java
.../java/top/ninwoo/edgecenter/service/LogicTopoService.java
+2
-5
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/impl/LogicTopoServiceImpl.java
.../ninwoo/edgecenter/service/impl/LogicTopoServiceImpl.java
+37
-76
No files found.
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/IndexController.java
View file @
23da4682
...
...
@@ -152,7 +152,6 @@ public class IndexController {
// 创建网络
// 使用topo创建工具
topologyService
.
createTopo
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
());
logicTopoService
.
saveIPlist
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
().
getAppNames
());
return
resMap
;
}
...
...
@@ -317,16 +316,21 @@ public class IndexController {
}
//下发逻辑拓扑
@RequestMapping
(
value
=
"/sendLogicTopo"
,
method
=
RequestMethod
.
POST
)
public
void
sendLogicTopo
(
@RequestBody
ClusterConfig
clusterConfig
)
{
// 创建网络
public
String
sendLogicTopo
(
@RequestBody
ClusterConfig
clusterConfig
)
{
if
(
clusterConfig
==
null
){
return
"请传入正确的集群设置"
;
}
// 使用topo创建工具
logicTopoService
.
creatLogicTopo
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
());
String
res
=
logicTopoService
.
creatLogicTopo
(
clusterConfig
.
getId
(),
clusterConfig
.
getTopology
());
//System.out.println("ok");
//return "sucess"
;
return
res
;
}
//修改逻辑拓扑
@RequestMapping
(
value
=
"/adjustLogicTopo"
,
method
=
RequestMethod
.
POST
)
public
String
adjustLogicTopo
(
@RequestBody
ClusterConfig
clusterConfig
)
{
if
(
clusterConfig
==
null
){
return
"请传入正确的集群设置"
;
}
// 判断id
if
(
clusterConfig
.
getId
()
==
0
)
{
return
"没有设置clusterid"
;
...
...
@@ -335,4 +339,22 @@ public class IndexController {
//System.out.println("ok?");
return
res1
;
}
//
@GetMapping
(
"/getIPbyName"
)
public
String
getIPbyname
(
@RequestParam
(
name
=
"appname"
)
String
appname
,
@RequestParam
(
name
=
"clusterId"
)
long
clusterId
)
{
Set
<
String
>
cid
=
clusterService
.
getContainerIdsByClusterId
(
clusterId
,
appname
);
if
(
cid
==
null
){
System
.
out
.
println
(
"错误的clusterID"
);
return
"获取失败"
;
}
String
appID
=
((
String
)
cid
.
toArray
()[
0
]);
if
(
appID
==
null
){
System
.
out
.
println
(
"错误的appnmae"
);
return
"获取失败"
;
}
String
appIP
=
ipService
.
getContainerIp
(
appID
).
split
(
"/"
)[
0
];
return
appIP
;
}
}
\ No newline at end of file
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/
Docker
Controller.java
→
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/controller/
TransferTopo
Controller.java
View file @
23da4682
...
...
@@ -5,53 +5,28 @@ import org.springframework.web.bind.annotation.GetMapping;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
top.ninwoo.edgecenter.service.ClusterService
;
import
top.ninwoo.edgecenter.service.IpService
;
import
top.ninwoo.edgecenter.service.LogicTopoService
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentHashMap
;
@RestController
@RequestMapping
(
"/dockerData"
)
public
class
DockerController
{
@Autowired
private
IpService
ipService
;
@Autowired
ClusterService
clusterService
;
public
class
TransferTopoController
{
@Autowired
private
LogicTopoService
logicTopoService
;
//要将过去的删除掉
@GetMapping
(
"/getIPlist"
)
public
List
<
String
>
getIPlist
()
{
System
.
out
.
println
(
"已返回IPlist"
);
return
logicTopoService
.
getIPlist
();
public
List
<
String
>
getIPlist
(
@RequestParam
(
name
=
"clusterId"
)
long
clusterId
)
{
//
System.out.println("已返回IPlist");
return
logicTopoService
.
getIPlist
(
clusterId
);
}
//需下发逻辑拓扑后才能获得
,todo
//需下发逻辑拓扑后才能获得
@GetMapping
(
"/getTopo"
)
public
int
[][]
getTopo
()
{
System
.
out
.
println
(
"已返回topo"
);
return
logicTopoService
.
getTopo
(
11111
l
);
public
int
[][]
getTopo
(
@RequestParam
(
name
=
"clusterId"
)
long
clusterId
)
{
//
System.out.println("已返回topo");
return
logicTopoService
.
getTopo
(
clusterId
);
}
@GetMapping
(
"/getIPbyName"
)
public
String
getIPbyname
(
@RequestParam
(
name
=
"appname"
)
String
appname
)
{
//System.out.println("接受到消息了");
//System.out.println(appname);
//这里可能以后要加个传入的集群ID
Set
<
String
>
cid1
=
clusterService
.
getContainerIdsByClusterId
(
11111
l
,
appname
);
//System.out.println(cid1);
String
appID1
=
((
String
)
cid1
.
toArray
()[
0
]);
//System.out.println(appID1);
String
appIP1
=
ipService
.
getContainerIp
(
appID1
).
split
(
"/"
)[
0
];
System
.
out
.
println
(
appIP1
);
return
appIP1
;
}
}
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/LogicTopoService.java
View file @
23da4682
package
top.ninwoo.edgecenter.service
;
import
top.ninwoo.common.entity.ClusterConfig
;
import
top.ninwoo.common.entity.NetworkTopology
;
import
java.util.List
;
...
...
@@ -8,16 +7,14 @@ import java.util.List;
//逻辑网络
public
interface
LogicTopoService
{
//通过逻辑拓扑创造逻辑网络
void
creatLogicTopo
(
long
clusterId
,
NetworkTopology
logictopo
);
String
creatLogicTopo
(
long
clusterId
,
NetworkTopology
logictopo
);
//调整逻辑网络
String
modifyLogicTopology
(
long
clusterId
,
NetworkTopology
logictopo
);
//得到逻辑拓扑
NetworkTopology
getLogictopo
(
NetworkTopology
oritopo
);
//储存IPlist
void
saveIPlist
(
long
clusterId
,
String
[]
appnames
);
//返回topo到docker容器端
int
[][]
getTopo
(
long
clusterId
);
//返回IPlist到docker容器端
List
<
String
>
getIPlist
();
List
<
String
>
getIPlist
(
long
clusterId
);
}
bishe-edge-center/src/main/java/top/ninwoo/edgecenter/service/impl/LogicTopoServiceImpl.java
View file @
23da4682
...
...
@@ -22,63 +22,60 @@ public class LogicTopoServiceImpl implements LogicTopoService {
// 用于存储集群的拓扑
private
ConcurrentHashMap
<
Long
,
NetworkTopology
>
clustersTopo
=
new
ConcurrentHashMap
<>();
//根据appnames来存储IP
private
List
<
String
>
IPlist
=
new
ArrayList
<
String
>();
@Value
(
"${bs.sdn-controller.host}"
)
private
String
host
;
@Value
(
"${bs.sdn-controller.port}"
)
private
int
port
;
private
ConcurrentHashMap
<
Long
,
List
<
String
>>
clustersIPlist
=
new
ConcurrentHashMap
<>();
@Autowired
ClusterService
clusterService
;
private
ClusterService
clusterService
;
@Autowired
IpService
ipService
;
private
IpService
ipService
;
@Autowired
IptablesService
iptablesService
;
private
IptablesService
iptablesService
;
@Override
public
void
creatLogicTopo
(
long
clusterId
,
NetworkTopology
oldtopo
)
{
public
String
creatLogicTopo
(
long
clusterId
,
NetworkTopology
oldtopo
)
{
List
<
String
>
IPlist
=
new
ArrayList
<
String
>();
NetworkTopology
logictopo
=
this
.
getLogictopo
(
oldtopo
);
if
(
logictopo
==
null
)
{
LOG
.
warn
(
"集群["
+
clusterId
+
"]未设置网络"
);
return
;
return
"集群创建失败"
;
}
// 校验信息
String
[]
cNames
=
logictopo
.
getAppNames
();
int
[][]
topo
=
logictopo
.
getTopology
();
if
(
cNames
==
null
||
cNames
.
length
<=
1
)
{
return
;
return
"集群创建失败"
;
}
/*
// 这里声明:cNames中不包含ovs虚拟机,仅包含docker容器组成的逻辑拓扑
for (int i = 1; i < cNames.length; i++) {
for (int j = 0; j < i; j++) {
// 判断每一个节点的连接状态
if (topo[i][j] == 0) {
// 如果判断为0,添加IPtabale,使其断开
this.addDropIPtable(clusterId, cNames[i], cNames[j]);
}
for
(
int
k
=
0
;
k
<
cNames
.
length
;
k
++){
Set
<
String
>
cid
=
clusterService
.
getContainerIdsByClusterId
(
clusterId
,
cNames
[
k
]);
if
(
cid
==
null
){
System
.
out
.
println
(
"错误的clusterID"
);
return
"获取失败"
;
}
String
appID
=
((
String
)
cid
.
toArray
()[
0
]);
if
(
appID
==
null
){
System
.
out
.
println
(
"错误的appnmae"
);
return
"获取失败"
;
}
String
appIP
=
ipService
.
getContainerIp
(
appID
).
split
(
"/"
)[
0
];
*/
IPlist
.
add
(
appIP
);
}
clustersTopo
.
put
(
clusterId
,
logictopo
);
clustersIPlist
.
put
(
clusterId
,
IPlist
);
return
"success"
;
}
@Override
public
String
modifyLogicTopology
(
long
clusterId
,
NetworkTopology
oldtopo
)
{
//System.out.println("我运行了么?");
NetworkTopology
logictopo
=
this
.
getLogictopo
(
oldtopo
);
// 先进行校验
if
(
logictopo
==
null
)
{
System
.
out
.
println
(
"topoloy不能为空"
);
LOG
.
error
(
"topoloy不能为空"
);
return
"topoloy不能为空"
;
}
...
...
@@ -91,48 +88,26 @@ public class LogicTopoServiceImpl implements LogicTopoService {
NetworkTopology
origTopo
=
clustersTopo
.
get
(
clusterId
);
// 校验topoId是否一致
if
(
origTopo
.
getTopologyId
()
!=
logictopo
.
getTopologyId
())
{
System
.
out
.
println
(
"不是相同的网络拓扑,无法更改"
);
LOG
.
error
(
"不是相同的网络拓扑,无法更改"
);
return
"不是相同的网络拓扑,无法更改"
;
}
// 校验成员名称是否相同
for
(
int
i
=
0
;
i
<
origTopo
.
getAppNames
().
length
;
i
++)
{
if
(!
origTopo
.
getAppNames
()[
i
].
equals
(
logictopo
.
getAppNames
()[
i
]))
{
System
.
out
.
println
(
"App名称必须一致"
);
LOG
.
error
(
"App名称必须一致"
);
return
"App名称必须一致"
;
}
}
int
[][]
origTopoArr
=
origTopo
.
getTopology
();
int
[][]
newTopoArr
=
logictopo
.
getTopology
();
//System.out.println("康康我的新拓扑怎样呢");
//System.out.println(newTopoArr[2][1]);
// 校验topo是否一致
if
((
origTopoArr
.
length
!=
newTopoArr
.
length
)
||
(
origTopoArr
[
0
].
length
!=
newTopoArr
[
0
].
length
))
{
System
.
out
.
println
(
"拓扑大小不一致"
);
LOG
.
error
(
"拓扑大小不一致"
);
return
"拓扑大小不一致"
;
}
/*
//System.out.println("终于要更新网络了啦");
// 更新网络拓扑
for (int i = 1; i < newTopoArr.length; i++) {
for (int j = 0; j < i; j++) {
//增加新的 dropIPtable
if (origTopoArr[i][j] == 1 && newTopoArr[i][j] == 0) {
// 创建新的连接
this.addDropIPtable(clusterId, origTopo.getAppNames()[i], origTopo.getAppNames()[j]);
//System.out.println("改了一次");
} else if (origTopoArr[i][j] == 0 && newTopoArr[i][j] == 1) {
// 删除旧的连接
this.addDelDropIPtable(clusterId, origTopo.getAppNames()[i], origTopo.getAppNames()[j]);
//System.out.println("gaile");
}
}
}
*/
clustersTopo
.
put
(
clusterId
,
logictopo
);
return
"success"
;
...
...
@@ -195,35 +170,21 @@ public class LogicTopoServiceImpl implements LogicTopoService {
iptablesService
.
dropTraffic
(
appID2
,
appIP1
,
appIP2
);
}
@Override
public
void
saveIPlist
(
long
clusterId
,
String
[]
appnames
){
//获取appnames
//todo 这里用dowhile似乎更快些
int
flag
=
0
;
for
(
int
i
=
0
;
i
<
appnames
.
length
-
1
;
i
++)
{
if
(
appnames
[
i
].
startsWith
(
"br:"
))
{
break
;
}
flag
++;
}
for
(
int
k
=
0
;
k
<
flag
;
k
++){
Set
<
String
>
cid
=
clusterService
.
getContainerIdsByClusterId
(
clusterId
,
appnames
[
k
]);
String
appID
=
((
String
)
cid
.
toArray
()[
0
]);
String
appIP
=
ipService
.
getContainerIp
(
appID
).
split
(
"/"
)[
0
];
IPlist
.
add
(
appIP
);
}
System
.
out
.
println
(
"已储存IPlist"
);
}
@Override
public
int
[][]
getTopo
(
long
clusterId
)
{
if
(!
clustersTopo
.
containsKey
(
clusterId
)){
LOG
.
error
(
"没有该集群的Topo"
);
return
null
;
}
return
clustersTopo
.
get
(
clusterId
).
getTopology
();
}
@Override
public
List
<
String
>
getIPlist
()
{
return
IPlist
;
public
List
<
String
>
getIPlist
(
long
clusterId
)
{
if
(!
clustersIPlist
.
containsKey
(
clusterId
)){
LOG
.
error
(
"没有该集群的IPlist"
);
return
new
ArrayList
<
String
>();
}
return
clustersIPlist
.
get
(
clusterId
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment