Комментарии 24
так много вопросов и мало ответов.
Ну коммон. https://www.freedesktop.org/software/systemd/man/systemd.unit.html
"%i" | Instance name | For instantiated units this is the string between the first "@" character and the type suffix. Empty for non-instantiated units.
Да, у нас такое же сегодня вылезло - сам с этим не разбирался
wireguard? Быстрый, легкий, клиенты под все платформы
Будьте добры, поясните про вайргард. Вот я купил VPN, поставил wireguard на комп, настроил конфиг как описано на сайте провайдера VPN, а что дальше делать чтобы трафик шел через него (весь) не понятно. ОС — linux mint.
Спасибо!
впрочем вот:
wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh
Добавили свой push route "151.101.37.183 255.255.255.255"
Ну такое, я бы добавил всю их подсеть. Потом этот ip уедет куда-нибудь на другой поддомен и будете опять искать почему не работает
У кого какие идеи решения проблемы с terraform
Можно просто прокси поднять и ходить на условный releases.mydomain.ru/terraform
В данном случае и http-proxy хватит обычного.
Вы не могли скачать дистрибутивы или terraform при своей работе зачем-то стучится к hashicorp?
Простой пример:
Скачали дистрибутив(пакет) python, он работает. Если работали с python у него есть библиотеки разные. Это все равно, что выкачать все python библиотеки.
Так вот, у нас в jenkins ( Gitlab, который хранит на ранерах это кэш) использует терраформ в контейнере, который после использования захлопывается. Кэша нету, отсюда проблема.
Он стучится в хашикорп при init, если отсутствует каталог с провами.
Ну а так, относительно терраформа доступ закрыт для:
https://discuss.hashicorp.com/t/access-to-releases-hashicorp-com-is-denied/36348
We’re sorry, but because of the conflict underway in Ukraine, HashiCorp is prohibiting availability of our products and services in Russia and Belarus.
В случае, если VPN/proxy по каким-нибудь причинам нельзя, можно настроить provider mirror:
https://www.terraform.io/internals/provider-network-mirror-protocol
При этом в jenkins можно в образ пропихнуть ~/.terraformrc
Express42 (вслед за Яндекс [https://hashicorp-releases.website.yandexcloud.net/]) сделали такое зеркало:
https://hc-mirror.express42.net/
, но для providers оно не подходит.
Набросал "на коленке" небольшой прокси, чтобы подходило:
https://github.com/s-starostin/hashicorp-proxy
Вариант .terraformrc:
provider_installation {
network_mirror {
url = "https://registry/providers/"
include = ["registry.terraform.io/hashicorp/*"]
}
direct {
exclude = ["registry.terraform.io/hashicorp/*"]
}
}
Есть ли у кого-нибудь пример использования https://hashicorp-releases.website.yandexcloud.net или https://hc-mirror.express42.net/ ?
У меня выдает ошибки.
terraform {
required_providers {
template = {
source = "hashicorp-releases.website.yandexcloud.net/hashicorp/template"
version = "2.2.0"
}
local = {
source = "hc-mirror.express42.net/hashicorp/local"
version = "2.2.2"
}
}
}
Ошибки
╷
│ Error: Invalid provider registry host
│
│ The host "hashicorp-releases.website.yandexcloud.net" given in in provider source address
│ "hashicorp-releases.website.yandexcloud.net/hashicorp/template" does not offer a Terraform provider registry.
╵
╷
│ Error: Invalid provider registry host
│
│ The host "hc-mirror.express42.net" given in in provider source address "hc-mirror.express42.net/hashicorp/local" does not offer a Terraform
│ provider registry.
либо
provider_installation {
network_mirror {
url = "https://hc-mirror.express42.net" # или hashicorp-releases.website.yandexcloud.net
include = ["registry.terraform.io/hashicorp/*"]
}
direct {
exclude = ["registry.terraform.io/hashicorp/*"]
}
}
выдают ошибку
405 Method Not Allowed
Всё так, ведь у этих зеркал не реализован network mirror protocol.
https://www.terraform.io/internals/provider-network-mirror-protocol
(особенно вот сюда обратите внимание:
https://www.terraform.io/internals/provider-network-mirror-protocol#list-available-versions
https://www.terraform.io/internals/provider-network-mirror-protocol#list-available-installation-packages)
Можно сделать, например, так (вариант не самый лучший):
Нужно убедиться, что установлен python3 (у меня 3.6.9)
git clone https://github.com/s-starostin/hashicorp-network-mirror
cd hashicorp-network-mirror && mkdir files
touch download.sh
В download.sh:
#!/usr/bin/env bash
source_host="https://hc-mirror.express42.net/"
tmp_dir="./"
hashicorp_network_mirror_config_file="./config.yaml"
fileserver_mirror_dir="files"
set -o pipefail
mkdir -p "$tmp_dir"
truncate -s0 "$tmp_dir/wgetlog.txt"
wget -P "$tmp_dir" --spider --recursive --no-verbose "$source_host" >"$tmp_dir/wgetlog.txt" 2>&1 || { [ $? -ne 0 ] && [ $? -ne 8 ] && echo "Success" || exit 1; }
echo "Filtering resource links..."
sed -n 's|^.\+ URL:[ ]*http[s]*:\/\/[^\/]\+\/\([^ ]\+\) .\+|\1|p' "$tmp_dir/wgetlog.txt" | sed 's|&|\&|' | grep -P '(?<!\/|robots\.txt)$' > "$tmp_dir/temp.txt"
truncate -s0 "$tmp_dir/results.txt"
for i in $(sed -n "s|^\([^\/]\+\)\/\([^\/]\+\).\+|\1\|\2|p" "$tmp_dir/temp.txt" | uniq | sort -Vr)
do
IFS='|' read -r -a a <<< "$i"
grep --color=never "${a[0]}/${a[1]}" "$tmp_dir/temp.txt" >> "$tmp_dir/results.txt"
done
rm "$tmp_dir/temp.txt"
for match in $(sed -n 's|^\s\+\([^:]\+\):\s\(.\+\)|\2|p' "$hashicorp_network_mirror_config_file")
do
for arch in $(grep --color=never $match "$tmp_dir/results.txt")
do
echo $arch
wget -q -x -P $fileserver_mirror_dir $source_host$arch || { [ $? -ne 0 ] && [ $? -ne 8 ] && echo "Success" || exit 1; }
done
done
exit 0
Загружаем официальные провайдеры в директорию files (процесс идёт около двух часов для списка провайдеров из config.yaml):
chmod +x download.sh && ./download.shВыпускаем сертификаты, например, с помощью setup-ssl-certificates.sh (или ставим свои, или настраиваем ssl termination)
В config.yaml:
путь к сертификату ssl_server_cert
путь к ключу ssl_server_cert_key
изменить directory на files/hc-mirror.express42.netchmod +x fileserver.py
Запускаем сервер:
sudo ./fileserver.py (или systemd unit, или иначе)
---
Работа:
Убедимся, что fileserver работает по https (см. требования по terraform)
curl https://<registry>/
...
<h1>Directory listing for /</h1>
<hr>
<ul>
<li><a href="terraform-provider-ad/">terraform-provider-ad/</a></li>
<li><a href="terraform-provider-archive/">terraform-provider-archive/</a></li>
<li><a href="terraform-provider-aws/">terraform-provider-aws/</a></li>
...
Убедимся, что отрабатывает листинг версий для провайдеров (см. маппинг в config.yaml)
curl https://<registry>/providers/registry.terraform.io/hashicorp/ad/index.json
{"versions": {"0.4.2": {}, "0.4.0": {}, "0.4.1": {}, "0.1.0": {}, "0.3.0": {}, "0.2.0": {}, "0.4.3": {}}}
В ~/.terraformrc
provider_installation {
network_mirror {
url = "https://<registry>/providers/"
include = ["registry.terraform.io/hashicorp/*"]
}
direct {
exclude = ["registry.terraform.io/hashicorp/*"]
}
}
terraform init, plan, apply...
Terraform error 405 Not allowed. Спасает ВПН