У вас есть две проблемы:
Я догадался, что вам нужен документ YAML типа 'DaemonSet' из прочтения ответа Грегори Нисбетта.
Я постараюсь использовать только те инструменты, которые, вероятно, уже установлены в вашей системе, потому что вы упомянули, что хотите сделать это в скрипте Bash. Я предполагаю, что у вас есть JQ, потому что без него очень сложно сделать в Bash!
Для библиотеки YAML я склонен использовать Ruby для этого, потому что:
предложил использовать yq , но это не очень поможет в этом случае, потому что вам все еще нужен инструмент, который может извлечь документ YAML.
После извлечения документа я собираюсь снова использовать Ruby для сохранения файла в формате JSON. Тогда мы можем использовать JQ.
Извлечение документа YAML
Чтобы получить документ YAML с использованием Ruby и сохранить его как JSON:
url=...
curl -s $url | \
ruby -ryaml -rjson -e \
"puts YAML.load_stream(ARGF.read)
.select{|doc| doc['kind']=='DaemonSet'}[0].to_json" \
| jq . > calico.json
Дальнейшее объяснение:
Я передаю этот ответ через jq .
, чтобы он был отформатирован для удобства чтения, но этот шаг не является действительно необходимым. Я мог бы сделать то же самое в Ruby, но я предполагаю, что вы хотите, чтобы код Ruby был минимальным.
Выбор нужной клавиши
Чтобы выбрать нужную клавишу, можно использовать следующий JQ-запрос:
jq -r \
'.spec.template.spec.containers[].env[] | select(.name=="CALICO_IPV4POOL_CIDR") | .value' \
calico.json
Дальнейшее объяснение:
[ 1140]
spec.template.spec.containers[].env[]
выполняет итерации для всех контейнеров и для всех envs внутри них Собирая все вместе:
#!/usr/bin/env bash
url='https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml'
curl -s $url | \
ruby -ryaml -rjson -e \
"puts YAML.load_stream(ARGF.read)
.select{|doc| doc['kind']=='DaemonSet'}[0].to_json" \
| jq . > calico.json
jq -r \
'.spec.template.spec.containers[].env[] | select(.name=="CALICO_IPV4POOL_CIDR") | .value' \
calico.json
Тестирование:
▶ bash test.sh
192.168.0.0/16
Ну, в UNSW есть проект по переводу ядра GHC на LLVM
Помните: 10 лет назад не было ясно, что LLVM создаст всю инфраструктуру C-- не в состоянии. К сожалению, LLVM имеет инфраструктуру для переносимого, оптимизированного кода, но не инфраструктуру для хорошей поддержки языка высокого уровня, что C-- ha (s) г.
Интересным проектом было бы нацеливание на LLVM из C-- ...
Обновление , начиная с GHC 7, GHC использует LLVM для генерации кода . Используйте флаг -fllvm
. Это улучшило числовую производительность для некоторых программ низкого уровня. В остальном производительность аналогична старой версии GCC.
GHC теперь официально имеет бэкэнд LLVM, и оказывается, что он конкурентоспособен с GCC и native-codegen и фактически быстрее в некоторых случаях. И проект LLVM принял новое соглашение о вызовах Дэвид Терей, созданное для Haskell на LLVM, так что удивительно, что два проекта сейчас фактически работают вместе.