Полезные curl для Digital Ocean API
Полезные curl для Digital Ocean API
При автоматизации инфраструктуры под Terraform понадобилось найти id SSH ключей и типы дроплетов чтобы их было возможно использовать в конфигурации. Делюсь примерами curl запросов к Digital Ocean API (статья будет дополняться со временем).
- Вывод SSH id keys, привязанных к аккаунту:
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/account/keys" | jq
- Вывод всех типов дроплетов:
curl -X GET "https://api.digitalocean.com/v2/images?per_page=999" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" | jq
Поскольку вывод получается слишком большим можно воспользоваться сохранением ответа в файл:
GitHub API — пара полезных curl примеров
GitHub API — пара полезных curl примеров
Список команд в организации:
curl GET --url 'https://api.github.com/orgs/<organization-name>/teams?access_token=<TOKEN>’
Работа с GitHub Status API, установка badge для Pull Request:
curl -d '{"state": "success","target_url": "https://example.com/build/status","description": "The build succeeded!","context": "continuous-integration/jenkins"}' -H "Content-Type: application/json" -X POST "https://api.github.com/repos/<organization-name>/<project-name>/statuses/<sha-of-the-commit>?access_token=<github-token>”
Данный сниппет может быть использован для установки badges на определенном pull request.
При возникновении новых интересных запросов данный пост будет пополняться.
Установка Kubernetes nginx controller на bare metal
Установка Kubernetes nginx controller на bare metal
Подробная инструкция как установить nginx ingress controller на чистый bare metal кластер:
https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal
Или по шагам:
- Устанавливаем ingress-nginx service с type NodePort:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
Проверим, что установка завершена успешно:
kubectl get services -n ingress-nginx
Видим:
ingress-nginx ingress-nginx NodePort 10.245.213.134 <none> 80:31462/TCP,443:30310/TCP 2s
Поздравляем! Nginx контроллер успешно установлен, теперь можем сделать curl до машины с 31462 портом и получим ответ nginx:
Получение данных Jira тикета по Atlassian API
Получение данных Jira тикета по Atlassian API
Для получения данных по Jira тикету достаточно воспользоваться Atlassian REST API
curl -D- \ -X GET \ -H "Authorization: Basic <base64 encoded stuff>“ \ -H "Content-Type: application/json" \ "https://yourcompany.atlassian.net/rest/api/2/issue/TICKET-NUMBER"
В качестве токена авторизации можно (но не рекомендуется) воспользоваться base64 представлением вашего пароля:
echo -n '[email protected]:your-password' | openssl base64
Шаблон Golang table testing
Шаблон Golang table testing
Допустим у нас имеется некая функция:
NormalizeEndpoint(endpointBefore string) string
Подготовим тесты на эту функцию:
func TestNormalizeEndpoints(t *testing.T) {
type runnerTest struct {
name string
endpointBefore string
endpointAfter string
}
var tests = []runnerTest{
{"Test 1", "https://case1.com", "case1"},
{"Test 2", "https://case2.com", "case2"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.endpointAfter, NormalizeEndpoint(tt.endpointBefore))
})
}
}
При помощи нехитрой конструкции можно написать неплохие table тесты, которые легко обновлять и добавлять новые кейсы.
Golang — Squirrel SQL Query Generator
Golang — Squirrel SQL Query Generator
Пример удобной библиотеки для генерации SQL кода в Golang. Нет необходимости писать большие и сложные sprintf и делать экранирование вручную. Просто воспользуемся удобными синтаксисом библиотеки squirrel.
Для начала:
import "github.com/Masterminds/squirrel"
Теперь допустим нам нужно добавить новую запись в нашу postgres табличку.
Для начала важно указать корректный placholder формат, без этого Postgres будет выдавать ошибку на сгенерированный SQL:
Скрипт корректировки курсов Bestchange
Скрипт корректировки курсов Bestchange
Разработан и выведен в отдельно существующий компонент специальный скрипт для автокорректировки курсов для агрегатора bestchange. Данный продукт просто необходим для обменных пунктов, которые работают через bestchange.ru и которые хотят быть постоянно в топе по определенным направлениям.
Какие параметры можно регулировать?
- Установка минимального-максимального курса.
- Использование коррекции при установке курса +/-.
- Установка курса в зависимости от резервов конкурента.
- Задание интервал обновления курсов.
- Установка «рабочих часов» для корректировки.
Данный модуль может поставляться как компонент внутри обменного пункта через специальное внутреннее API либо как отдельно стоящий сервис в вашей сети либо через облачное решение. Для внедрения в действующий обменный пункт достаточно настроить сам модуль и добавить специальный адрес для получения сигналов от модуля.
Получить реальный IP адрес клиента с Cloudflare в PHP
Получить реальный IP адрес клиента с Cloudflare в PHP
При использовании сервиса Cloudflare стоит вопрос получения реального IP адреса клиента. Специально для этого Cloudflare отдает заголовок HTTP_CF_CONNECTING_IP.
Нам достаточно его забрать в любом виде (через библиотеку желательно, а не через суперглобальную переменную т.к суперглобальные переменные в PHP это всегда зло):
$ipAddress = $_SERVER['HTTP_CF_CONNECTING_IP']; echo $ipAddress;
PHP скрипт загрузки папки с файлами на S3 bucket
PHP скрипт загрузки папки с файлами на S3 bucket
Очень простой и эффективный метод отправить все необходимые файлы с выбранной папки на ваш S3.
Устанавливаем aws-sdk-php:
composer require "aws/aws-sdk-php"
Готовим скрипт:
#!/usr/bin/env php
<?php
use Aws\S3\S3Client;
require __DIR__.'/vendor/autoload.php';
if ($_SERVER['argc']<2){
print 'Expected dir as parameter: run.php /dir/to/sync'.PHP_EOL;
exit(1);
}
$dir = $_SERVER['argv'][1];
$s3Client = new S3Client([
'version' => 'latest',
'region' => '',
'endpoint' => '',
'credentials' => [
'key' => '',
'secret' => '',
],
]);
$s3Client->uploadDirectory($dir,'bucket/folder');
Очень просто запускаем:
Production ready Dockerfile для Go приложения
Production ready Dockerfile для Go приложения
Ничего лишнего, только пример хорошего Dockerfile для Go приложения при помощи multi-stage build:
FROM golang:1-alpine AS builder RUN mkdir /app WORKDIR /app # be sure that you have .dockerignore in your directory COPY . ./ # maybe you don't need it? depends on what you have on your Makefile: RUN apk add --update bash make git RUN make # --- FROM alpine COPY --from=builder /reporter/out/mobproxy-report / RUN apk add --no-cache ca-certificates ENTRYPOINT ["/app"] # keep it if needed: CMD ["/app", "version"]
В следующем сниппете покажу пример Makefile для production ready Golang приложения.