Skip to content

Commit 58e23b1

Browse files
author
anton.voskresensky
committed
Initial commit
0 parents  commit 58e23b1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+6859
-0
lines changed

.github/workflows/docker.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Docker Image
2+
3+
on:
4+
push:
5+
tags:
6+
- '**'
7+
8+
jobs:
9+
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Docker meta
17+
id: meta
18+
uses: docker/metadata-action@v5
19+
with:
20+
images: ghcr.io/${{ github.repository }}
21+
tags: |
22+
type=schedule
23+
type=ref,event=branch
24+
type=ref,event=pr
25+
type=semver,pattern={{version}}
26+
type=semver,pattern={{major}}.{{minor}}
27+
type=semver,pattern={{major}}
28+
type=sha
29+
30+
- name: Set up Docker Buildx
31+
id: buildx
32+
uses: docker/setup-buildx-action@v3
33+
34+
- name: Login to Github Packages
35+
uses: docker/login-action@v3
36+
with:
37+
registry: ghcr.io
38+
username: ${{ github.repository_owner }}
39+
password: ${{ secrets.GITHUB_TOKEN }}
40+
41+
- name: Set build date
42+
run: echo "BUILD_DATE=$(date +%Y%m%d%H%M)" >> $GITHUB_ENV
43+
44+
- name: Build and push
45+
uses: docker/build-push-action@v5
46+
with:
47+
context: .
48+
build-args: |
49+
versionflags=-X 'github.com/flant/osctl/pkg/util.Version=${{ github.ref_name }}' -X 'github.com/flant/osctl/pkg/util.Revision=${{ github.sha }}' -X 'github.com/flant/osctl/pkg/util.Branch=${{ github.ref_name }}' -X 'github.com/flant/osctl/pkg/util.BuildUser=${{ github.actor }}' -X 'github.com/flant/osctl/pkg/util.BuildDate=${{ env.BUILD_DATE }}'
50+
push: ${{ github.event_name != 'pull_request' }}
51+
tags: ${{ steps.meta.outputs.tags }}
52+
labels: ${{ steps.meta.outputs.labels }}

