diff --git a/README.md b/README.md index e8b45c5..7f248e6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [AWS Glue](https://aws.amazon.com/jp/glue/)をコンソール上からポチポチ変更していると、コミット履歴や設定変更の履歴が残らず、辛いと思うことが多々あったので作りました。 -Glue Job にのみ関心を持つツールで、Glue のスクリプトや設定ファイルを一つのリポジトリでまとめて管理したいときに欲しいと思われるAPIをCLI上で実行できます。 +Glue Job にのみ関心を持つツールで、Glue のスクリプトや設定ファイルを一つのリポジトリでまとめて管理したいときに欲しいと思われるAPIをコマンドライン上で実行できます。 ## Use gjobctl @@ -107,7 +107,9 @@ json形式のJobの設定ファイルは"-f"オプションで任意の値を渡 ``` ### Run -Glue Jobを実行するコマンドです。実行時のオプション引数はまだ対応していません。 +Glue Jobを実行するコマンドです。 + +※ 実行時のオプション引数はまだ対応していません。 ```bash $ gjobctl run diff --git a/cli.go b/cli.go index 075e720..5e4852b 100644 --- a/cli.go +++ b/cli.go @@ -9,6 +9,11 @@ import ( "github.com/alecthomas/kong" ) +const ( + ExitCodeOK = 0 + ExitCodeError = 1 +) + func cli(ctx context.Context, sub string, opts *CLIOptions, usage func()) error { app, err := New() if err != nil { @@ -47,14 +52,14 @@ type CLIOptions struct { func CLI(ctx context.Context, parseArgs CLIParseFunc) (int, error) { sub, opts, usage, err := parseArgs(os.Args[1:]) if err != nil { - return 1, err + return ExitCodeError, err } err = cli(ctx, sub, opts, usage) if err != nil { - return 1, err + return ExitCodeError, err } - return 0, nil + return ExitCodeOK, nil } func ParseArgs(args []string) (string, *CLIOptions, func(), error) { diff --git a/create.go b/create.go index 67052fe..c25d1cd 100644 --- a/create.go +++ b/create.go @@ -11,15 +11,16 @@ import ( "github.com/aws/aws-sdk-go/service/glue" ) -type BaseOption interface { -} +const ( + TimeoutForCreate = 5 * time.Second +) type CreateOption struct { JobSettingFile *string `name:"job-setting-file" short:"f" description:"job setting file in json"` } func (app *App) Create(ctx context.Context, opt *CreateOption) error { - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, TimeoutForCreate) defer cancel() var fn string diff --git a/get.go b/get.go index 3724ec3..bd21c5d 100644 --- a/get.go +++ b/get.go @@ -9,12 +9,16 @@ import ( "github.com/aws/aws-sdk-go/service/glue" ) +const ( + TimeoutForGet = 5 * time.Second +) + type GetOption struct { JobName *string `arg:"" name:"jobname" help:"enter the name of the Glue Job to be getted"` } func (app *App) Get(ctx context.Context, opt *GetOption) error { - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, TimeoutForGet) defer cancel() // AWSのセッションを作成 diff --git a/gjobctl.go b/gjobctl.go index e21b1f0..48ddfaf 100644 --- a/gjobctl.go +++ b/gjobctl.go @@ -32,8 +32,7 @@ func (app *App) setup() error { // Config構造体にデシリアライズ var conf AppConfig - decoder := yaml.NewDecoder(f) - if err := decoder.Decode(&conf); err != nil { + if err := yaml.NewDecoder(f).Decode(&conf); err != nil { return fmt.Errorf("failed to decode config file: %w", err) } diff --git a/list.go b/list.go index a826b8b..3115be7 100644 --- a/list.go +++ b/list.go @@ -5,15 +5,19 @@ import ( "fmt" "time" - "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/glue" ) +const ( + TimeoutForList = 5 * time.Second + MaxListCount int64 = 1000 +) + type ListOption struct { } func (app *App) List(ctx context.Context, opt *ListOption) error { - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, TimeoutForList) defer cancel() // AWSのセッションを作成 @@ -23,9 +27,10 @@ func (app *App) List(ctx context.Context, opt *ListOption) error { } sv := glue.New(sess) + max := MaxListCount // Glue Jobの一覧を取得 result, err := sv.GetJobsWithContext(ctx, &glue.GetJobsInput{ - MaxResults: aws.Int64(1000), + MaxResults: &max, }) if err != nil { return fmt.Errorf("failed to get job list: %w", err) diff --git a/run.go b/run.go index 43dc47b..89eb34a 100644 --- a/run.go +++ b/run.go @@ -9,12 +9,16 @@ import ( "github.com/aws/aws-sdk-go/service/glue" ) +const ( + TimeoutForRun = 5 * time.Second +) + type RunOption struct { JobName *string `arg:"" name:"jobname" help:"enter the name of the Glue Job to run"` } func (app *App) Run(ctx context.Context, opt *RunOption) error { - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, TimeoutForRun) defer cancel() // AWSのセッションを作成 diff --git a/script_deploy.go b/script_deploy.go index 23979bc..177ad12 100644 --- a/script_deploy.go +++ b/script_deploy.go @@ -13,13 +13,17 @@ import ( "github.com/aws/aws-sdk-go/service/s3" ) +const ( + TimeoutForScriptDeploy = 5 * time.Second +) + type ScriptDeployOption struct { JobSettingFile *string `name:"job-setting-file" short:"f" description:"job setting file in json"` ScriptLocalPath *string `arg:"" name:"script-local-path" short:"s" description:"script local path"` } func (app *App) ScriptDeploy(ctx context.Context, opt *ScriptDeployOption) error { - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, TimeoutForScriptDeploy) defer cancel() // JSONファイルからGlue Jobの設定を読み込む diff --git a/update.go b/update.go index 94b3533..9b53ec0 100644 --- a/update.go +++ b/update.go @@ -11,12 +11,16 @@ import ( "github.com/aws/aws-sdk-go/service/glue" ) +const ( + TimeoutForUpdate = 5 * time.Second +) + type UpdateOption struct { JobSettingFile *string `name:"job-setting-file" short:"f" description:"job setting file in json"` } func (app *App) Update(ctx context.Context, opt *UpdateOption) error { - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, TimeoutForUpdate) defer cancel() // JSONファイルからGlue Jobの設定を読み込む