2015-04-02 1 views
1

Я изучаю Кукольный и самое большое разочарование, которое у меня есть со всей парадигмой, это процесс разработки try/run/fix, который я использую для создания функционального кода Puppet. Мой опыт в Java, и я, естественно, использую для отладки моего кода, чтобы найти ошибки вместо того, чтобы просто запускать программу, чтобы увидеть, где она бомбит, делая разработку намного быстрее, но я не могу найти способ сделать это, используя Puppet и Eclipse , Я знаю, что писать отладчик для Puppet потребует определенного творчества, учитывая его природу, но я думаю, что это то, что сообщество действительно может извлечь из этого.Почему я не могу отлаживать свой марионеточный код?

Я написал отладчики и знаю SDK Eclipse, но, к сожалению, он не однозначно отображает архитектуру Puppet, которая немного неудобна в том смысле, что ее стек выполнения и поток выполнения не происходят в натуральном порядке, а также факт среда выполнения требует, чтобы целевая машина применяла изменения.

Мне любопытно, если сообщество выполнило какую-либо работу по разработке, пытаясь создать какой-то отладчик, где код может быть сделан. Чтобы написать это, я думаю, что было бы разумно расширить Eclipse с новым типом конфигурации отладки Puppet, где вы укажете хост целевой песочницы, чтобы протестировать свой код, а также марионетный проект в вашей рабочей области, которую вы хотите отлаживать (используя существующие инструменты Gepetto). Затем, когда вы начинаете новый сеанс отладки Puppet, Eclipse может подключаться к удаленному хосту, выполнять марионетку с некоторыми дополнительными аргументами отладки и каким-то образом предоставлять обратную связь от среды выполнения о том, какая строка кода выполняется в настоящий момент.

Это все еще может быть неудобно, но позволит марионеткам быстро увидеть такие вещи, как ох ... Я не могу создать этот каталог, потому что родительский путь не существует, подождите ... почему это утверждение if не происходит здесь как я и планировал, о, я вижу здесь, что Кукольный не очень ясен в одиночных или двойных кавычках, или теперь я вижу, почему это не удается, потому что этот класс не был выполнен первым и т. д. и т. д.

Вместо этого мы получаем большой уродливый результат на консоли агента, который да может дать нам представление об ошибках, но не дает чистому отображению исключений для нашего кода, который на мой взгляд показывает основную боль и слабость Puppet, можете ли вы хотя бы дать мне трассировку стека и номер строки, чтобы я знал, где смотреть? Прошу прощения, но нет.

Не поймите меня неправильно, мне нравится, как Puppet может заставить меня выглядеть очень продуктивно на протяжении всей рабочей недели, когда все, что я делаю, - это запуск Puppet на новых машинах, которые мой менеджер еще не понял, но я думаю, что Куклу действительно полезно, что отсутствие поддержки отладки - это то, что нужно решить.

Кто-нибудь еще чувствует эту боль? - Duncan Krebs

ответ

1

Невозможно «пропустить» марионеточный код, если вы не хотите отлаживать себя от самой рубиновой кодовой базы. Дело не только в том, что порядок «исполнения» неясен, а сам манифест никогда не выполняется за один раз. Они фактически оцениваются на разных этапах выполнения.

Есть способы упростить поиск проблем. Самый большой - это запись модульных тестов с использованием rspec-puppet. Это позволяет вам в основном проверить фазу компиляции марионетки, помогая вам ловить ошибки, такие как круговые зависимости, некорректная условная логика и т. Д.

1

Существует новый инструмент, называемый кукольным отладчиком, который позволяет вам установить точки останова в вашем марионеточном коде в чтобы пройти через него. Таким образом, это уже не «невозможно», поскольку оно доступно в течение примерно 8 месяцев.

Вам сначала нужно установить марионеточный-отладчик Gem https://github.com/nwops/puppet-debugger

Затем установите модуль отладки, включите его в ваших светильниках или просто убедитесь, что он находится на своем пути модуля.

https://forge.puppet.com/nwops/debug

Тогда просто установить точку останова в коде с помощью функции отладки :: Break().

Ruby Version: 2.0.0 
Puppet Version: 4.9.4 
Puppet Debugger Version: 0.6.0 
Created by: NWOps 
Type "exit", "functions", "vars", "krt", "whereami", "facts", "resources", "classes", 
    "play", "classification", "types", "datatypes", "reset", or "help" for more information. 

>> $vars = ['one', 'two', 'three'] 
=> [ 
    [0] "one", 
    [1] "two", 
    [2] "three" 
] 
>> $vars.each | String $var | { 
    debug::break() 
    notify{$var:} 
} 
From file: puppet_debugger_input20170417-97123-qjwbaj.pp 
     1: $vars.each | String $var | { 
     => 2: debug::break() 
     3: notify{$var:} 
     4: } 
1:>> $var 
=> "one" 
2:>> exit 
From file: puppet_debugger_input20170417-97123-qjwbaj.pp 
     1: $vars.each | String $var | { 
     => 2: debug::break() 
     3: notify{$var:} 
     4: } 
1:>> $var 
=> "two" 
2:>> exit 
From file: puppet_debugger_input20170417-97123-qjwbaj.pp 
     1: $vars.each | String $var | { 
     => 2: debug::break() 
     3: notify{$var:} 
     4: } 
1:>> $var 
=> "three" 
+0

Спасибо, звучит как его стоит проверить! –

 Смежные вопросы

  • Нет связанных вопросов^_^