Skip to content

Commit 5753b3a

Browse files
authored
Merge pull request #429 from Mashimiao/generate-add-console-size-option
add ConsoleSize option
2 parents 039d31b + bcdcec7 commit 5753b3a

File tree

5 files changed

+47
-0
lines changed

5 files changed

+47
-0
lines changed

cmd/oci-runtime-tool/generate.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ var generateFlags = []cli.Flag{
7979
cli.StringSliceFlag{Name: "process-cap-add", Usage: "add Linux capabilities"},
8080
cli.StringSliceFlag{Name: "process-cap-drop", Usage: "drop Linux capabilities"},
8181
cli.BoolFlag{Name: "process-cap-drop-all", Usage: "drop all Linux capabilities"},
82+
cli.StringFlag{Name: "process-consolesize", Usage: "specifies the console size in characters (width:height)"},
8283
cli.StringFlag{Name: "process-cwd", Value: "/", Usage: "current working directory for the process"},
8384
cli.IntFlag{Name: "process-gid", Usage: "gid for the process"},
8485
cli.StringSliceFlag{Name: "process-groups", Usage: "supplementary groups for the process"},
@@ -276,6 +277,15 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
276277
}
277278
}
278279

280+
if context.IsSet("process-consolesize") {
281+
consoleSize := context.String("process-consolesize")
282+
width, height, err := parseConsoleSize(consoleSize)
283+
if err != nil {
284+
return err
285+
}
286+
g.SetProcessConsoleSize(width, height)
287+
}
288+
279289
if context.Bool("process-cap-drop-all") {
280290
g.ClearProcessCapabilities()
281291
}
@@ -561,6 +571,25 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
561571
return err
562572
}
563573

574+
func parseConsoleSize(consoleSize string) (uint, uint, error) {
575+
size := strings.Split(consoleSize, ":")
576+
if len(size) != 2 {
577+
return 0, 0, fmt.Errorf("invalid consolesize value: %s", consoleSize)
578+
}
579+
580+
width, err := strconv.Atoi(size[0])
581+
if err != nil {
582+
return 0, 0, err
583+
}
584+
585+
height, err := strconv.Atoi(size[1])
586+
if err != nil {
587+
return 0, 0, err
588+
}
589+
590+
return uint(width), uint(height), nil
591+
}
592+
564593
func parseIDMapping(idms string) (uint32, uint32, uint32, error) {
565594
idm := strings.Split(idms, ":")
566595
if len(idm) != 3 {

completions/bash/oci-runtime-tool

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ _oci-runtime-tool_generate() {
359359
--output
360360
--process-cap-add
361361
--process-cap-drop
362+
--process-consolesize
362363
--process-cwd
363364
--process-gid
364365
--process-groups

generate/generate.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,13 @@ func (g *Generator) RemoveAnnotation(key string) {
341341
delete(g.spec.Annotations, key)
342342
}
343343

344+
// SetProcessConsoleSize sets g.spec.Process.ConsoleSize.
345+
func (g *Generator) SetProcessConsoleSize(width, height uint) {
346+
g.initSpecProcessConsoleSize()
347+
g.spec.Process.ConsoleSize.Width = width
348+
g.spec.Process.ConsoleSize.Height = height
349+
}
350+
344351
// SetProcessUID sets g.spec.Process.User.UID.
345352
func (g *Generator) SetProcessUID(uid uint32) {
346353
g.initSpecProcess()

generate/spec.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ func (g *Generator) initSpecProcess() {
1717
}
1818
}
1919

20+
func (g *Generator) initSpecProcessConsoleSize() {
21+
g.initSpecProcess()
22+
if g.spec.Process.ConsoleSize == nil {
23+
g.spec.Process.ConsoleSize = &rspec.Box{}
24+
}
25+
}
26+
2027
func (g *Generator) initSpecProcessCapabilities() {
2128
g.initSpecProcess()
2229
if g.spec.Process.Capabilities == nil {

man/oci-runtime-tool-generate.1.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ read the configuration from `config.json`.
283283
**--process-cap-drop-all**true|false
284284
Drop all Linux capabilities
285285

286+
**--process-consolesize**=WIDTH:HEIGHT
287+
Specifies the console size in characters of the terminal. e.g. --process-consolesize=80:40
288+
286289
**--process-cwd**=PATH
287290
Current working directory for the process. The default is */*.
288291

0 commit comments

Comments
 (0)