unimatrix-cli 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/README.md +12 -0
- data/Rakefile +6 -0
- data/VERSION +1 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/unimatrix +11 -0
- data/lib/unimatrix_cli.rb +74 -0
- data/lib/unimatrix_cli/alchemist/rendition/list_command.rb +72 -0
- data/lib/unimatrix_cli/alchemist/rendition_profile/assign_command.rb +59 -0
- data/lib/unimatrix_cli/alchemist/rendition_profile/list_command.rb +36 -0
- data/lib/unimatrix_cli/alchemist/video/create_command.rb +40 -0
- data/lib/unimatrix_cli/alchemist/video/describe_command.rb +40 -0
- data/lib/unimatrix_cli/alchemist/video_encoder/create_command.rb +37 -0
- data/lib/unimatrix_cli/alchemist/video_encoder/describe_command.rb +39 -0
- data/lib/unimatrix_cli/alchemist/video_encoder/encode_command.rb +102 -0
- data/lib/unimatrix_cli/alchemist/video_encoder/list_command.rb +35 -0
- data/lib/unimatrix_cli/archivist/blueprint/create_command.rb +94 -0
- data/lib/unimatrix_cli/citadel/app/build_command.rb +28 -0
- data/lib/unimatrix_cli/citadel/app/console_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/app/db_setup_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/app/environment_command.rb +30 -0
- data/lib/unimatrix_cli/citadel/app/logs_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/app/migrate_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/app/migrate_status_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/app/rake_command.rb +18 -0
- data/lib/unimatrix_cli/citadel/app/routes_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/citadel_command.rb +285 -0
- data/lib/unimatrix_cli/citadel/instance/details_command.rb +18 -0
- data/lib/unimatrix_cli/citadel/instance/scp_command.rb +48 -0
- data/lib/unimatrix_cli/citadel/instance/ssh_command.rb +29 -0
- data/lib/unimatrix_cli/citadel/instance/status_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/instance/user_data_command.rb +17 -0
- data/lib/unimatrix_cli/citadel/instance/user_data_logs_command.rb +17 -0
- data/lib/unimatrix_cli/cli.rb +30 -0
- data/lib/unimatrix_cli/command.rb +138 -0
- data/lib/unimatrix_cli/config/acceptance.yml +23 -0
- data/lib/unimatrix_cli/config/configuration.rb +66 -0
- data/lib/unimatrix_cli/config/production.yml +15 -0
- data/lib/unimatrix_cli/config/staging.yml +15 -0
- data/lib/unimatrix_cli/config/unimatrix.rb +4 -0
- data/lib/unimatrix_cli/iris/stream/create_command.rb +43 -0
- data/lib/unimatrix_cli/iris/stream/describe_command.rb +35 -0
- data/lib/unimatrix_cli/iris/stream_encoder/create_command.rb +43 -0
- data/lib/unimatrix_cli/iris/stream_encoder/describe_command.rb +37 -0
- data/lib/unimatrix_cli/iris/stream_input/create_command.rb +43 -0
- data/lib/unimatrix_cli/iris/stream_input/describe_command.rb +37 -0
- data/lib/unimatrix_cli/iris/stream_output/create_command.rb +55 -0
- data/lib/unimatrix_cli/iris/stream_output/describe_command.rb +37 -0
- data/lib/unimatrix_cli/iris/stream_recorder/create_command.rb +49 -0
- data/lib/unimatrix_cli/iris/stream_recorder/describe_command.rb +37 -0
- data/lib/unimatrix_cli/iris/stream_transcriber/create_command.rb +54 -0
- data/lib/unimatrix_cli/iris/stream_transcriber/describe_command.rb +37 -0
- data/lib/unimatrix_cli/iris/stream_transmutator/create_command.rb +65 -0
- data/lib/unimatrix_cli/iris/stream_transmutator/describe_command.rb +38 -0
- data/lib/unimatrix_cli/login_command.rb +91 -0
- data/lib/unimatrix_cli/logout_command.rb +21 -0
- data/lib/unimatrix_cli/version.rb +3 -0
- data/lib/unimatrix_cli/zephyrus/input/create_command.rb +40 -0
- data/lib/unimatrix_cli/zephyrus/input/describe_command.rb +35 -0
- data/lib/unimatrix_cli/zephyrus/input/list_command.rb +38 -0
- data/lib/unimatrix_cli/zephyrus/output/list_command.rb +44 -0
- data/lib/unimatrix_cli/zephyrus/recording/configuration_command.rb +43 -0
- data/lib/unimatrix_cli/zephyrus/rendition/list_command.rb +40 -0
- data/lib/unimatrix_cli/zephyrus/routing/configuration_command.rb +43 -0
- data/lib/unimatrix_cli/zephyrus/transcoding/configuration_command.rb +55 -0
- data/lib/unimatrix_cli/zephyrus/transcribing/configuration_command.rb +55 -0
- data/lib/unimatrix_cli/zephyrus/transmutation/configuration_command.rb +55 -0
- data/lib/unimatrix_parser.rb +796 -0
- data/unimatrix-cli.gemspec +30 -0
- metadata +247 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Alchemist
|
3
|
+
module VideoEncoder
|
4
|
+
class DescribeCommand < Command
|
5
|
+
|
6
|
+
option :realm, "The realm uuid", type: :string, required: true
|
7
|
+
option :video_encoder, "The video_encoder uuid", type: :string, required: true, short: :e
|
8
|
+
|
9
|
+
synopsis "Describe a video_encoder"
|
10
|
+
|
11
|
+
def execute
|
12
|
+
video_encoder = find_video_encoder
|
13
|
+
|
14
|
+
if validate( video_encoder, 'Alchemist::VideoEncoder' )
|
15
|
+
parse_object( video_encoder ).each do | response |
|
16
|
+
write( message: response )
|
17
|
+
end
|
18
|
+
else
|
19
|
+
write(
|
20
|
+
message: "Video Encoder could not be found: #{ video_encoder.inspect }",
|
21
|
+
error: true
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#----------------------------------------------------------------------------
|
27
|
+
|
28
|
+
private; def find_video_encoder
|
29
|
+
endpoint = "/realms/#{ @options[ :realm ] }/video_encoders"
|
30
|
+
options = {
|
31
|
+
uuid: @options[ :video_encoder ]
|
32
|
+
}
|
33
|
+
|
34
|
+
operation( endpoint, options ).read.first
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Alchemist
|
3
|
+
module VideoEncoder
|
4
|
+
class EncodeCommand < Command
|
5
|
+
|
6
|
+
option :realm, "The realm uuid", type: :string, required: true
|
7
|
+
option :video_encoder, "The video_encoder uuid", type: :string, required: true, short: :e
|
8
|
+
option :video, "The video uuid", type: :string, required: true
|
9
|
+
|
10
|
+
synopsis "Start a video_encoder for a video. The video_encoder will use default " +
|
11
|
+
"rendition_profiles if none are already assigned to it. A list of the " +
|
12
|
+
"rendition_profiles being used to create renditions will be returned."
|
13
|
+
|
14
|
+
def execute
|
15
|
+
video_encoder = query_encoder_for_rendition_profiles
|
16
|
+
if validate( video_encoder, 'Alchemist::VideoEncoder' )
|
17
|
+
rendition_profiles = video_encoder.rendition_profiles
|
18
|
+
|
19
|
+
unless validate_collection( rendition_profiles, 'Alchemist::RenditionProfile' )
|
20
|
+
rendition_profiles = assign_default_rendition_profiles_to_encoder
|
21
|
+
end
|
22
|
+
|
23
|
+
if validate_collection( rendition_profiles, 'Alchemist::RenditionProfile' )
|
24
|
+
video_encoder = assign_video_to_encoder
|
25
|
+
|
26
|
+
if validate( video_encoder, 'Alchemist::VideoEncoder' )
|
27
|
+
video = video_encoder.videos.first
|
28
|
+
|
29
|
+
if validate( video, 'Alchemist::Video' )
|
30
|
+
|
31
|
+
rendition_profiles.map do | rendition_profile |
|
32
|
+
write( message: rendition_profile.uuid )
|
33
|
+
end
|
34
|
+
else
|
35
|
+
write(
|
36
|
+
message: "Error assigning video to video_encoder: #{ video.inspect }",
|
37
|
+
error: true
|
38
|
+
)
|
39
|
+
end
|
40
|
+
else
|
41
|
+
write(
|
42
|
+
message: "Error assigning video to " +
|
43
|
+
"video_encoder: #{ video_encoder.inspect }",
|
44
|
+
error: true
|
45
|
+
)
|
46
|
+
end
|
47
|
+
else
|
48
|
+
write(
|
49
|
+
message: "Error assigning rendition_profiles " +
|
50
|
+
"to video_encoder: #{ rendition_profiles.inspect }",
|
51
|
+
error: true
|
52
|
+
)
|
53
|
+
end
|
54
|
+
else
|
55
|
+
write(
|
56
|
+
message: "Error querying for rendition_profiles. " +
|
57
|
+
"Video Encoder not found: #{ video_encoder.inspect }",
|
58
|
+
error: true
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
#----------------------------------------------------------------------------
|
64
|
+
|
65
|
+
private; def query_encoder_for_rendition_profiles
|
66
|
+
endpoint = "/realms/#{ @options[ :realm ] }/video_encoders"
|
67
|
+
options = {
|
68
|
+
uuid: @options[ :video_encoder ]
|
69
|
+
}
|
70
|
+
|
71
|
+
operation( endpoint, options ).include(
|
72
|
+
'rendition_profiles'
|
73
|
+
).read.first rescue nil
|
74
|
+
end
|
75
|
+
|
76
|
+
private; def assign_default_rendition_profiles_to_encoder
|
77
|
+
endpoint = "/realms/#{ @options[ :realm ] }/video_encoders/" +
|
78
|
+
"#{ @options[ :video_encoder ] }/rendition_profiles"
|
79
|
+
|
80
|
+
uuids = Configuration.default_config[ 'rendition_profile_uuids' ]
|
81
|
+
|
82
|
+
rendition_profiles = uuids.map do | uuid |
|
83
|
+
Unimatrix::Alchemist::RenditionProfile.new( uuid: uuid )
|
84
|
+
end
|
85
|
+
|
86
|
+
operation( endpoint ).write(
|
87
|
+
'rendition_profiles', rendition_profiles
|
88
|
+
).first rescue nil
|
89
|
+
end
|
90
|
+
|
91
|
+
private; def assign_video_to_encoder
|
92
|
+
endpoint = "/realms/#{ @options[ :realm ] }/video_encoders/" +
|
93
|
+
"#{ @options[ :video_encoder ] }/videos"
|
94
|
+
|
95
|
+
video = Unimatrix::Alchemist::Video.new( uuid: @options[ :video ] )
|
96
|
+
|
97
|
+
operation( endpoint ).write( 'videos', video ).first rescue nil
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Alchemist
|
3
|
+
module VideoEncoder
|
4
|
+
class ListCommand < Command
|
5
|
+
|
6
|
+
option :realm, "The realm uuid", type: :string, required: true
|
7
|
+
|
8
|
+
synopsis "List all the video_encoders for the specified realm"
|
9
|
+
|
10
|
+
def execute
|
11
|
+
video_encoders = find_video_encoders
|
12
|
+
|
13
|
+
if validate_collection( video_encoders, 'Alchemist::VideoEncoder' )
|
14
|
+
video_encoders.each do | video_encoder |
|
15
|
+
write( message: video_encoder.uuid )
|
16
|
+
end
|
17
|
+
else
|
18
|
+
write(
|
19
|
+
message: "No video_encoders found: #{ video_encoders.inspect }",
|
20
|
+
error: true
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
#----------------------------------------------------------------------------
|
26
|
+
|
27
|
+
private; def find_video_encoders
|
28
|
+
endpoint = "/realms/#{ @options[ :realm ] }/video_encoders"
|
29
|
+
|
30
|
+
operation( endpoint ).read
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Archivist
|
3
|
+
module Blueprint
|
4
|
+
class CreateCommand < Command
|
5
|
+
|
6
|
+
option :realm, "Realm uuid where the blueprint belongs", type: :string, required: true
|
7
|
+
option :file, "Path to file describing blueprints", type: :string, required: true
|
8
|
+
|
9
|
+
synopsis "Create a new blueprint"
|
10
|
+
|
11
|
+
def execute
|
12
|
+
contents = read_file( @options[ :file ] )
|
13
|
+
|
14
|
+
if contents.respond_to?( :each )
|
15
|
+
|
16
|
+
requests = build_requests( contents )
|
17
|
+
|
18
|
+
blueprint_response = make_resource_request( requests[ :blueprints ], 'blueprints' )
|
19
|
+
|
20
|
+
if blueprint_response[ 'errors' ].nil?
|
21
|
+
|
22
|
+
requests[ :blueprint_attributes ] = attach_blueprint_ids_to_attributes(
|
23
|
+
blueprint_response[ 'blueprints' ],
|
24
|
+
requests[ :blueprint_attributes ]
|
25
|
+
)
|
26
|
+
|
27
|
+
blueprint_attribute_response =
|
28
|
+
make_resource_request( requests[ :blueprint_attributes ], 'blueprint_attributes' )
|
29
|
+
|
30
|
+
if blueprint_attribute_response[ 'errors' ].nil?
|
31
|
+
|
32
|
+
write( message: "Success! To verify, in your browser, visit:\n" +
|
33
|
+
"#{ Configuration.default_config[ 'archivist_url' ] }/realms" +
|
34
|
+
"/#{ @options[ :realm ] }/blueprints/" +
|
35
|
+
"?access_token=#{ Configuration.access_token }&" +
|
36
|
+
"include[blueprint_attributes]=true" )
|
37
|
+
|
38
|
+
else
|
39
|
+
write( message: "Error creating blueprint_attributes: " +
|
40
|
+
"#{ blueprint_attribute_response[ 'errors' ].inspect }", error: true )
|
41
|
+
end
|
42
|
+
else
|
43
|
+
write( message: "Error creating blueprint: " +
|
44
|
+
"#{ blueprint_response[ 'errors' ].inspect }", error: true )
|
45
|
+
end
|
46
|
+
else
|
47
|
+
write( message: "File empty or not correctly formatted", error: true )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
#----------------------------------------------------------------------------
|
52
|
+
|
53
|
+
private; def build_requests( file_contents )
|
54
|
+
requests = { blueprints: [], blueprint_attributes: {} }
|
55
|
+
|
56
|
+
file_contents.each do | blueprint |
|
57
|
+
requests[ :blueprints ].push( blueprint.reject{ | key | key == 'attributes' } )
|
58
|
+
|
59
|
+
if requests[ :blueprint_attributes ][ blueprint[ 'name' ] ].nil?
|
60
|
+
requests[ :blueprint_attributes ][ blueprint[ 'name' ] ] = []
|
61
|
+
end
|
62
|
+
|
63
|
+
blueprint[ 'attributes' ].each do | attribute_set |
|
64
|
+
requests[ :blueprint_attributes ][ blueprint[ 'name' ] ].push( attribute_set )
|
65
|
+
end
|
66
|
+
end
|
67
|
+
requests
|
68
|
+
end
|
69
|
+
|
70
|
+
private; def make_resource_request( request_body, resource )
|
71
|
+
endpoint = "#{ Configuration.default_config[ 'archivist_url' ] }/" +
|
72
|
+
"realms/#{ @options[ :realm ] }/#{ resource }/" +
|
73
|
+
"?access_token=#{ Configuration.access_token }"
|
74
|
+
|
75
|
+
body = { "#{ resource }": request_body }
|
76
|
+
|
77
|
+
make_request( endpoint, 'Post', body )
|
78
|
+
end
|
79
|
+
|
80
|
+
private; def attach_blueprint_ids_to_attributes ( blueprints, attributes )
|
81
|
+
blueprint_attribute_requests = []
|
82
|
+
|
83
|
+
blueprints.each do | blueprint |
|
84
|
+
attributes[ blueprint[ 'name' ] ].each do | attribute |
|
85
|
+
attribute[ 'blueprint_uuid' ] = blueprint[ 'uuid' ]
|
86
|
+
blueprint_attribute_requests.push( attribute )
|
87
|
+
end
|
88
|
+
end
|
89
|
+
blueprint_attribute_requests
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class BuildCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :builder, "Keyword for the name of the build server", type: :string, required: true
|
7
|
+
option :app, "Keyword for the name of the app to build", type: :string, required: true
|
8
|
+
option :branch, "The recipe or branch to build from (optional)", type: :string
|
9
|
+
|
10
|
+
synopsis "Build a package of the specified app"
|
11
|
+
|
12
|
+
def execute
|
13
|
+
if load_environment
|
14
|
+
execute_build
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#----------------------------------------------------------------------------
|
19
|
+
|
20
|
+
def execute_build
|
21
|
+
command = base_command + " -t do_it #{ @options[ :builder ] } " +
|
22
|
+
"#{ @options[ :app ] } #{ @options[ :branch ] }"
|
23
|
+
system( command )
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class ConsoleCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
|
8
|
+
synopsis "Enter the console on a Rails-based API instance"
|
9
|
+
|
10
|
+
def execute
|
11
|
+
super
|
12
|
+
execute_command( 'console' )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class DbSetupCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
|
8
|
+
synopsis "Set up the database on a Rails-based API instance"
|
9
|
+
|
10
|
+
def execute
|
11
|
+
super
|
12
|
+
execute_command( 'db:setup' )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class EnvironmentCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
option :set, "Set env variables in the format KEY=value", type: :string
|
8
|
+
option :unset, "Remove env variables in the format KEY=value", type: :string
|
9
|
+
|
10
|
+
synopsis "Display or change environment variables"
|
11
|
+
|
12
|
+
def execute
|
13
|
+
super
|
14
|
+
|
15
|
+
if @options[ :set ]
|
16
|
+
@options[ :commands ] = "set '#{ @options[ :set ] }'"
|
17
|
+
elsif @options[ :unset ]
|
18
|
+
@options[ :commands ] = "unset '#{ @options[ :unset ] }'"
|
19
|
+
end
|
20
|
+
|
21
|
+
if @options[ :commands ]
|
22
|
+
execute_command( 'environment' )
|
23
|
+
else
|
24
|
+
execute_tunnel( 'cat /etc/environment' )
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class LogsCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
|
8
|
+
synopsis "Tail logs on the specified app"
|
9
|
+
|
10
|
+
def execute
|
11
|
+
super
|
12
|
+
execute_command( 'logs' )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class MigrateCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
|
8
|
+
synopsis "Migrate the database on a Rails-based API instance"
|
9
|
+
|
10
|
+
def execute
|
11
|
+
super
|
12
|
+
execute_command( 'migrate' )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class MigrateStatusCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
|
8
|
+
synopsis "Check database migration status on a Rails-based API instance"
|
9
|
+
|
10
|
+
def execute
|
11
|
+
super
|
12
|
+
execute_command( 'migrate:status' )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module UnimatrixCLI
|
2
|
+
module Citadel
|
3
|
+
module App
|
4
|
+
class RakeCommand < CitadelCommand
|
5
|
+
|
6
|
+
option :app, "Keyword for the name of the app", type: :string, required: true
|
7
|
+
option :commands, "The rake task commands", type: :string
|
8
|
+
|
9
|
+
synopsis "Run a rake task on a Rails-based API instance"
|
10
|
+
|
11
|
+
def execute
|
12
|
+
super
|
13
|
+
execute_command( 'rake' )
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|