Skip to content

Commit 3b99fdb

Browse files
authored
feat: support no-pub (TencentBlueKing#182)
1 parent 33f9491 commit 3b99fdb

8 files changed

Lines changed: 95 additions & 53 deletions

File tree

sdks/apigw-manager/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,6 @@ definition.yaml 指定的环境配置适用于 `sync_apigw_stage` 命令,而
7474

7575
访问 `http://apigw.__bk_domain__/backend/admin42/core/apirelatedapp/`,添加应用操作网关数据的权限
7676

77+
### 6. 注册网关资源时如果只想注册生成版本,不进行版本发布,该如何操作?
78+
79+
`create_version_and_release_apigw` 是进行网关资源生成版本和发布的命令,可以通过指定 `--no-pub` 只进行版本生成,不进行资源发布。

sdks/apigw-manager/docs/sync-apigateway-with-django.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ python manage.py sync_apigw_resources --delete --gateway-name=${gateway_name} --
3939
# 可选,同步资源文档
4040
python manage.py sync_resource_docs_by_archive --gateway-name=${gateway_name} --file="${definition_file}"
4141

42-
# 创建资源版本并发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
42+
# 创建资源版本、发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
43+
# 指定参数 --no-pub 则只生成版本,不发布
4344
python manage.py create_version_and_release_apigw --gateway-name=${gateway_name} --file="${definition_file}"
4445

4546
# 可选,为应用主动授权
@@ -153,6 +154,7 @@ python manage.py add_related_apps --gateway-name=${gateway_name} --file="${defin
153154
python manage.py apply_apigw_permissions --gateway-name=${gateway_name} --file="${definition_file}"
154155

155156
# 创建资源版本并发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
157+
# 指定参数 --no-pub 则只生成版本,不发布
156158
python manage.py create_version_and_release_apigw --gateway-name=${gateway_name} --file="${definition_file}"
157159

158160
# 获取网关公钥

sdks/apigw-manager/docs/sync-apigateway-with-docker.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ title "fetch apigateway public key"
8080
apigw-manager.sh fetch_apigw_public_key --gateway-name=${gateway_name} --print > "apigateway.pub"
8181

8282
title "releasing"
83+
# 创建资源版本并发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK, 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
84+
# 指定参数 --no-pub 则只生成版本,不发布
8385
call_definition_command_or_exit create_version_and_release_apigw "${definition_file}" --gateway-name=${gateway_name}
8486

8587
log_info "done"
@@ -274,6 +276,7 @@ call_definition_command_or_exit add_related_apps "${definition_file}" --gateway-
274276
call_definition_command_or_exit apply_apigw_permissions "${definition_file}" --gateway-name=${gateway_name}
275277

276278
# 创建资源版本并发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK, 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
279+
# 指定参数 --no-pub 则只生成版本,不发布
277280
call_definition_command_or_exit create_version_and_release_apigw "${definition_file}" --gateway-name=${gateway_name}
278281

279282
# 获取网关公钥,存放到文件 apigateway.pub

sdks/apigw-manager/examples/chart/use-configmap/files/support-files/bin/sync-apigateway.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ title "fetch apigateway public key"
2626
apigw-manager.sh fetch_apigw_public_key --gateway-name=${gateway_name} --print > "/tmp/apigateway.pub"
2727

2828
title "releasing"
29+
# 创建资源版本并发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK, 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
30+
# 指定参数 --no-pub 则只生成版本,不发布
2931
call_definition_command_or_exit create_version_and_release_apigw "${definition_file}" --gateway-name=${gateway_name}
3032

3133
title "done"

sdks/apigw-manager/examples/chart/use-custom-docker-image/my-apigw-manager/support-files/bin/sync-apigateway.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ title "fetch apigateway public key"
2626
apigw-manager.sh fetch_apigw_public_key --gateway-name=${gateway_name} --print > "apigateway.pub"
2727

2828
title "releasing"
29+
# 创建资源版本并发布;指定参数 --generate-sdks 时,会同时生成资源版本对应的网关 SDK, 指定 --stage stage1 stage2 时会发布指定环境,不设置则发布所有环境
30+
# 指定参数 --no-pub 则只生成版本,不发布
2931
call_definition_command_or_exit create_version_and_release_apigw "${definition_file}" --gateway-name=${gateway_name}
3032

3133
title "done"

sdks/apigw-manager/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "apigw-manager"
3-
version = "3.1.0"
3+
version = "3.1.1"
44
description = "The SDK for managing blueking gateway resource."
55
readme = "README.md"
66
authors = ["blueking <blueking@tencent.com>"]

sdks/apigw-manager/src/apigw_manager/apigw/management/commands/create_version_and_release_apigw.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def add_arguments(self, parser):
3535
parser.add_argument("-c", "--comment", default="", help="release comment")
3636
parser.add_argument("-s", "--stage", default=[], nargs="+", help="release stages")
3737
parser.add_argument("--generate-sdks", default=False, action="store_true", help="with sdks generation")
38+
parser.add_argument("--no-pub", default=False, action="store_true", help="only make version")
3839

3940
def _parse_version_from_definition(self, definition):
4041
version = definition.get("version")
@@ -89,7 +90,7 @@ def _generate_sdks(self, releaser, version, *args, **kwargs):
8990
except Exception as err:
9091
print("warning!! generate sdks failed: %s" % err)
9192

92-
def handle(self, stage, title, comment, generate_sdks, *args, **kwargs):
93+
def handle(self, stage, title, comment, generate_sdks, no_pub, *args, **kwargs):
9394
configuration = self.get_configuration(**kwargs)
9495
definition = self.get_definition(**kwargs)
9596
defined_version = self._parse_version_from_definition(definition)
@@ -121,16 +122,18 @@ def handle(self, stage, title, comment, generate_sdks, *args, **kwargs):
121122
generate_sdks = False
122123
print("resource_version %s already exists, skip creating" % latest_version)
123124

124-
result = releaser.release(
125-
version=resource_version["version"],
126-
title=title or resource_version.get("title", ""),
127-
comment=comment or resource_version.get("comment", ""),
128-
stage_names=stage,
129-
)
130-
print(
131-
"API gateway released %s, title %s, stages %s"
132-
% (result.get("version"), result["resource_version_title"], result["stage_names"])
133-
)
125+
# 如果没有设置不发布
126+
if not no_pub:
127+
result = releaser.release(
128+
version=resource_version["version"],
129+
title=title or resource_version.get("title", ""),
130+
comment=comment or resource_version.get("comment", ""),
131+
stage_names=stage,
132+
)
133+
print(
134+
"API gateway released %s, title %s, stages %s"
135+
% (result.get("version"), result["resource_version_title"], result["stage_names"])
136+
)
134137

135138
# create a sdk when released a new version
136139
if generate_sdks:

sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_create_version_and_release_apigw.py

Lines changed: 67 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def default_command_flags(definition_file):
2727
"title": "",
2828
"comment": "",
2929
"generate_sdks": False,
30+
"no_pub": False,
3031
}
3132

