import
time
import
sys
import
os
ser
=
{
"centos5"
:[
"test09"
,
"192.168.10.5/24"
],
"centos6"
:[
"test10"
,
"192.168.10.6/24"
]}
config
=
{
0
:
None
,
1
:
"run"
,
2
:
None
,
3
:
None
}
if
len
(sys.argv)
=
=
1
:
print
sys.exit(
1
)
for
i,j
in
enumerate
(sys.argv[
1
:]):
config[i]
=
j
if
config[
0
]
not
in
ser:
print
"Docker Image Not Found"
sys.exit(
1
)
if
not
config[
3
]:
config[
3
]
=
os.popen(
"ip -4 a | awk -F'[ :]+' '/UP group/{print $2;exit}'"
).read()[:
-
1
]
if
not
config[
2
]:
config[
2
]
=
ser[config[
0
]][
1
]
image
=
os.popen(
%
sys.argv[
1
]).read()[:
-
1
]
if
image:
if
sys.argv[
1
]
in
os.popen(
"docker ps"
).read():
print
"Docker Container Allready Running!"
sys.exit()
os.system(
"docker rm %s"
%
sys.argv[
1
])
if
config[
1
]
=
=
"run"
:
os.system(
"docker run -d --privileged --net=none --name %s -v /docker/config/%s:/root -v /local_home:/local_home --hostname %s %s /sbin/init"
%
(config[
0
],config[
0
],ser[config[
0
]][
0
],image))
time.sleep(
8
)
pid
=
os.popen(
"docker inspect -f '``.`State`.`Pid`' %s"
%
sys.argv[
1
]).read()[:
-
1
]
os.system(
'ip link add %s.d link %s type macvlan mode bridge'
%
(config[
3
],config[
3
]))
os.system(
'ip link set netns %s %s.d'
%
(pid,config[
3
]))
os.system(
'nsenter -t %s -n ip link set %s.d up'
%
(pid,config[
3
]))
os.system(
'nsenter -t %s -n ip route del default'
%
pid)
os.system(
'nsenter -t %s -n ip addr add %s dev %s.d'
%
(pid,config[
2
],config[
3
]))
os.system(
"nsenter -t %s -n ip route add default via `ip r | awk '/default/{print $3}'` dev %s.d"
%
(pid,config[
3
]))
else
:
os.system(
"docker run --rm -it --privileged --name %s -v /docker/config/%s:/root -v /local_home:/local_home %s bash"
%
(config[
0
],config[
0
],image))