Host networking

Allow for the user to specify network=host|bridge.  If network
is not specified, the default will be bridge.  While "none" is now
a valid option, it is not included in this.

Signed-off-by: baude <bbaude@redhat.com>

Closes: #164
Approved by: rhatdan
This commit is contained in:
baude
2017-12-21 12:33:10 -06:00
committed by Atomic Bot
parent 7e922b1035
commit ef4035e208
3 changed files with 39 additions and 11 deletions

View File

@ -324,7 +324,8 @@ var createFlags = []cli.Flag{
},
cli.StringFlag{
Name: "network",
Usage: "Connect a container to a network (default 'default')",
Usage: "Connect a container to a network",
Value: "bridge",
},
cli.StringSliceFlag{
Name: "network-alias",

View File

@ -73,15 +73,16 @@ func addPidNS(config *createConfig, g *generate.Generator) error {
func addNetNS(config *createConfig, g *generate.Generator) error {
netMode := config.NetMode
if netMode.IsHost() {
logrus.Debug("Using host netmode")
return g.RemoveLinuxNamespace(libpod.NetNamespace)
}
if netMode.IsNone() {
return libpod.ErrNotImplemented
}
if netMode.IsBridge() {
return libpod.ErrNotImplemented
}
if netMode.IsContainer() {
} else if netMode.IsNone() {
logrus.Debug("Using none netmode")
return nil
} else if netMode.IsBridge() {
logrus.Debug("Using bridge netmode")
return nil
} else if netMode.IsContainer() {
logrus.Debug("Using container netmode")
ctr, err := config.Runtime.LookupContainer(netMode.ConnectedContainer())
if err != nil {
return errors.Wrapf(err, "container %q not found", netMode.ConnectedContainer())
@ -94,6 +95,8 @@ func addNetNS(config *createConfig, g *generate.Generator) error {
if err := g.AddOrReplaceLinuxNamespace(libpod.NetNamespace, nsPath); err != nil {
return err
}
} else {
return errors.Errorf("unknown network mode")
}
return nil
}
@ -556,8 +559,9 @@ func (c *createConfig) GetContainerCreateOptions() ([]libpod.CtrCreateOption, er
options = append(options, libpod.WithName(c.Name))
}
// TODO parse ports into libpod format and include
// TODO should not happen if --net=host
options = append(options, libpod.WithNetNS([]ocicni.PortMapping{}))
if !c.NetMode.IsHost() {
options = append(options, libpod.WithNetNS([]ocicni.PortMapping{}))
}
options = append(options, libpod.WithStopSignal(c.StopSignal))
options = append(options, libpod.WithStopTimeout(c.StopTimeout))
return options, nil

View File

@ -0,0 +1,23 @@
#!/usr/bin/env bats
load helpers
function teardown() {
cleanup_test
}
function setup() {
copy_images
}
@test "test network connection with default bridge" {
run ${KPOD_BINARY} ${KPOD_OPTIONS} run -dt ${ALPINE} wget www.yahoo.com
echo "$output"
[ "$status" -eq 0 ]
}
@test "test network connection with host" {
run ${KPOD_BINARY} ${KPOD_OPTIONS} run -dt --network host ${ALPINE} wget www.yahoo.com
echo "$output"
[ "$status" -eq 0 ]
}