Если это - первый раз, когда Вы загрузили свое окружение, оно возьмет несколько (в зависимости от того, сколько времени оно берет для загрузки приблизительно 400 МБ Данных изображения Сервера) создавать первое основное изображение. В Вашем пути "dir данных" (определенный в Вашем environments.yaml файле) существует machine-agent.log
, который описывает этот процесс:
2012-05-09 10:04:03,848: juju.agents.machine@INFO: Machine agent started id:0
2012-05-09 10:05:08,175: juju.agents.machine@DEBUG: Units changed old:set([]) new:set(['mysql/0'])
2012-05-09 10:05:08,176: juju.agents.machine@DEBUG: Starting service unit: mysql/0 ...
2012-05-09 10:05:08,222: unit.deploy@DEBUG: Downloading charm cs:precise/mysql-1 to /home/marco/.juju/local/marco-local/charms
2012-05-09 10:05:08,314: unit.deploy@DEBUG: Using <juju.machine.unit.UnitContainerDeployment object at 0x9cccbec> for mysql/0 in /home/marco/.juju/local/marco-local
2012-05-09 10:05:08,375: unit.deploy@DEBUG: Starting service unit mysql/0...
2012-05-09 10:05:08,376: unit.deploy@DEBUG: Creating master container...
Несколько моментов спустя Вы будете видеть следующее:
2012-05-09 10:09:40,699: unit.deploy@DEBUG: Created master container marco-local-0-template
2012-05-09 10:09:40,699: unit.deploy@INFO: Creating container mysql-0...
2012-05-09 10:10:31,429: unit.deploy@INFO: Container created for mysql/0
2012-05-09 10:10:31,483: unit.deploy@DEBUG: Charm extracted into container
, Который детализирует это несколько минут спустя, основной контейнер был создан.
Наконец, не каждый "локальный" boostrap работы, попытка работать juju destroy-environment
и затем повторно выполняются juju bootstrap
Я использую некоторый код в своих модульных тестах, чтобы убедиться, что определенные действия украшены атрибутами. Он использует отражение с некоторыми достоинствами перечислимого метода расширения. Я думаю, вы могли бы это приспособить. Обратите внимание: если вас интересует только то, существует он или нет, вы можете использовать Count () в перечислении, а не получать фактический атрибут. Таким образом, вы получаете некоторую гибкость в использовании свойств атрибута для настройки поведения. Использование дерева наследования позволит вам украсить весь контроллер.
var methods= controller.GetType()
.GetMethods( BindingFlags.Public | BindingFlags.Instance )
foreach (var info in methods)
{
if (info.ReturnType == typeof(ActionResult))
{
var attribute = info.GetCustomAttributes( typeof( SiteMapAttribute ), true )
.Cast<SiteMapAttribute>()
.FirstOrDefault();
if (attribute != null && !attribute.Exclude.Contains( info.Name ))
{
...
}
}
}