.github/workflows/go.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Go
2+
3+
on:
4+
push:
5+
tags:
6+
- '**'
7+
8+
jobs:
9+
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Set up Go
17+
uses: actions/setup-go@v5
18+
with:
19+
go-version: 1.25
20+
21+
- name: Build
22+
run: |
23+
versionflags="-X 'github.com/flant/osctl/pkg/util.Version=$GITHUB_REF_NAME' -X 'github.com/flant/osctl/pkg/util.Revision=$GITHUB_SHA' -X 'github.com/flant/osctl/pkg/util.Branch=$GITHUB_REF_NAME' -X 'github.com/flant/osctl/pkg/util.BuildUser=$GITHUB_ACTOR' -X 'github.com/flant/osctl/pkg/util.BuildDate=$(date +%Y%m%d%H%M)'"
24+
for GOOS in linux; do
25+
for GOARCH in amd64 arm64; do
26+
export GOOS GOARCH
27+
CGO_ENABLED=0 go build -v -a -tags netgo -ldflags="-extldflags '-static' -s -w $versionflags" -o build/osctl-${GOOS}-${GOARCH} cmd/main.go
28+
done
29+
done
30+
cd build; sha256sum * > sha256sums.txt
31+
32+
- name: Release
33+
uses: softprops/action-gh-release@v1
34+
with:
35+
generate_release_notes: true
36+
token: ${{ secrets.GITHUB_TOKEN }}
37+
files: |
38+
build/*

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
build/
2+
main
3+
osctl
4+
5+
# Test certificates
6+
test-certs/

ARCHITECTURE.md

Lines changed: 427 additions & 0 deletions
Large diffs are not rendered by default.

DEVELOPMENT.md

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
# Как вносить изменения и вариант тестирования
2+
3+
## Процесс разработки
4+
5+
### 1. Создание новой ветки
6+
7+
Создайте новую ветку для ваших изменений:
8+
9+
```bash
10+
git checkout -b flant/TASKID-your-feature-name
11+
```
12+
13+
### 2. Внесение изменений в код
14+
15+
При добавлении нового функционала следуйте следующим правилам:
16+
17+
#### 2.1. Добавление новых флагов
18+
19+
Если вы добавляете новый флаг или переменную окружения:
20+
21+
1. **Описание флага** в `ENVIRONMENT_VARIABLES_AND_FLAGS.md`:
22+
- Добавьте флаг в соответствующую секцию команды
23+
- Укажите переменную окружения
24+
- Добавьте описание и значение по умолчанию
25+
26+
2. **Конфигурация** в `config.yaml`:
27+
- Добавьте соответствующий ключ в секцию команды или в общие настройки
28+
- Укажите значение по умолчанию
29+
30+
3. **Обработка флага** в `pkg/config/config.go`:
31+
- Добавьте поле в структуру `Config` и/или `CommandConfig`
32+
- Добавьте загрузку значения через `getValue()` в функции `LoadConfig`
33+
- При необходимости добавьте флаг в `CommandFlags` для автоматического добавления к команде
34+
- При необходимости добавьте валидацию
35+
36+
4. **Использование флага** в команде:
37+
- Получайте значение через `config.GetCommandConfig(cmd)` или `config.GetConfig()`
38+
- Используйте соответствующие методы get* если они доступны
39+
40+
#### 2.2. Описание логики в ARCHITECTURE.md
41+
42+
**Обязательно** опишите всю новую логику в `ARCHITECTURE.md`:
43+
44+
- Добавьте или обновите алгоритм команды в разделе "Алгоритмы для каждого флага"
45+
- Опишите каждый шаг выполнения
46+
- Укажите используемые API endpoints
47+
- Опишите обработку всех возможных вариантов поведения
48+
- Укажите особенности dry-run режима если команда его поддерживает
49+
- Обновите секцию "Конфигурация" для команды
50+
51+
#### 2.3. Общие принципы
52+
53+
- Вся обработка флагов и конфигурации должна быть централизована в `pkg/config/`
54+
- Используйте существующие утилиты из `pkg/utils/` где возможно
55+
- Избегайте дублирования кода - выносите общую логику в утилиты
56+
- Все команды должны поддерживать `--dry-run` где это применимо
57+
- Логирование должно быть информативным и структурированным
58+
59+
### 3. Билд и перенос в кластер
60+
61+
#### 3.1. Сборка бинарника
62+
63+
Соберите бинарник:
64+
65+
```bash
66+
go build -o osctl cmd/main.go
67+
```
68+
69+
#### 3.2. Перенос в кластер
70+
71+
Скопируйте бинарник на мастер-ноду кластера:
72+
73+
```bash
74+
scp osctl ИМЯ_НОДЫ-a-ks-master-0:/tmp
75+
```
76+
77+
### 4. Тестирование в кластере
78+
79+
#### 4.1. Подготовка деплоймента
80+
81+
1. В нужном namespace создайте деплоймент из `config-example/test-deployment.yaml`:
82+
83+
```bash
84+
kubectl -n infra-elklogs apply -f config-example/test-deployment.yaml
85+
```
86+
87+
#### 4.2. Копирование файлов в под
88+
89+
1. Скопируйте новый бинарник в под:
90+
91+
```bash
92+
kubectl -n infra-elklogs cp /tmp/osctl <pod-name>:/tmp
93+
```
94+
95+
2. Скопируйте конфигурационные файлы в под:
96+
97+
```bash
98+
kubectl -n infra-elklogs cp config.yaml <pod-name>:/tmp
99+
kubectl -n infra-elklogs cp osctlindicesconfig.yaml <pod-name>:/tmp
100+
kubectl -n infra-elklogs cp osctltenants.yaml <pod-name>:/tmp
101+
```
102+
103+
#### 4.3. Тестирование
104+
105+
1. Проводим прямо из оболочки пода:
106+
107+
```bash
108+
kubectl -n infra-elklogs exec -ti <pod-name> -- bash
109+
```
110+
111+
2. Перейдите в `/tmp`:
112+
113+
```bash
114+
cd /tmp
115+
```
116+
117+
3. Проверьте команды с `--dry-run`:
118+
119+
```bash
120+
./osctl <command> --dry-run
121+
```
122+
123+
Например:
124+
125+
```bash
126+
./osctl snapshots --dry-run
127+
./osctl sharding --dry-run
128+
./osctl retention --dry-run
129+
```
130+
131+
4. Проверьте работу без `--dry-run` (если уверены в безопасности):
132+
133+
```bash
134+
./osctl <command>
135+
```
136+
137+
#### 4.4. Полезные команды
138+
139+
- Проверка списка доступных команд: `./osctl --help`
140+
- Проверка справки по команде: `./osctl <command> --help`
141+
- Просмотр логов с детализацией: используйте логирование через logger
142+
143+
### 5. Коммит и push
144+
145+
После тестирования:
146+
147+
```bash
148+
git add .
149+
git commit -m "feat: описание изменений"
150+
git push origin feature/your-feature-name
151+
```
152+
153+
### 6. Создание Pull Request
154+
155+
Создайте Pull Request с описанием изменений и проверьте:
156+
157+
- ✅ Все новые флаги описаны в `ENVIRONMENT_VARIABLES_AND_FLAGS.md`
158+
- ✅ Все новые ключи добавлены в `config.yaml`
159+
- ✅ Вся логика описана в `ARCHITECTURE.md`
160+
- ✅ Код прошел линтер без ошибок
161+
- ✅ Изменения протестированы в кластере
162+
163+
## Полезные ссылки
164+
165+
- [ENVIRONMENT_VARIABLES_AND_FLAGS.md](ENVIRONMENT_VARIABLES_AND_FLAGS.md) - Полный справочник по флагам и переменным окружения
166+
- [ARCHITECTURE.md](ARCHITECTURE.md) - Подробные алгоритмы и архитектура системы
167+
- [README.md](README.md) - Основная документация проекта
168+

Dockerfile

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
FROM golang:1.25-bookworm as builder
2+
3+
ARG versionflags
4+
5+
WORKDIR /app
6+
7+
COPY go.mod go.sum ./
8+
RUN go mod download
9+
10+
COPY . .
11+
12+
RUN CGO_ENABLED=0 go build -v -a -tags netgo -ldflags="-extldflags '-static' -s -w $versionflags" -o osctl cmd/main.go
13+
14+
FROM debian:bookworm-slim
15+
16+
WORKDIR /app
17+
18+
ENV DEBIAN_FRONTEND=noninteractive
19+
20+
RUN apt-get update && apt-get install -y --no-install-recommends \
21+
ca-certificates \
22+
curl \
23+
wget \
24+
dnsutils \
25+
iputils-ping \
26+
vim \
27+
nano \
28+
jq \
29+
lsof \
30+
net-tools \
31+
procps \
32+
tzdata \
33+
traceroute \
34+
mtr-tiny \
35+
&& rm -rf /var/lib/apt/lists/*
36+
37+
RUN mkdir -p /app/osctl
38+
39+
COPY --from=builder /app/osctl /app/osctl
40+
41+
RUN chmod +x /app/osctl
42+
43+
ENV PATH="/app:${PATH}"
44+
45+
RUN /app/osctl completion bash > /etc/bash_completion.d/osctl
46+
47+
RUN echo '[ -f /etc/bash_completion ] && . /etc/bash_completion' >> /etc/bash.bashrc
48+
49+
CMD ["/app/osctl"]

0 commit comments

Comments
 (0)