embulk-input-remote 0.4.1 → 0.4.2
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 +4 -4
- data/README.md +1 -0
- data/build.gradle +10 -5
- data/gradle.properties +1 -1
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +1 -1
- data/gradlew +1 -1
- data/gradlew.bat +84 -84
- data/src/main/kotlin/org/embulk/input/remote/RemoteFileInputPlugin.kt +8 -4
- data/src/main/kotlin/org/embulk/input/remote/SSHClient.kt +6 -4
- data/src/test/kotlin/org/embulk/input/remote/TestRemoteFileInputPlugin.kt +5 -7
- metadata +20 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 366e8b4b47da07594a9712457893566a0456a200
|
4
|
+
data.tar.gz: 0e7f1777625b862dfc38b1436efe3f83205ef998
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1024e60a974e113ac117fa0e9cf6202db5e2c7362609bf9da10fa576904a34d57178ff852bc8ac40a464a4f395180be7ecf342a49c787588d0022382e73e0bba
|
7
|
+
data.tar.gz: cc19b0b51cd14a12b965f142eec1b530579448e41e1d09aaf611a328d40af28392e6ab93b2beea591e40171581818193003dcc6f6392fb507d7b832fe836088b
|
data/README.md
CHANGED
@@ -27,6 +27,7 @@ This plugin load data from Remote hosts by SCP
|
|
27
27
|
- **key_path**: Path of your secret key (required when you choose `public_key` type) (string, default: `~/.ssh/id_rsa` or `id_dsa`")
|
28
28
|
- **password**: Password of the `user` (required when you choose `password` type) (string)
|
29
29
|
- **skip_host_key_verification**: If true, verification of host key will be skipped (boolean, default: false)
|
30
|
+
- **load_known_hosts**: If true, load the known_hosts file (boolean, default: true)
|
30
31
|
|
31
32
|
## Example
|
32
33
|
|
data/build.gradle
CHANGED
@@ -4,13 +4,13 @@ buildscript {
|
|
4
4
|
maven { url 'http://kamatama41.github.com/maven-repository/repository' }
|
5
5
|
}
|
6
6
|
dependencies {
|
7
|
-
classpath "com.github.kamatama41:gradle-embulk-plugin:0.
|
7
|
+
classpath "com.github.kamatama41:gradle-embulk-plugin:0.3.0"
|
8
8
|
classpath "net.researchgate:gradle-release:2.5.0"
|
9
9
|
}
|
10
10
|
}
|
11
11
|
|
12
12
|
plugins {
|
13
|
-
id "org.jetbrains.kotlin.jvm" version "1.
|
13
|
+
id "org.jetbrains.kotlin.jvm" version "1.3.10"
|
14
14
|
}
|
15
15
|
apply plugin: "com.github.kamatama41.embulk"
|
16
16
|
apply plugin: "net.researchgate.release"
|
@@ -29,14 +29,19 @@ targetCompatibility = 1.8
|
|
29
29
|
|
30
30
|
dependencies {
|
31
31
|
compile "org.jetbrains.kotlin:kotlin-stdlib"
|
32
|
-
compile "com.hierynomus:sshj:0.
|
32
|
+
compile "com.hierynomus:sshj:0.26.0"
|
33
33
|
compile "com.jcraft:jzlib:1.1.3"
|
34
|
-
testCompile "com.github.kamatama41:embulk-test-helpers:0.
|
34
|
+
testCompile "com.github.kamatama41:embulk-test-helpers:0.6.0"
|
35
35
|
testCompile "com.github.docker-java:docker-java:3.0.7"
|
36
|
+
testRuntime "org.junit.jupiter:junit-jupiter-engine:5.3.2"
|
37
|
+
}
|
38
|
+
|
39
|
+
test {
|
40
|
+
useJUnitPlatform()
|
36
41
|
}
|
37
42
|
|
38
43
|
embulk {
|
39
|
-
version = "0.9.
|
44
|
+
version = "0.9.11"
|
40
45
|
category = "file-input"
|
41
46
|
name = "remote"
|
42
47
|
authors = ["Shinichi Ishimura"]
|
data/gradle.properties
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version=0.4.
|
1
|
+
version=0.4.2
|
Binary file
|
@@ -1,5 +1,5 @@
|
|
1
1
|
distributionBase=GRADLE_USER_HOME
|
2
2
|
distributionPath=wrapper/dists
|
3
|
+
distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
|
3
4
|
zipStoreBase=GRADLE_USER_HOME
|
4
5
|
zipStorePath=wrapper/dists
|
5
|
-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-all.zip
|
data/gradlew
CHANGED
@@ -28,7 +28,7 @@ APP_NAME="Gradle"
|
|
28
28
|
APP_BASE_NAME=`basename "$0"`
|
29
29
|
|
30
30
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
31
|
-
DEFAULT_JVM_OPTS=""
|
31
|
+
DEFAULT_JVM_OPTS='"-Xmx64m"'
|
32
32
|
|
33
33
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
34
34
|
MAX_FD="maximum"
|
data/gradlew.bat
CHANGED
@@ -1,84 +1,84 @@
|
|
1
|
-
@if "%DEBUG%" == "" @echo off
|
2
|
-
@rem ##########################################################################
|
3
|
-
@rem
|
4
|
-
@rem Gradle startup script for Windows
|
5
|
-
@rem
|
6
|
-
@rem ##########################################################################
|
7
|
-
|
8
|
-
@rem Set local scope for the variables with windows NT shell
|
9
|
-
if "%OS%"=="Windows_NT" setlocal
|
10
|
-
|
11
|
-
set DIRNAME=%~dp0
|
12
|
-
if "%DIRNAME%" == "" set DIRNAME=.
|
13
|
-
set APP_BASE_NAME=%~n0
|
14
|
-
set APP_HOME=%DIRNAME%
|
15
|
-
|
16
|
-
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
17
|
-
set DEFAULT_JVM_OPTS=
|
18
|
-
|
19
|
-
@rem Find java.exe
|
20
|
-
if defined JAVA_HOME goto findJavaFromJavaHome
|
21
|
-
|
22
|
-
set JAVA_EXE=java.exe
|
23
|
-
%JAVA_EXE% -version >NUL 2>&1
|
24
|
-
if "%ERRORLEVEL%" == "0" goto init
|
25
|
-
|
26
|
-
echo.
|
27
|
-
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
28
|
-
echo.
|
29
|
-
echo Please set the JAVA_HOME variable in your environment to match the
|
30
|
-
echo location of your Java installation.
|
31
|
-
|
32
|
-
goto fail
|
33
|
-
|
34
|
-
:findJavaFromJavaHome
|
35
|
-
set JAVA_HOME=%JAVA_HOME:"=%
|
36
|
-
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
37
|
-
|
38
|
-
if exist "%JAVA_EXE%" goto init
|
39
|
-
|
40
|
-
echo.
|
41
|
-
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
42
|
-
echo.
|
43
|
-
echo Please set the JAVA_HOME variable in your environment to match the
|
44
|
-
echo location of your Java installation.
|
45
|
-
|
46
|
-
goto fail
|
47
|
-
|
48
|
-
:init
|
49
|
-
@rem Get command-line arguments, handling Windows variants
|
50
|
-
|
51
|
-
if not "%OS%" == "Windows_NT" goto win9xME_args
|
52
|
-
|
53
|
-
:win9xME_args
|
54
|
-
@rem Slurp the command line arguments.
|
55
|
-
set CMD_LINE_ARGS=
|
56
|
-
set _SKIP=2
|
57
|
-
|
58
|
-
:win9xME_args_slurp
|
59
|
-
if "x%~1" == "x" goto execute
|
60
|
-
|
61
|
-
set CMD_LINE_ARGS=%*
|
62
|
-
|
63
|
-
:execute
|
64
|
-
@rem Setup the command line
|
65
|
-
|
66
|
-
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
67
|
-
|
68
|
-
@rem Execute Gradle
|
69
|
-
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
70
|
-
|
71
|
-
:end
|
72
|
-
@rem End local scope for the variables with windows NT shell
|
73
|
-
if "%ERRORLEVEL%"=="0" goto mainEnd
|
74
|
-
|
75
|
-
:fail
|
76
|
-
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
77
|
-
rem the _cmd.exe /c_ return code!
|
78
|
-
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
79
|
-
exit /b 1
|
80
|
-
|
81
|
-
:mainEnd
|
82
|
-
if "%OS%"=="Windows_NT" endlocal
|
83
|
-
|
84
|
-
:omega
|
1
|
+
@if "%DEBUG%" == "" @echo off
|
2
|
+
@rem ##########################################################################
|
3
|
+
@rem
|
4
|
+
@rem Gradle startup script for Windows
|
5
|
+
@rem
|
6
|
+
@rem ##########################################################################
|
7
|
+
|
8
|
+
@rem Set local scope for the variables with windows NT shell
|
9
|
+
if "%OS%"=="Windows_NT" setlocal
|
10
|
+
|
11
|
+
set DIRNAME=%~dp0
|
12
|
+
if "%DIRNAME%" == "" set DIRNAME=.
|
13
|
+
set APP_BASE_NAME=%~n0
|
14
|
+
set APP_HOME=%DIRNAME%
|
15
|
+
|
16
|
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
17
|
+
set DEFAULT_JVM_OPTS="-Xmx64m"
|
18
|
+
|
19
|
+
@rem Find java.exe
|
20
|
+
if defined JAVA_HOME goto findJavaFromJavaHome
|
21
|
+
|
22
|
+
set JAVA_EXE=java.exe
|
23
|
+
%JAVA_EXE% -version >NUL 2>&1
|
24
|
+
if "%ERRORLEVEL%" == "0" goto init
|
25
|
+
|
26
|
+
echo.
|
27
|
+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
28
|
+
echo.
|
29
|
+
echo Please set the JAVA_HOME variable in your environment to match the
|
30
|
+
echo location of your Java installation.
|
31
|
+
|
32
|
+
goto fail
|
33
|
+
|
34
|
+
:findJavaFromJavaHome
|
35
|
+
set JAVA_HOME=%JAVA_HOME:"=%
|
36
|
+
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
37
|
+
|
38
|
+
if exist "%JAVA_EXE%" goto init
|
39
|
+
|
40
|
+
echo.
|
41
|
+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
42
|
+
echo.
|
43
|
+
echo Please set the JAVA_HOME variable in your environment to match the
|
44
|
+
echo location of your Java installation.
|
45
|
+
|
46
|
+
goto fail
|
47
|
+
|
48
|
+
:init
|
49
|
+
@rem Get command-line arguments, handling Windows variants
|
50
|
+
|
51
|
+
if not "%OS%" == "Windows_NT" goto win9xME_args
|
52
|
+
|
53
|
+
:win9xME_args
|
54
|
+
@rem Slurp the command line arguments.
|
55
|
+
set CMD_LINE_ARGS=
|
56
|
+
set _SKIP=2
|
57
|
+
|
58
|
+
:win9xME_args_slurp
|
59
|
+
if "x%~1" == "x" goto execute
|
60
|
+
|
61
|
+
set CMD_LINE_ARGS=%*
|
62
|
+
|
63
|
+
:execute
|
64
|
+
@rem Setup the command line
|
65
|
+
|
66
|
+
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
67
|
+
|
68
|
+
@rem Execute Gradle
|
69
|
+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
70
|
+
|
71
|
+
:end
|
72
|
+
@rem End local scope for the variables with windows NT shell
|
73
|
+
if "%ERRORLEVEL%"=="0" goto mainEnd
|
74
|
+
|
75
|
+
:fail
|
76
|
+
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
77
|
+
rem the _cmd.exe /c_ return code!
|
78
|
+
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
79
|
+
exit /b 1
|
80
|
+
|
81
|
+
:mainEnd
|
82
|
+
if "%OS%"=="Windows_NT" endlocal
|
83
|
+
|
84
|
+
:omega
|
@@ -1,7 +1,6 @@
|
|
1
1
|
package org.embulk.input.remote
|
2
2
|
|
3
3
|
import com.fasterxml.jackson.annotation.JsonProperty
|
4
|
-
import com.google.common.base.Optional
|
5
4
|
import org.embulk.config.Config
|
6
5
|
import org.embulk.config.ConfigDefault
|
7
6
|
import org.embulk.config.ConfigDiff
|
@@ -21,6 +20,7 @@ import java.io.ByteArrayOutputStream
|
|
21
20
|
import java.io.IOException
|
22
21
|
import java.io.InputStream
|
23
22
|
import java.io.InputStreamReader
|
23
|
+
import java.util.Optional
|
24
24
|
|
25
25
|
class RemoteFileInputPlugin : FileInputPlugin {
|
26
26
|
interface PluginTask : Task {
|
@@ -85,6 +85,10 @@ class RemoteFileInputPlugin : FileInputPlugin {
|
|
85
85
|
@get:Config("skip_host_key_verification")
|
86
86
|
@get:ConfigDefault("false")
|
87
87
|
val skipHostKeyVerification: Boolean
|
88
|
+
|
89
|
+
@get:Config("load_known_hosts")
|
90
|
+
@get:ConfigDefault("true")
|
91
|
+
val loadKnownHosts: Boolean
|
88
92
|
}
|
89
93
|
|
90
94
|
private val log = getLogger()
|
@@ -149,13 +153,13 @@ class RemoteFileInputPlugin : FileInputPlugin {
|
|
149
153
|
}
|
150
154
|
|
151
155
|
private fun listHosts(task: PluginTask): List<String> {
|
152
|
-
return task.hostsCommand.
|
156
|
+
return task.hostsCommand.map {
|
153
157
|
execCommand(it).split(task.hostsSeparator.toRegex())
|
154
|
-
}.
|
158
|
+
}.orElse(task.hosts)
|
155
159
|
}
|
156
160
|
|
157
161
|
private fun getPath(task: PluginTask): String {
|
158
|
-
return task.pathCommand.
|
162
|
+
return task.pathCommand.map { execCommand(it) }.orElse(task.path)
|
159
163
|
}
|
160
164
|
|
161
165
|
private fun execCommand(command: String?): String {
|
@@ -23,20 +23,22 @@ class SSHClient private constructor(val client: SSHJ) : Closeable {
|
|
23
23
|
if (authConfig.skipHostKeyVerification) {
|
24
24
|
client.addHostKeyVerifier(PromiscuousVerifier())
|
25
25
|
}
|
26
|
-
|
26
|
+
if (authConfig.loadKnownHosts) {
|
27
|
+
client.loadKnownHosts()
|
28
|
+
}
|
27
29
|
client.connect(host, port)
|
28
30
|
|
29
31
|
val type = authConfig.type
|
30
|
-
val user = authConfig.user.
|
32
|
+
val user = authConfig.user.orElse(System.getProperty("user.name"))
|
31
33
|
|
32
34
|
when (type) {
|
33
35
|
"password" -> {
|
34
36
|
client.authPassword(user, authConfig.password.get())
|
35
37
|
}
|
36
38
|
"public_key" -> {
|
37
|
-
authConfig.keyPath.
|
39
|
+
authConfig.keyPath.map {
|
38
40
|
client.authPublickey(user, it)
|
39
|
-
}.
|
41
|
+
}.orElseGet {
|
40
42
|
client.authPublickey(user)
|
41
43
|
}
|
42
44
|
}
|
@@ -5,22 +5,20 @@ import ch.qos.logback.classic.Logger
|
|
5
5
|
import com.github.dockerjava.core.DockerClientBuilder
|
6
6
|
import org.embulk.config.ConfigSource
|
7
7
|
import org.embulk.test.EmbulkPluginTest
|
8
|
+
import org.embulk.test.EmbulkTest
|
8
9
|
import org.embulk.test.TestOutputPlugin.Matcher.assertRecords
|
9
10
|
import org.embulk.test.configFromResource
|
10
11
|
import org.embulk.test.record
|
11
|
-
import org.embulk.test.registerPlugin
|
12
12
|
import org.embulk.test.set
|
13
13
|
import org.hamcrest.CoreMatchers.`is`
|
14
14
|
import org.hamcrest.MatcherAssert.assertThat
|
15
|
-
import org.junit.
|
16
|
-
import org.junit.
|
17
|
-
import org.junit.Test
|
15
|
+
import org.junit.jupiter.api.BeforeEach
|
16
|
+
import org.junit.jupiter.api.Test
|
18
17
|
import org.slf4j.LoggerFactory
|
19
18
|
|
19
|
+
@EmbulkTest(value = [RemoteFileInputPlugin::class])
|
20
20
|
class TestRemoteFileInputPlugin : EmbulkPluginTest() {
|
21
|
-
@
|
22
|
-
builder.registerPlugin(RemoteFileInputPlugin::class)
|
23
|
-
|
21
|
+
@BeforeEach fun setup() {
|
24
22
|
// Setup docker container
|
25
23
|
startContainer(CONTAINER_ID_HOST1)
|
26
24
|
startContainer(CONTAINER_ID_HOST2)
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-remote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shinichi Ishimura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- - ~>
|
16
|
+
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
18
|
version: '1.0'
|
19
19
|
name: bundler
|
@@ -21,13 +21,13 @@ dependencies:
|
|
21
21
|
type: :development
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
|
-
- -
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '10.0'
|
33
33
|
name: rake
|
@@ -35,7 +35,7 @@ dependencies:
|
|
35
35
|
type: :development
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
description: Reads files stored on Remote hosts by SCP.
|
@@ -45,11 +45,20 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- .circleci/config.yml
|
49
|
-
- .gitignore
|
48
|
+
- ".circleci/config.yml"
|
49
|
+
- ".gitignore"
|
50
50
|
- LICENSE.txt
|
51
51
|
- README.md
|
52
52
|
- build.gradle
|
53
|
+
- classpath/annotations-13.0.jar
|
54
|
+
- classpath/bcpkix-jdk15on-1.60.jar
|
55
|
+
- classpath/bcprov-jdk15on-1.60.jar
|
56
|
+
- classpath/eddsa-0.2.0.jar
|
57
|
+
- classpath/embulk-input-remote-0.4.2.jar
|
58
|
+
- classpath/jzlib-1.1.3.jar
|
59
|
+
- classpath/kotlin-stdlib-1.3.10.jar
|
60
|
+
- classpath/kotlin-stdlib-common-1.3.10.jar
|
61
|
+
- classpath/sshj-0.26.0.jar
|
53
62
|
- config/checkstyle/checkstyle.xml
|
54
63
|
- config/checkstyle/default.xml
|
55
64
|
- docker-compose.yml
|
@@ -69,14 +78,6 @@ files:
|
|
69
78
|
- src/test/resources/input/host2/test_command.csv
|
70
79
|
- src/test/resources/script/hosts.sh
|
71
80
|
- src/test/resources/yaml/base.yml
|
72
|
-
- classpath/embulk-input-remote-0.4.1.jar
|
73
|
-
- classpath/bcpkix-jdk15on-1.57.jar
|
74
|
-
- classpath/kotlin-stdlib-1.2.31.jar
|
75
|
-
- classpath/sshj-0.24.0.jar
|
76
|
-
- classpath/jzlib-1.1.3.jar
|
77
|
-
- classpath/eddsa-0.2.0.jar
|
78
|
-
- classpath/annotations-13.0.jar
|
79
|
-
- classpath/bcprov-jdk15on-1.57.jar
|
80
81
|
homepage: https://github.com/kamatama41/embulk-input-remote
|
81
82
|
licenses:
|
82
83
|
- MIT
|
@@ -87,17 +88,17 @@ require_paths:
|
|
87
88
|
- lib
|
88
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
90
|
requirements:
|
90
|
-
- -
|
91
|
+
- - ">="
|
91
92
|
- !ruby/object:Gem::Version
|
92
93
|
version: '0'
|
93
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
95
|
requirements:
|
95
|
-
- -
|
96
|
+
- - ">="
|
96
97
|
- !ruby/object:Gem::Version
|
97
98
|
version: '0'
|
98
99
|
requirements: []
|
99
100
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.
|
101
|
+
rubygems_version: 2.6.8
|
101
102
|
signing_key:
|
102
103
|
specification_version: 4
|
103
104
|
summary: Remote file input plugin for Embulk
|