stgraber on Github | 27 May 00:16 2016

[lxd/master] zfs: Mount if not mounted

Attachment: text/x-mailbox, 503 bytes
From 0dc568cd2653c3049376987d08bf3355a627c68d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber <at> ubuntu.com>
Date: Thu, 26 May 2016 18:12:43 -0400
Subject: [PATCH] zfs: Mount if not mounted
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #1888

Signed-off-by: Stéphane Graber <stgraber <at> ubuntu.com>
---
 lxd/storage_zfs.go | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index 8386ed8..d138918 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
 <at>  <at>  -79,6 +79,13  <at>  <at>  func (s *storageZfs) Init(config map[string]interface{}) (storage, error) {

 // Things we don't need to care about
 func (s *storageZfs) ContainerStart(container container) error {
+	fs := fmt.Sprintf("containers/%s", container.Name())
+
+	// Just in case the container filesystem got unmounted
+	if !shared.IsMountPoint(shared.VarPath(fs)) {
+		s.zfsMount(fs)
+	}
+
 	return nil
 }

_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
rockstar on Github | 26 May 01:36 2016

[pylxd/master] Fix travis run for coverage

Attachment: text/x-mailbox, 410 bytes
From 9c9aa974962dd9ad8b644c92904cdb739c971e26 Mon Sep 17 00:00:00 2001
From: Paul Hummer <paul <at> eventuallyanyway.com>
Date: Wed, 25 May 2016 17:36:19 -0600
Subject: [PATCH] Fix travis run.

---
 .travis.yml | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 5fa99d7..7db3b12 100644
--- a/.travis.yml
+++ b/.travis.yml
 <at>  <at>  -1,6 +1,6  <at>  <at> 
 language: python
 python:
-- "3.5"
+  - "2.7"
 env:
   matrix:
   - TOXENV=py27
 <at>  <at>  -9,13 +9,14  <at>  <at>  env:
   # - TOXENV=integration # requires a remote lxd setup

 install:
-- travis_retry pip install tox
+  - travis_retry pip install tox
+  - pip install codecov
 script:
-- tox
-- test -d .tox/$TOXENV/log && cat .tox/$TOXENV/log/*.log || true
+  - tox
+  - test -d .tox/$TOXENV/log && cat .tox/$TOXENV/log/*.log || true
 cache:
   directories:
-  - .tox/$TOXENV
-  - $HOME/.cache/pip
+    - .tox/$TOXENV
+    - $HOME/.cache/pip
 after_success:
-  - bash <(curl -s https://codecov.io/bash)
+  - codecov
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
dstelter on Github | 25 May 22:43 2016

[nova-lxd/master] Show actual error message when LXD API fails

Attachment: text/x-mailbox, 1455 bytes
From 491e0f52854688672868ca6c8942650c11ef969d Mon Sep 17 00:00:00 2001
From: Daniel Stelter-Gliese <ds <at> siriuswhite.de>
Date: Wed, 25 May 2016 22:38:33 +0200
Subject: [PATCH] Show actual error message when LXD API fails

When the LXD API returns an error during instance creation, the actual error message is passed in
data['metadata']['err'], not data['metadata']['metadata'].
Even worse metadata might be empty, in which case Nova will only show "An unknown exception occured".
---
 nova/virt/lxd/session.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/nova/virt/lxd/session.py b/nova/virt/lxd/session.py
index e2fdc0d..3d05e9c 100644
--- a/nova/virt/lxd/session.py
+++ b/nova/virt/lxd/session.py
 <at>  <at>  -531,7 +531,8  <at>  <at>  def container_init(self, config, instance):
             status, data = self.operation_info(operation, instance)
             data = data.get('metadata')
             if not data['status_code'] == 200:
-                raise exception.NovaException(data['metadata'])
+                msg = data.get('err') or data['metadata']
+                raise exception.NovaException(msg)

             LOG.info(_LI('Successfully created container %(instance)s with'
                          ' %(image)s'), {'instance': instance.name,
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
rockstar on Github | 25 May 21:35 2016

[pylxd/master] Add coverage report to tox

Attachment: text/x-mailbox, 410 bytes
From d7e99d193f135dc95e7519b9b750423a35019b26 Mon Sep 17 00:00:00 2001
From: Paul Hummer <paul <at> eventuallyanyway.com>
Date: Wed, 25 May 2016 13:33:57 -0600
Subject: [PATCH] Add coverage report to tox

---
 tox.ini | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tox.ini b/tox.ini
index 268aff9..e3e3ea9 100644
--- a/tox.ini
+++ b/tox.ini
 <at>  <at>  -10,7 +10,8  <at>  <at>  setenv =
    VIRTUAL_ENV={envdir}
 deps = -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
-commands = nosetests pylxd
+       coverage
+commands = nosetests --with-coverage --cover-package=pylxd pylxd

 [testenv:pep8]
 commands = flake8 --ignore=E123,E125
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
rockstar on Github | 25 May 21:21 2016

[pylxd/master] Add some stinkin' badges

Attachment: text/x-mailbox, 410 bytes
From 942c24f6a6fcf4c439bcdbe0ab3118eb2f54e458 Mon Sep 17 00:00:00 2001
From: Paul Hummer <paul <at> eventuallyanyway.com>
Date: Wed, 25 May 2016 13:22:02 -0600
Subject: [PATCH] Add some stinkin' badges

---
 README.rst | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/README.rst b/README.rst
index 8972c2a..2cecf17 100644
--- a/README.rst
+++ b/README.rst
 <at>  <at>  -1,8 +1,12  <at>  <at> 
 pylxd
 ~~~~~

+.. image:: http://img.shields.io/pypi/v/pylxd.svg
+    :target: https://pypi.python.org/pypi/pylxd
 .. image:: https://travis-ci.org/lxc/pylxd.svg?branch=master
     :target: https://travis-ci.org/lxc/pylxd
+.. image:: https://codecov.io/github/lxc/lxd/coverage.svg?branch=master
+    :target: https://codecov.io/github/lxc/lxd

 A Python library for interacting with the LXD REST API.

_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
rockstar on Github | 25 May 20:21 2016

[pylxd/master] Add codecov.io integration

Attachment: text/x-mailbox, 442 bytes
From 32476fb9e81334c74bb77e7dc2bc6514cff2c0d2 Mon Sep 17 00:00:00 2001
From: Paul Hummer <paul <at> eventuallyanyway.com>
Date: Wed, 25 May 2016 12:21:11 -0600
Subject: [PATCH] Add codecov.io integration.

---
 .travis.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index 84f0b5f..5fa99d7 100644
--- a/.travis.yml
+++ b/.travis.yml
 <at>  <at>  -17,3 +17,5  <at>  <at>  cache:
   directories:
   - .tox/$TOXENV
   - $HOME/.cache/pip
+after_success:
+  - bash <(curl -s https://codecov.io/bash)
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
stgraber on Github | 25 May 17:40 2016

[lxd/master] Bugfixes

Attachment: text/x-mailbox, 410 bytes
From aeaf3fe536919c07c6a6dc21d9c7cc8dfaa61816 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber <at> ubuntu.com>
Date: Tue, 24 May 2016 14:34:01 -0400
Subject: [PATCH 1/2] Add missing linebreak to lxd help
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber <at> ubuntu.com>
---
 lxd/main.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/main.go b/lxd/main.go
index 27265b8..ba4841c 100644
--- a/lxd/main.go
+++ b/lxd/main.go
 <at>  <at>  -159,7 +159,7  <at>  <at>  func run() error {
 		fmt.Printf("    callhook\n")
 		fmt.Printf("        Call a container hook\n")
 		fmt.Printf("    netcat\n")
-		fmt.Printf("        Mirror a unix socket to stdin/stdout")
+		fmt.Printf("        Mirror a unix socket to stdin/stdout\n")
 	}

 	// Parse the arguments

From c4995439bccc86ccd4f28283a27bdd8c0c0a4fb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber <at> ubuntu.com>
Date: Wed, 25 May 2016 11:35:31 -0400
Subject: [PATCH 2/2] zfs: Improve block device detection
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

When attempting to find the right block device for a zpool, only
consider actual block devices.

Signed-off-by: Stéphane Graber <stgraber <at> ubuntu.com>
---
 lxd/devices.go | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lxd/devices.go b/lxd/devices.go
index 0c95dc8..529450d 100644
--- a/lxd/devices.go
+++ b/lxd/devices.go
 <at>  <at>  -723,11 +723,11  <at>  <at>  func deviceGetParentBlocks(path string) ([]string, error) {
 						devices = append(devices, dev)
 					}
 				}
-			} else if shared.PathExists(fmt.Sprintf("/dev/%s", fields[0])) {
+			} else if deviceIsBlockdev(fmt.Sprintf("/dev/%s", fields[0])) {
 				path = fmt.Sprintf("/dev/%s", fields[0])
-			} else if shared.PathExists(fmt.Sprintf("/dev/disk/by-id/%s", fields[0])) {
+			} else if deviceIsBlockdev(fmt.Sprintf("/dev/disk/by-id/%s", fields[0])) {
 				path = fmt.Sprintf("/dev/disk/by-id/%s", fields[0])
-			} else if shared.PathExists(fmt.Sprintf("/dev/mapper/%s", fields[0])) {
+			} else if deviceIsBlockdev(fmt.Sprintf("/dev/mapper/%s", fields[0])) {
 				path = fmt.Sprintf("/dev/mapper/%s", fields[0])
 			} else {
 				continue
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
zulcss on Github | 25 May 16:33 2016

[pylxd/master] Allow specification of devices in a profile

Attachment: text/x-mailbox, 766 bytes
From 5002ee6d222183997a1f88b5e283f04d27843b5d Mon Sep 17 00:00:00 2001
From: Chuck Short <chuck.short <at> canonical.com>
Date: Tue, 24 May 2016 21:50:33 -0400
Subject: [PATCH] Allow specification of devices in a profile

Currently its not possible to specify devices when creating a
LXD profile. Make config dictionary and devices
optional when creating an LXD profileThis is required
so we can attach disks, network interfaces, etc.

Signed-off-by: Chuck Short <chuck.short <at> canonical.com>
---
 pylxd/profile.py            | 12 +++++++-----
 pylxd/tests/test_profile.py |  2 +-
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/pylxd/profile.py b/pylxd/profile.py
index 1dab086..dcc921d 100644
--- a/pylxd/profile.py
+++ b/pylxd/profile.py
 <at>  <at>  -44,12 +44,14  <at>  <at>  def all(cls, client):
         return profiles

      <at> classmethod
-    def create(cls, client, name, config):
+    def create(cls, client, name, config=None, devices=None):
         """Create a profile."""
-        client.api.profiles.post(json={
-            'name': name,
-            'config': config
-            })
+        profile = {'name': name}
+        if config is not None:
+            profile['config'] = config
+        if devices is not None:
+            profile['devices'] = devices
+        client.api.profiles.post(json=profile)

         return cls.get(client, name)

diff --git a/pylxd/tests/test_profile.py b/pylxd/tests/test_profile.py
index f8ea7e1..49df682 100644
--- a/pylxd/tests/test_profile.py
+++ b/pylxd/tests/test_profile.py
 <at>  <at>  -14,7 +14,7  <at>  <at>  def test_all(self):
     def test_create(self):
         """A new profile is created."""
         an_profile = profile.Profile.create(
-            self.client, name='an-new-profile', config={})
+            self.client, name='an-new-profile', config={}, devices={})

         self.assertIsInstance(an_profile, profile.Profile)
         self.assertEqual('an-new-profile', an_profile.name)
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
maik alberto | 24 May 21:40 2016
Picon

LXC Unprivileged Web

Hello!


LXC is very nice, congratulations gentlemen.
I decided to try to make a web interface to manage unprivileged containers using shell script.


I put available for testing in a free instance of the Amazon, following link if they want to see the script running:


http://luw.servehttp.com


Demo users:


alberto:123!qwe
correa:456 <at> asd
ribeiro:789#zxc

Code:
https://raw.githubusercontent.com/m41k/luw/master/luw.sh


(google translator)


Maik Alberto

_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
galeksandrp on Github | 25 May 13:05 2016

[linuxcontainers.org/master] Russian translation

Attachment: text/x-mailbox, 430 bytes
From ef6d922f8f105f0fd88a858ffc3d8eea9074feba Mon Sep 17 00:00:00 2001
From: Alexander Georgievskiy <galeksandrp <at> gmail.com>
Date: Tue, 24 May 2016 18:01:18 +0300
Subject: [PATCH] Create rest-api.ru.md

Create getting-started-openstack.ru.md

Create getting-started-cli.ru.md

Create downloads.ru.md

Create contributer.ru.md

Create footer.ru.tpl.html

Create download-headers.ru.tpl.html

Create .placeholder

Create .placeholder

Signed-off-by: Alexander Georgievskiy <galeksandrp <at> gmail.com>
---
 content/STRUCTURE.ru.json                     |  14 +--
 content/lxd/contributer.ru.md                 |  22 ++++
 content/lxd/downloads.ru.md                   |  28 +++++
 content/lxd/getting-started-cli.ru.md         | 153 ++++++++++++++++++++++++++
 content/lxd/getting-started-openstack.ru.md   |  51 +++++++++
 content/lxd/rest-api.ru.md                    |  28 +++++
 manpages/lxc/ru/.placeholder                  |   0
 output/ru/lxc/apidoc/.placeholder             |   0
 templates/common/download-headers.ru.tpl.html |   7 ++
 templates/common/footer.ru.tpl.html           |   9 ++
 10 files changed, 305 insertions(+), 7 deletions(-)
 create mode 100644 content/lxd/contributer.ru.md
 create mode 100644 content/lxd/downloads.ru.md
 create mode 100644 content/lxd/getting-started-cli.ru.md
 create mode 100644 content/lxd/getting-started-openstack.ru.md
 create mode 100644 content/lxd/rest-api.ru.md
 create mode 100644 manpages/lxc/ru/.placeholder
 create mode 100644 output/ru/lxc/apidoc/.placeholder
 create mode 100644 templates/common/download-headers.ru.tpl.html
 create mode 100644 templates/common/footer.ru.tpl.html

diff --git a/content/STRUCTURE.ru.json b/content/STRUCTURE.ru.json
index 0561b37..99d608e 100644
--- a/content/STRUCTURE.ru.json
+++ b/content/STRUCTURE.ru.json
 <at>  <at>  -56,7 +56,7  <at>  <at> 
      "menu": ["LXC", "Скачать"],
      "generator": "downloads",
      "meta": {"dir": "/downloads/lxc",
-              "input": "lxc/downloads.md"}},
+              "input": "lxc/downloads.ru.md"}},

     {"path": "/lxc/external-resources/",
      "menu": ["LXC", "Внешние ресурсы"]},
 <at>  <at>  -114,19 +114,19  <at>  <at> 
      "title": "LXD - Начинаем - командная строка",
      "menu": ["LXD", "Начинаем - командная строка"],
      "generator": "markdown",
-     "meta": {"input": "lxd/getting-started-cli.md"}},
+     "meta": {"input": "lxd/getting-started-cli.ru.md"}},

     {"path": "/lxd/getting-started-openstack/",
      "title": "LXD - Начинаем - OpenStack",
      "menu": ["LXD", "Начинаем - OpenStack"],
      "generator": "markdown",
-     "meta": {"input": "lxd/getting-started-openstack.md"}},
+     "meta": {"input": "lxd/getting-started-openstack.ru.md"}},

     {"path": "/lxd/rest-api/",
      "title": "LXD - REST API",
      "menu": ["LXD", "REST API"],
      "generator": "markdown",
-     "meta": {"input": "lxd/rest-api.md"}},
+     "meta": {"input": "lxd/rest-api.ru.md"}},

     {"path": "/lxd/contribute/",
      "title": "LXD - Контрибьют",
 <at>  <at>  -139,7 +139,7  <at>  <at> 
      "menu": ["LXD", "Скачать"],
      "generator": "downloads",
      "meta": {"dir": "/downloads/lxd",
-              "input": "lxd/downloads.md"}},
+              "input": "lxd/downloads.ru.md"}},

     {"path": "/lxd/external-resources/",
      "menu": ["LXD", "Внешние ресурсы"]},
 <at>  <at>  -215,7 +215,7  <at>  <at> 
      "menu": ["LXCFS", "Скачать"],
      "generator": "downloads",
      "meta": {"dir": "/downloads/lxcfs",
-              "input": "lxcfs/downloads.md"}},
+              "input": "lxcfs/downloads.ru.md"}},

     {"path": "/lxcfs/external-resources/",
      "menu": ["LXCFS", "Внешние ресурсы"]},
 <at>  <at>  -281,7 +281,7  <at>  <at> 
      "menu": ["CGManager", "Скачать"],
      "generator": "downloads",
      "meta": {"dir": "/downloads/cgmanager",
-              "input": "cgmanager/downloads.md"}},
+              "input": "cgmanager/downloads.ru.md"}},

     {"path": "/cgmanager/external-resources/",
      "menu": ["CGManager", "Внешние ресурсы"]},
diff --git a/content/lxd/contributer.ru.md b/content/lxd/contributer.ru.md
new file mode 100644
index 0000000..7e8d5c8
--- /dev/null
+++ b/content/lxd/contributer.ru.md
 <at>  <at>  -0,0 +1,22  <at>  <at> 
+![Logo](/static/img/containers.png)
+
+# Исходный код
+
+Текущая разрабатываемая версия LXD может быть
склонирована с Github:
+
+    git clone git://github.com/lxc/lxd
+
+Патчи, посылаемые в upstream на рассмотрение должны
базироваться на текущем дереве git  
+а не на стабильных релизах, только если ошибка не
затрагивает стабильный релиз.
+
+# Процесс приема патчей
+
+Патчи в LXD должны быть pull-реквестами Github, а также быть signed-off.
+
+Больше информации по рекомендациям для
контрибуторов может быть [найдено](https://github.com/lxc/lxd/blob/master/CONTRIBUTING.md)
+
+# Backports в стабильные релизы
+
+В общем, все исправления ошибок будут добавлены в
стабильный релиз, тем не менее, это случается
партиями каждые несколько месяцев. Если мы
пропустили патч, создайте issue, и мы разберемся.
+
+В стабильные релизы попадут только исправления ошибок.
diff --git a/content/lxd/downloads.ru.md b/content/lxd/downloads.ru.md
new file mode 100644
index 0000000..2dc30e4
--- /dev/null
+++ b/content/lxd/downloads.ru.md
 <at>  <at>  -0,0 +1,28  <at>  <at> 
+![Download icon](/static/img/download.png)
+
+# Пакеты для дистрибутивов
+Пользователи Ubuntu 16.04 LTS могут установить LXD с помощью:
+
+    apt-get install lxd
+
+Пользователи Ubuntu 14.04 LTS могут установить его из backports:
+
+    apt-get -t trusty-backports install lxd
+
+Для пользователей Ubuntu, желающий новейших upstream
релизов также есть наш официальный PPA для LXD:
+
+ * [lxd-stable](https://launchpad.net/~ubuntu-lxc/+archive/lxd-stable): Последний
стабильный релиз
+
+И для тех, кому нужны разрабатываемые снэпшоты:
+
+ * [lxd-git-master](https://launchpad.net/~ubuntu-lxc/+archive/lxd-git-master): ветка "master"
+
+# Текущая разрабатываемая версия
+
+Вы можете клонировать lxd напрямую:
+
+    git clone git://github.com/lxc/lxd
+
+# Релизные tarballs
+
+Стабильные релизные tarballs доступны для загрузки ниже.
diff --git a/content/lxd/getting-started-cli.ru.md b/content/lxd/getting-started-cli.ru.md
new file mode 100644
index 0000000..c5bf46e
--- /dev/null
+++ b/content/lxd/getting-started-cli.ru.md
 <at>  <at>  -0,0 +1,153  <at>  <at> 
+![Logo](/static/img/containers.png)
+
+# Установка LXD и утилиты командной строки
+## Ubuntu desktop and Ubuntu server
+Пользователи Ubuntu 16.04 LTS могут установить LXD с помощью:
+
+    apt-get install lxd
+
+Пользователи Ubuntu 14.04 LTS также могут установить LXD с
использованием backports:
+
+    apt-get -t trusty-backports install lxd
+
+В качестве альтернативы, для получения последнего
upstream релиза доступен PPA:
+
+    add-apt-repository ppa:ubuntu-lxc/lxd-stable
+    apt-get update
+    apt-get dist-upgrade
+    apt-get install lxd
+
+Пакет создает новую группу "lxd" содержащую всех
пользователей, которым разрешено соединятся с  
+lxd через локальный unix socket. Все пользователи групп "admin"
и "sudoers" добавляются автоматически.  
+Если ваш пользователь не входит в одну из этих групп,
вам необходимо вручную добавить его в группу "lxd".
+
+Так как членство в группах фиксируется при входе, вам
необходимо закрыть  
+и переоткрыть вашу пользовательскую сессию или
использовать команду "newgrp lxd" в интерактивной
оболочке, в которой вы работаете с lxd.
+
+    newgrp lxd
+
+Затем, для начальной настройки демона LXD,
включающей, по вашему пожеланию, настройку
оптимизированного хранилища (ZFS),  
+а также для обеспечения видимости демона в сети и
настройки сети для контейнеров:
+
+    sudo lxd init
+
+## Ubuntu Core (snappy)
+LXD доступен для Ubuntu Core как пакет Snap в магазине.  
+Вы можете установить его с помощью:
+
+    sudo snappy install lxd.stgraber
+
+После этого, с LXD можно будет взаимодействовать с
помощью команды "lxc".
+
+Следует отметить, что генерация сертификата
сервера может занять долгое время, если вы работаете
с устройством вроде rpi2, так что может быть, что LXD
начнет отвечать на команду lxc только через несколько минут.
+
+## Другие дистрибутивы
+На данный момент существуют пакеты для множества
дистрибутивов, включая Gentoo и, конечно, Ubuntu.  
+Пользователи других дистрибутивов тоже могут
найти их в своем менеджере пакетов.
+
+Если их там нет, пожалуйста, загрузите и соберите LXD из
git или используя последний релизный tarball.
+
+Инструкции для обоих способов доступны [здесь](/lxd/downloads/).
+
+# Импорт различных образов
+LXD основан на образах. Контейнеры создаются из
образа, поэтому хранилище образов должно содержать
несколько образов перед основной работой с LXD.
+
+Есть несколько путей заполнить хранилище:
+
+ 1. Используя удаленный LXD как сервер образов
+ 2. Используя встроенные источники образов
+ 3. Вручную импортируя по одному
+
+        lxc image import <file> --alias <name>
+
+## Использование удаленного LXD как сервера образов
+Использование удаленного сервера образов также
просто, как его добавление и использование:
+
+    lxc remote add images 1.2.3.4
+    lxc launch images:image-name your-container
+
+Список образов может быть получен с:
+
+    lxc image list images:
+
+## Использование встроенных источников образов
+По умолчанию LXD поставляется с 3 удаленными
источниками, предоставляющими образы:
+
+ 1. ubuntu: (for stable Ubuntu images)
+ 2. ubuntu-daily: (for daily Ubuntu images)
+ 3. images: (for a bunch of other distros)
+
+Для запуска контейнера из них, просто:
+
+    lxc launch ubuntu:14.04 my-ubuntu
+    lxc launch ubuntu-daily:16.04 my-ubuntu-dev
+    lxc launch images:centos/6/amd64 my-centos
+
+## Ручной импорт образа
+Если у вас уже есть lxd-совместимый файл образа, вы
можете импортировать его:
+
+    lxc image import \<file\> --alias my-alias
+
+И запустить контейнер:
+
+    lxc launch my-alias my-container
+
+Смотрите [спецификации образов для подробной информации](https://github.com/lxc/lxd/blob/master/doc/image-handling.md).
+
+# Создание и использование вашего первого контейнера
+Предполагая, что вы импортировали образ Ubuntu cloud из
источника "ubuntu", можете создать контейнер:
+
+    lxc launch ubuntu first
+
+Это создаст и запустит новый контейнер ubuntu, что подтвердит:
+
+    lxc list
+
+Ваш контейнер здесь называется "first". Вы можете
предоставить LXD выбрать случайное имя  
+просто вызвав "lxc launch ubuntu" без имени.
+
+Сейчас ваш контейнер запущен, вы можете получить
интерактивный доступ внутрь:
+
+    lxc exec first -- /bin/bash
+
+Или вызвать команду напрямую:
+
+    lxc exec first -- apt-get update
+
+Для скачивания файла из контейнера, используйте:
+
+    lxc file pull first/etc/hosts .
+
+Для загрузки:
+
+    lxc file push hosts first/tmp/
+
+Для остановки, просто сделайте:
+
+    lxc stop first
+
+И для полного удаленияAnd to remove it entirely:
+
+    lxc delete first
+
+# Множество хостов
+Утилита командной строки "lxc" может связываться со
множеством серверов LXD.  
+По умолчанию она связана с локальным по локальному
UNIX socket.
+
+Удаленные операции требуют запуска двух команд на
удаленном сервере:
+
+    lxc config set core.https_address "[::]"
+    lxc config set core.trust_password some-password
+
+Первая указывает LXD слушать все адреса на порту 8443.  
+Вторая устанавливает надежный пароль для связи с сервером.
+
+Теперь для связи с удаленным LXD, вы можете просто
добавить его:
+
+    lxc remote add host-a <ip address or DNS>
+
+Это попросит вас подтвердить отпечаток удаленного
сервера а затем спросит пароль.
+
+И после этого, используйте те же команды, что и раньше,
но предваряя из именами контейнера и образа:
+
+    lxc exec host-a:first -- apt-get update
diff --git a/content/lxd/getting-started-openstack.ru.md b/content/lxd/getting-started-openstack.ru.md
new file mode 100644
index 0000000..ee508be
--- /dev/null
+++ b/content/lxd/getting-started-openstack.ru.md
 <at>  <at>  -0,0 +1,51  <at>  <at> 
+![Logo](/static/img/containers.png)
+
+# Установка и настройка Nova LXD
+
+Проект Nova LXD предоставляет драйвер Nova для управления
комплексной системой контейнеров с
использованием LXD как часть OpenStack cloud.
+
+## Ручная установка - Ubuntu server (Ubuntu 16.04)
+
+Nova LXD доступна в Ubuntu 16.04;  Драйвер Nova LXD устанавливается
только на сервера Nova Compute:
+
+    sudo apt-get install nova-lxd
+
+Пакет 'nova-lxd' проверяет, запущен ли демон nova-compute
+с корректным драйвером гипервизора LXD; тем не менее
пользователь 'nova' должен
+иметь членство в группе 'lxd' для доступа к контейнерам LXD:
+
+    sudo usermod -G lxd -a nova
+    sudo service nova-compute restart
+
+Для поддержки миграции контейнеров между хостами
Compute, LXD должен быть настроен на прием соединений из
сети, и установлен надежный пароль:
+
+    sudo lxc config set core.https_address [::]
+    sudo lxc config set core.trust_password some-password
+
+На каждом развернутом экземпляре Nova LXD должны быть
настроены удаленные подключения ко всем инстансам
Nova LXD:
+
+    sudo lxc remote add host-a <ip address or DNS of remote service>
+
+## Автоматическое развертывание с Juju
+
+Развертывание OpenStack это сложный процесс, для его
осуществления существует несколько утилит
развертывания; Juju предлагает удобный вариант
развертывания OpenStack на Ubuntu, а специальный [волшебный
пакет](https://jujucharms.com/u/openstack-charmers-next/openstack-lxd) может
быть использован для развертывания OpenStack cloud с LXD.
+
+Пакет автоматически настраивает хранилище для
корневых систем контейнеров с использованием LVM и
устанавливает подходящие настройки сети  
+надежные пароли и удаленные подключения для
поддержки миграции контейнеров между
гипервизорами LXD.
+
+## Образы LXD для OpenStack
+
+LXD не поддерживает использование формата образов
qcow2 KVM; LXD требуются образы на основе файловой системы
"raw".  
+Canonical публикует образы Ubuntu images в требуемом формате:
+
+    glance image-create --name="trusty" --public --progress \
+        --container-format=bare --disk-format=raw \
+        --copy-from http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-root.tar.gz
+
+## Создание контейнеров
+
+Контейнеры LXD управляются точно таким же способом,
как и контейнеры KVM - через Horizon или через Nova CLI:
+
+    nova boot --image=trusty --flavor=m1.tiny my-first-openstack-lxd-container
+
+Вам может понадобится присвоить временный IP адрес и
настроить необходимые политики безопасности в
зависимости от сети и настроек безопасности
используемого вами OpenStack cloud.
diff --git a/content/lxd/rest-api.ru.md b/content/lxd/rest-api.ru.md
new file mode 100644
index 0000000..27b4b8f
--- /dev/null
+++ b/content/lxd/rest-api.ru.md
 <at>  <at>  -0,0 +1,28  <at>  <at> 
+![Logo](/static/img/containers.png)
+
+# API LXD
+
+На данный момент LXD реализует только одну версию API,
обозначаемую как "1.0".
+
+Информация по API может быть найдена на:  
+[https://github.com/lxc/lxd/blob/master/doc/rest-api.md](https://github.com/lxc/lxd/blob/master/doc/rest-api.md)
+
+## Обратная совместимость
+
+Как только API отмечено как "стабильное", как в случае с
версией API 1.0, мы соглашаемся не вносить в него никаких
обратно несовместимых изменений.  
+Тем не менее, мы будем дополнять API, отмечая версии
идентификатором для удобства новых пользователей.
+
+Это значит, что новые пользователи смогут
отследить, поддерживает ли выбранный сервер нужную
возможность, и решить вопрос с ее использованием.
+
+## Клиенты
+
+Следующие клиенты разработаны проектом LXD.
+
+* Go [lxd.Client](https://github.com/lxc/lxd/blob/master/client.go)
+* Python [pylxd](https://github.com/lxc/pylxd)
+
+Эти клиенты были добавлены третьими сторонами.  Они
+никогда не поддерживались и не продвигались
проектом LXD project.
+
+* Ruby: [Hyperkit](http://jeffshantz.github.io/hyperkit)
+* Node.js: [node-lxd](http://github.com/alandoherty/node-lxd)
diff --git a/manpages/lxc/ru/.placeholder b/manpages/lxc/ru/.placeholder
new file mode 100644
index 0000000..e69de29
diff --git a/output/ru/lxc/apidoc/.placeholder b/output/ru/lxc/apidoc/.placeholder
new file mode 100644
index 0000000..e69de29
diff --git a/templates/common/download-headers.ru.tpl.html b/templates/common/download-headers.ru.tpl.html
new file mode 100644
index 0000000..efc730d
--- /dev/null
+++ b/templates/common/download-headers.ru.tpl.html
 <at>  <at>  -0,0 +1,7  <at>  <at> 
+<thead>
+    <tr>
+        <th>Имя файла</th>
+        <th>Сигнатура GPG</th>
+        <th>Размер</th>
+    </tr>
+</thead>
diff --git a/templates/common/footer.ru.tpl.html b/templates/common/footer.ru.tpl.html
new file mode 100644
index 0000000..bb500a8
--- /dev/null
+++ b/templates/common/footer.ru.tpl.html
 <at>  <at>  -0,0 +1,9  <at>  <at> 
+<hr class="footer"/>
+<footer>
+    <p class="pull-left"><a href="https://github.com/lxc/linuxcontainers.org">Улучшить
этот вебсайт</a></p>
+    <p class="pull-right"><a href="#">Наверх</a></p>
+    <p class="text-center">
+        <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">Содержимое
распространяется по лицензии Creative Commons CC BY NC SA</a><br />
+        <span class="small">Проект спонсируется <a
href="http://www.canonical.com">Canonical Ltd.</a></span>
+    </p>
+</footer>
_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel
ctrlrsf on Github | 25 May 06:12 2016

[lxd/master] Add config key for container force shutdown timeout

Attachment: text/x-mailbox, 1366 bytes
From c986ce4b69197214faf776808a9affdd611577b9 Mon Sep 17 00:00:00 2001
From: Rene Fragoso <ctrlrsf <at> gmail.com>
Date: Tue, 24 May 2016 23:48:09 -0400
Subject: [PATCH] Add config key for container force shutdown timeout

Currently if a container takes more than 30 seconds to shutdown, it is stopped
anyway. The 30 second timeout is hardcoded and this change makes the
timeout configurable.

This boot.force_shutdown_timeout container config key sets how long to wait
(in seconds) for a container to shutdown before it is force stopped.

This addresses issue https://github.com/lxc/lxd/issues/2027

Signed-off-by: Rene Fragoso <ctrlrsf <at> gmail.com>
---
 config/bash/lxd-client |  4 ++--
 doc/configuration.md   |  1 +
 lxd/container.go       |  2 ++
 lxd/containers.go      | 11 ++++++++++-
 test/suites/basic.sh   |  7 +++++++
 5 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/config/bash/lxd-client b/config/bash/lxd-client
index ac14dea..1482730 100644
--- a/config/bash/lxd-client
+++ b/config/bash/lxd-client
 <at>  <at>  -47,8 +47,8  <at>  <at>  _have lxc && {
       images.auto_update_cached"

     container_keys="boot.autostart boot.autostart.delay boot.autostart.priority \
-      limits.cpu limits.cpu.allowance limits.cpu.priority limits.disk.priority \
-      limits.memory limits.memory.enforce limits.memory.swap \
+      boot.force_shutdown_timeout limits.cpu limits.cpu.allowance limits.cpu.priority \
+      limits.disk.priority limits.memory limits.memory.enforce limits.memory.swap \
       limits.memory.swap.priority limits.network.priority limits.processes \
       linux.kernel_modules raw.apparmor raw.lxc security.nesting \
       security.privileged volatile.apply_template volatile.base_image \
diff --git a/doc/configuration.md b/doc/configuration.md
index 9c94db7..079656f 100644
--- a/doc/configuration.md
+++ b/doc/configuration.md
 <at>  <at>  -69,6 +69,7  <at>  <at>  Key                         | Type      | Default       | Live update   | Descri
 boot.autostart              | boolean   | false         | n/a           | Always start the container when LXD starts
 boot.autostart.delay        | integer   | 0             | n/a           | Number of seconds to wait after the container started before
starting the next one
 boot.autostart.priority     | integer   | 0             | n/a           | What order to start the containers in (starting with highest)
+boot.force_shutdown_timeout | integer   | 30            | yes           | Seconds to wait for container to shutdown before it is
force stopped
 environment.\*              | string    | -             | yes (exec)    | key/value environment variables to export to the container and
set on exec
 limits.cpu                  | string    | - (all)       | yes           | Number or range of CPUs to expose to the container
 limits.cpu.allowance        | string    | 100%          | yes           | How much of the CPU can be used. Can be a percentage (e.g. 50%) for
a soft limit or hard a chunk of time (25ms/100ms)
diff --git a/lxd/container.go b/lxd/container.go
index 9c196ca..bc6df58 100644
--- a/lxd/container.go
+++ b/lxd/container.go
 <at>  <at>  -83,6 +83,8  <at>  <at>  func containerValidConfigKey(key string, value string) error {
 		return isInt64(key, value)
 	case "boot.autostart.priority":
 		return isInt64(key, value)
+	case "boot.force_shutdown_timeout":
+		return isInt64(key, value)
 	case "limits.cpu":
 		return nil
 	case "limits.cpu.allowance":
diff --git a/lxd/containers.go b/lxd/containers.go
index 16707ef..6152c14 100644
--- a/lxd/containers.go
+++ b/lxd/containers.go
 <at>  <at>  -152,10 +152,19  <at>  <at>  func containersShutdown(d *Daemon) error {
 			return err
 		}

+		var timeoutSeconds int
+
+		value, ok := c.ExpandedConfig()["boot.force_shutdown_timeout"]
+		if ok {
+			timeoutSeconds, _ = strconv.Atoi(value)
+		} else {
+			timeoutSeconds = 30
+		}
+
 		if c.IsRunning() {
 			wg.Add(1)
 			go func() {
-				c.Shutdown(time.Second * 30)
+				c.Shutdown(time.Second * time.Duration(timeoutSeconds))
 				c.Stop(false)
 				wg.Done()
 			}()
diff --git a/test/suites/basic.sh b/test/suites/basic.sh
index b2f3eef..33b79c1 100644
--- a/test/suites/basic.sh
+++ b/test/suites/basic.sh
 <at>  <at>  -258,6 +258,13  <at>  <at>  test_basic_usage() {
   lxc delete foo2
   lxc profile delete unconfined

+  # Test boot.force_shutdown_timeout config setting
+  lxc init testimage configtest --config boot.force_shutdown_timeout=45
+  [ "$(lxc config get configtest boot.force_shutdown_timeout)" -eq 45 ]
+  lxc config set configtest boot.force_shutdown_timeout 15
+  [ "$(lxc config get configtest boot.force_shutdown_timeout)" -eq 15 ]
+  lxc delete configtest
+
   # Ephemeral
   lxc launch testimage foo -e

_______________________________________________
lxc-devel mailing list
lxc-devel <at> lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Gmane