3233

@@ -160,11 +161,11 @@ def test_should_create_resource_version(mocker, command, defined_version, latest
160161
],
161162
)
162163
def test_get_version_to_be_created(
163-
command,
164-
datetime_now,
165-
defined_version,
166-
resource_version_exists,
167-
expected,
164+
command,
165+
datetime_now,
166+
defined_version,
167+
resource_version_exists,
168+
expected,
168169
):
169170
result = command._get_version_to_be_created(
170171
parse_version(defined_version),
@@ -177,15 +178,15 @@ def test_get_version_to_be_created(
177178

178179
class TestHandle:
179180
def test_handle_version_not_change(
180-
self,
181-
command,
182-
fetcher,
183-
releaser,
184-
faker,
185-
definition_file,
186-
resource_sync_manager,
187-
fake_resource_version,
188-
default_command_flags,
181+
self,
182+
command,
183+
fetcher,
184+
releaser,
185+
faker,
186+
definition_file,
187+
resource_sync_manager,
188+
fake_resource_version,
189+
default_command_flags,
189190
):
190191
definition_file.write(yaml.dump(fake_resource_version))
191192
stage = faker.pystr()
@@ -210,15 +211,15 @@ def test_handle_version_not_change(
210211
)
211212

212213
def test_handle_version_not_change_but_dirty(
213-
self,
214-
command,
215-
fetcher,
216-
releaser,
217-
faker,
218-
definition_file,
219-
resource_sync_manager,
220-
fake_resource_version,
221-
default_command_flags,
214+
self,
215+
command,
216+
fetcher,
217+
releaser,
218+
faker,
219+
definition_file,
220+
resource_sync_manager,
221+
fake_resource_version,
222+
default_command_flags,
222223
):
223224
definition_file.write(yaml.dump(fake_resource_version))
224225
stage = faker.pystr()
@@ -255,14 +256,14 @@ def test_handle_version_not_change_but_dirty(
255256
)
256257

257258
def test_handle_version_changed(
258-
self,
259-
command,
260-
fetcher,
261-
releaser,
262-
faker,
263-
definition_file,
264-
fake_resource_version,
265-
default_command_flags,
259+
self,
260+
command,
261+
fetcher,
262+
releaser,
263+
faker,
264+
definition_file,
265+
fake_resource_version,
266+
default_command_flags,
266267
):
267268
defined_version = "1.0.0-alpha2"
268269
definition_file.write(
@@ -299,15 +300,15 @@ def test_handle_version_changed(
299300
)
300301

301302
def test_handle_version_not_set(
302-
self,
303-
command,
304-
fetcher,
305-
releaser,
306-
faker,
307-
definition_file,
308-
resource_sync_manager,
309-
fake_resource_version,
310-
default_command_flags,
303+
self,
304+
command,
305+
fetcher,
306+
releaser,
307+
faker,
308+
definition_file,
309+
resource_sync_manager,
310+
fake_resource_version,
311+
default_command_flags,
311312
):
312313
definition_file.write(
313314
yaml.dump(
@@ -351,3 +352,29 @@ def test_handle_version_not_set(
351352
comment=fake_resource_version["comment"],
352353
stage_names=stage,
353354
)
355+
356+
def test_handle_without_release(
357+
self,
358+
command,
359+
fetcher,
360+
releaser,
361+
faker,
362+
definition_file,
363+
resource_sync_manager,
364+
fake_resource_version,
365+
default_command_flags,
366+
):
367+
definition_file.write(yaml.dump(fake_resource_version))
368+
stage = faker.pystr()
369+
370+
default_command_flags["no_pub"] = True
371+
372+
fetcher.latest_resource_version.return_value = fake_resource_version
373+
374+
resource_sync_manager.is_dirty.return_value = False
375+
376+
command.handle(stage=stage, **default_command_flags)
377+
378+
releaser.create_resource_version.assert_not_called()
379+
380+
releaser.releaser.release.assert_not_called()

0 commit comments

Comments
 (0)