embulk-input-ftp 0.1.3 → 0.1.4
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/.travis.yml +5 -0
- data/ChangeLog +4 -0
- data/README.md +22 -1
- data/build.gradle +2 -1
- data/src/main/java/org/embulk/input/FtpFileInputPlugin.java +35 -13
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14c9dbe5aaed1c2ff8e3e48ac58aa331a6b59370
|
4
|
+
data.tar.gz: 390c47334bce6509c343229f1ac43625b05923e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 632782394767ea3b3fccb39ac1b2cfed6904b360c159a339a81e047edc348301584b07e5d40267a124e0b20b1259149c192aa758c15a6073906c97f7947b5021
|
7
|
+
data.tar.gz: e8e221d03695924300cea6ae91fe70ed77b82a7f0760f0ce90208cda887842e1e0aa853bf660ab7a021edef68e81395dcfd029a4785a29c100af68130712a2da
|
data/.travis.yml
ADDED
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
## Overview
|
4
4
|
|
5
|
+
This plugin support **FTP**, **FTPES(FTPS explicit)**, **FTPS(FTPS implicit)** and doesn't support **SFTP**.
|
6
|
+
|
7
|
+
If you want to use SFTP, please use [embulk-input-sftp](https://github.com/embulk/embulk-input-sftp).
|
8
|
+
|
9
|
+
|
5
10
|
* **Plugin type**: file input
|
6
11
|
* **Resume supported**: yes
|
7
12
|
* **Cleanup supported**: yes
|
@@ -9,18 +14,34 @@
|
|
9
14
|
## Configuration
|
10
15
|
|
11
16
|
- **host**: FTP server address (string, required)
|
12
|
-
- **port**: FTP server port number (integer, default: `21`. `990` if `ssl` is true)
|
17
|
+
- **port**: FTP server port number (integer, default: `21`. `990` if `ssl` is true and `ssl_explicit` is false)
|
13
18
|
- **user**: user name to login (string, optional)
|
14
19
|
- **password**: password to login (string, default: `""`)
|
15
20
|
- **path_prefix** prefix of target files (string, required)
|
21
|
+
- **incremental** enables incremental loading(boolean, optional. default: true. If incremental loading is enabled, config diff for the next execution will include last_path parameter so that next execution skips files before the path. Otherwise, last_path will not be included.
|
16
22
|
- **passive_mode**: use passive mode (boolean, default: true)
|
17
23
|
- **ascii_mode**: use ASCII mode instead of binary mode (boolean, default: false)
|
18
24
|
- **ssl**: use FTPS (SSL encryption). (boolean, default: false)
|
25
|
+
- **ssl_explicit** use FTPS(explicit) instead of FTPS(implicit). (boolean, default:true)
|
19
26
|
- **ssl_verify**: verify the certification provided by the server. By default, connection fails if the server certification is not signed by one the CAs in JVM's default trusted CA list. (boolean, default: true)
|
20
27
|
- **ssl_verify_hostname**: verify server's hostname matches with provided certificate. (boolean, default: true)
|
21
28
|
- **ssl_trusted_ca_cert_file**: if the server certification is not signed by a certificate authority, set path to the X.508 certification file (pem file) of a private CA (string, optional)
|
22
29
|
- **ssl_trusted_ca_cert_data**: similar to `ssl_trusted_ca_cert_file` but embed the contents of the PEM file as a string value instead of path to a local file (string, optional)
|
23
30
|
|
31
|
+
### FTP / FTPS default port number
|
32
|
+
|
33
|
+
FTP and FTPS server usually listens following port number(TCP) as default.
|
34
|
+
|
35
|
+
Please be sure to configure firewall rules.
|
36
|
+
|
37
|
+
| | FTP | FTPS(explicit) = FTPES | FTPS(implicit) = FTPS |
|
38
|
+
|:------------------------|----:|-----------------------:|----------------------:|
|
39
|
+
| Control channel port | 21 | 21 | 990 (\*1) |
|
40
|
+
| Data channel port (\*2) | 20 | 20 | 989 |
|
41
|
+
|
42
|
+
1. If you're using both of FTPS(implicit) and FTP, server may also listen 21/TCP for unecnrypted FTP.
|
43
|
+
2. If you're using `passive mode`, data channel port can be taken between 1024 and 65535.
|
44
|
+
|
24
45
|
## Example
|
25
46
|
|
26
47
|
Simple FTP:
|
data/build.gradle
CHANGED
@@ -2,6 +2,7 @@ plugins {
|
|
2
2
|
id "com.jfrog.bintray" version "1.1"
|
3
3
|
id "com.github.jruby-gradle.base" version "0.1.5"
|
4
4
|
id "java"
|
5
|
+
id "jacoco"
|
5
6
|
}
|
6
7
|
import com.github.jrubygradle.JRubyExec
|
7
8
|
repositories {
|
@@ -12,7 +13,7 @@ configurations {
|
|
12
13
|
provided
|
13
14
|
}
|
14
15
|
|
15
|
-
version = "0.1.
|
16
|
+
version = "0.1.4"
|
16
17
|
|
17
18
|
dependencies {
|
18
19
|
compile "org.embulk:embulk-core:0.7.0"
|
@@ -51,6 +51,9 @@ public class FtpFileInputPlugin
|
|
51
51
|
implements FileInputPlugin
|
52
52
|
{
|
53
53
|
private final Logger log = Exec.getLogger(FtpFileInputPlugin.class);
|
54
|
+
private static final int FTP_DEFULAT_PORT = 21;
|
55
|
+
private static final int FTPS_DEFAULT_PORT = 990;
|
56
|
+
private static final int FTPES_DEFAULT_PORT = 21;
|
54
57
|
|
55
58
|
public interface PluginTask
|
56
59
|
extends Task, SSLPlugins.SSLPluginTask
|
@@ -62,6 +65,10 @@ public class FtpFileInputPlugin
|
|
62
65
|
@ConfigDefault("null")
|
63
66
|
public Optional<String> getLastPath();
|
64
67
|
|
68
|
+
@Config("incremental")
|
69
|
+
@ConfigDefault("true")
|
70
|
+
public boolean getIncremental();
|
71
|
+
|
65
72
|
@Config("host")
|
66
73
|
public String getHost();
|
67
74
|
|
@@ -89,6 +96,10 @@ public class FtpFileInputPlugin
|
|
89
96
|
@ConfigDefault("false")
|
90
97
|
public boolean getSsl();
|
91
98
|
|
99
|
+
@Config("ssl_explicit")
|
100
|
+
@ConfigDefault("true")
|
101
|
+
public boolean getSslExplicit();
|
102
|
+
|
92
103
|
public List<String> getFiles();
|
93
104
|
public void setFiles(List<String> files);
|
94
105
|
|
@@ -130,15 +141,17 @@ public class FtpFileInputPlugin
|
|
130
141
|
ConfigDiff configDiff = Exec.newConfigDiff();
|
131
142
|
|
132
143
|
// last_path
|
133
|
-
if (task.
|
134
|
-
|
135
|
-
|
136
|
-
|
144
|
+
if (task.getIncremental()) {
|
145
|
+
if (task.getFiles().isEmpty()) {
|
146
|
+
// keep the last value
|
147
|
+
if (task.getLastPath().isPresent()) {
|
148
|
+
configDiff.set("last_path", task.getLastPath().get());
|
149
|
+
}
|
150
|
+
} else {
|
151
|
+
List<String> files = new ArrayList<String>(task.getFiles());
|
152
|
+
Collections.sort(files);
|
153
|
+
configDiff.set("last_path", files.get(files.size() - 1));
|
137
154
|
}
|
138
|
-
} else {
|
139
|
-
List<String> files = new ArrayList<String>(task.getFiles());
|
140
|
-
Collections.sort(files);
|
141
|
-
configDiff.set("last_path", files.get(files.size() - 1));
|
142
155
|
}
|
143
156
|
|
144
157
|
return configDiff;
|
@@ -156,10 +169,21 @@ public class FtpFileInputPlugin
|
|
156
169
|
{
|
157
170
|
FTPClient client = new FTPClient();
|
158
171
|
try {
|
172
|
+
int defaultPort = FTP_DEFULAT_PORT;
|
159
173
|
if (task.getSsl()) {
|
160
174
|
client.setSSLSocketFactory(SSLPlugins.newSSLSocketFactory(task.getSSLConfig(), task.getHost()));
|
161
|
-
|
175
|
+
if (task.getSslExplicit()) {
|
176
|
+
client.setSecurity(FTPClient.SECURITY_FTPES);
|
177
|
+
defaultPort = FTPES_DEFAULT_PORT;
|
178
|
+
log.info("Using FTPES(FTPS/explicit) mode");
|
179
|
+
}
|
180
|
+
else {
|
181
|
+
client.setSecurity(FTPClient.SECURITY_FTPS);
|
182
|
+
defaultPort = FTPS_DEFAULT_PORT;
|
183
|
+
log.info("Using FTPS(FTPS/implicit) mode");
|
184
|
+
}
|
162
185
|
}
|
186
|
+
int port = task.getPort().isPresent()? task.getPort().get() : defaultPort;
|
163
187
|
|
164
188
|
client.addCommunicationListener(new LoggingCommunicationListner(log));
|
165
189
|
|
@@ -178,10 +202,8 @@ public class FtpFileInputPlugin
|
|
178
202
|
//client.setDataTimeout
|
179
203
|
//client.setAutodetectUTF8
|
180
204
|
|
181
|
-
|
182
|
-
|
183
|
-
client.connect(task.getHost(), task.getPort().get());
|
184
|
-
}
|
205
|
+
client.connect(task.getHost(), port);
|
206
|
+
log.info("Connecting to {}:{}",task.getHost(),port);
|
185
207
|
|
186
208
|
if (task.getUser().isPresent()) {
|
187
209
|
log.info("Logging in with user "+task.getUser().get());
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-ftp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
14
|
requirement: !ruby/object:Gem::Requirement
|
21
15
|
requirements:
|
22
16
|
- - ~>
|
23
17
|
- !ruby/object:Gem::Version
|
24
18
|
version: '1.0'
|
19
|
+
name: bundler
|
25
20
|
prerelease: false
|
26
21
|
type: :development
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
|
-
- -
|
24
|
+
- - ~>
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
30
|
- - '>='
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: '10.0'
|
33
|
+
name: rake
|
39
34
|
prerelease: false
|
40
35
|
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
41
|
description: Reads files stored on a FTP server.
|
42
42
|
email:
|
43
43
|
- frsyuki@gmail.com
|
@@ -46,6 +46,7 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- .gitignore
|
49
|
+
- .travis.yml
|
49
50
|
- ChangeLog
|
50
51
|
- README.md
|
51
52
|
- build.gradle
|
@@ -62,7 +63,7 @@ files:
|
|
62
63
|
- src/test/java/org/embulk/input/TestFtpFileInputPlugin.java
|
63
64
|
- classpath/bcpkix-jdk15on-1.52.jar
|
64
65
|
- classpath/bcprov-jdk15on-1.52.jar
|
65
|
-
- classpath/embulk-input-ftp-0.1.
|
66
|
+
- classpath/embulk-input-ftp-0.1.4.jar
|
66
67
|
- classpath/ftp4j-1.7.2.jar
|
67
68
|
homepage: https://github.com/embulk/embulk-input-ftp
|
68
69
|
licenses:
|