[lxc-devel] [PATCH 1/4] Honor network type and link from lxc-create -f
Serge Hallyn
serge.hallyn at canonical.com
Thu Oct 11 16:48:41 UTC 2012
Quoting Dwight Engen (dwight.engen at oracle.com):
> On Thu, 11 Oct 2012 10:10:03 -0500
> Serge Hallyn <serge.hallyn at canonical.com> wrote:
>
> > Quoting Dwight Engen (dwight.engen at oracle.com):
> > > Make the oracle template honor the lxc.network.type and
> > > lxc.network.link configuration items if a "base" configuration file
> > > is passed to lxc-create. If no configuration file is passed, the
> > > template falls back to the default name created by libvirt.
> > >
> > > Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
> > > ---
> > > templates/lxc-oracle.in | 16 ++++++++++++----
> > > 1 files changed, 12 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/templates/lxc-oracle.in b/templates/lxc-oracle.in
> > > index ba62f8f..2d62396 100644
> > > --- a/templates/lxc-oracle.in
> > > +++ b/templates/lxc-oracle.in
> > > @@ -27,10 +27,6 @@
> > > # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
> > > 02111-1307 USA #
> > >
> > > -# use virbr0 that is setup by default by libvirtd
> > > -lxc_network_type=veth
> > > -lxc_network_link=virbr0
> > > -
> > > die()
> > > {
> > > echo "failed: $1"
> > > @@ -250,6 +246,18 @@ container_config_create()
> > > head -1 |awk '{print $2}' | cut -c1-10 |\
> > > sed 's/\(..\)/\1:/g; s/.$//'`"
> > > mkdir -p $cfg_dir || die "unable to create config dir $cfg_dir"
> > > +
> > > + # see if the network settings are specified in the file thats
> > > handed to us
> > > + lxc_network_type=`grep '^lxc.network.type' $cfg_dir/config |
> > > awk -F'[= \t]+' '{ print $2 }'`
> > > + if [ -z "$lxc_network_type" ]; then
> > > + lxc_network_type="veth"
> > > + fi
> > > +
> > > + lxc_network_link=`grep '^lxc.network.link' $cfg_dir/config |
> > > awk -F'[= \t]+' '{ print $2 }'`
> > > + if [ -z "$lxc_network_link" ]; then
> > > + lxc_network_link="virbr0"
> > > + fi
> > > +
> >
> > Hi,
> >
> > the creator might want to put other things in the initial config,
> > such as lxc.cgroup.devices entries.
>
> Yes that is what was bothering me, does the user/host config know
> better which devices should be imported to the container or the
> template? I guess we're okay since you must be root on the host to
> start them, so root just has to know that those devices make sense for
> the container. So instead of removing the config, I guess I'll just
> have a little function that adds config keys one at a time, checking to
> see that it's not already there, so that way anything can be specified
> in the copied in config and the template won't override it. Sound
> reasonable?
I wouldn't do each piece, just check if lxc.network is defined at all,
and if not then use your template defaults.
> > When you do 'lxc-create -t TEMPLATE -n p1 -f CONFIG", lxc-create will
> > copy CONFIG to /var/lib/lxc/p1/config. I think it would be better for
> > your template to not remove the config copied over by lxc-create. So
> > don't do the above steps. If you want the default to be to use
> > virbr0, just check whether 'lxc.network.type' is not in the config
> > yet, and if it is not then set
> >
> > lxc_network_type=veth
> > lxc_network_link=virbr0
> >
> > as you were before. (I'm sure you know this, but to be clear, if
> > there is no 'lxc.network.type' at all then the container will share
> > the host's network, and if it is 'lxc.network.type = empty' then it
> > will have a private netns with only loopback. So you can pick what
> > you want for a default, but this way the distro, by setting a default
> > /etc/lxc/lxc.conf, can easily choose a default bridge for
> > lxc.network.link while the template can choose what to do if nothing
> > is specified.
>
> I do remember seeing that, but you're right that I wasn't thinking
> of that use case (shared network by not having lxc.network.type) since
> my goal was to keep the 'default' containers created fairly isolated,
> but still update-able through the network.
And admittedly the non-isolated network case may simply not be valid
for your template. It's not safe for an ubuntu container on an ubuntu
host, for instance.
> This also gets back to the fact that lxc-create in git doesn't
> copy /etc/lxc/lxc.conf if no -f is specified, so I guess that only
> works on Ubuntu now? I'd like to add the 'distro' lxc.conf file and
Yeah. It's a tiny patch, it's just not upstream because other distros
don't set up an lxc bridge right now.
> have the rpm .spec package it, but it won't do much good without the
> part in lxc-create :( Doing so would actually obviate the need for the
> template to have a "host default" for networking since it would just
> honor /etc/lxc/lxc.conf, making the template more 'host distro'
> agnostic. I'm happy to add the bits for this to lxc-create that Ubuntu
> already has, and add an lxc.conf to the source tree if you want.
What would you use for a default network?
'lxc.network.type = empty' might be a reasonable choice. The user can
always pass a nic in by hand, and it keeps the container from screwing
up the host. Any distro which cares to can then override the lxc.conf
with one that works for it.
-serge
More information about the lxc-devel
mailing list