Skip to content

Commit b022aaf

Browse files
committed
feat: add more configuration
1 parent 5498160 commit b022aaf

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

easyecs/command/__init__.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ def create_port_forwards(ecs_manifest, aws_region, aws_account, parsed_container
2828
for container in containers:
2929
container_name = container.name
3030
container_ports = container.port_forward
31+
if ecs_manifest.copy_method == "sftp":
32+
container_ports.append(f"{container.sftp_config.port}:{container.sftp_config.port}")
3133
for container_port in container_ports:
3234
from_port = container_port.split(":")[0]
3335
to_port = container_port.split(":")[1]
@@ -115,13 +117,16 @@ def run_sftp_sync_thread(ecs_manifest, aws_region, aws_account, parsed_container
115117
containers = ecs_manifest.task_definition.containers
116118
for container in containers:
117119
container_name = container.name
120+
port = container.sftp_config.port
121+
username = container.sftp_config.user
122+
password = container.sftp_config.password
118123
target = parsed_containers.get(container_name)["ssm_target"]
119124
if len(container.volumes) > 0:
120125
observer = Observer()
121126
for volume in container.volumes:
122127
_from, _ = volume.split(":")
123128
event_handler = SynchronizeSFTPEventHandler(
124-
target, aws_region, aws_account, volume, container.volumes_excludes
129+
target, aws_region, aws_account, volume, container.volumes_excludes, port, username, password
125130
)
126131
event_handlers.append(event_handler)
127132
observer.schedule(event_handler, _from, recursive=True)
@@ -314,7 +319,7 @@ def install_netcat_command(target, aws_region, aws_account) -> None:
314319
)
315320

316321

317-
def install_sshd_client(target, aws_region, aws_account, auto_install_override) -> None:
322+
def install_sshd_client(target, aws_region, aws_account, auto_install_override, port, user, password) -> None:
318323
DEBUG_EASYECS = os.environ.get("DEBUG_EASYECS", None)
319324
client = boto3.client("ssm")
320325
if len(auto_install_override) > 0:
@@ -324,25 +329,21 @@ def install_sshd_client(target, aws_region, aws_account, auto_install_override)
324329
print(f" - {' '.join(cmd)}")
325330
commands_server = auto_install_override
326331
else:
327-
if DEBUG_EASYECS:
328-
print(f"{Color.YELLOW}Using default auto install commands:{Color.END}")
329-
print(" - apt update")
330-
print(" - apt install -y openssh-server")
331-
print(" - echo 'root:root' | chpasswd")
332-
print(" - mkdir /run/sshd")
333-
print(' - echo "PermitRootLogin yes" >> /etc/ssh/sshd_config')
334-
print(' - echo "Port 2312" >> /etc/ssh/sshd_config')
335332
commands_server = [
336333
["apt update"],
337334
[
338335
"/bin/bash -c 'DEBIAN_FRONTEND=noninteractive apt install -y"
339336
" openssh-server'"
340337
],
341-
["/bin/bash -c 'echo 'root:root' | chpasswd'"],
338+
[f"/bin/bash -c 'echo '{user}:{password}' | chpasswd'"],
342339
["mkdir /run/sshd"],
343340
["/bin/bash -c 'echo \"PermitRootLogin yes\" >> /etc/ssh/sshd_config'"],
344-
["/bin/bash -c 'echo \"Port 2312\" >> /etc/ssh/sshd_config'"],
341+
[f"/bin/bash -c 'echo \"Port {port}\" >> /etc/ssh/sshd_config'"],
345342
]
343+
if DEBUG_EASYECS:
344+
print(f"{Color.YELLOW}Using default auto install commands:{Color.END}")
345+
for cmd in commands_server:
346+
print(f" - {' '.join(cmd)}")
346347
for command_server in commands_server:
347348
parameters_nc_server = {"command": command_server}
348349
ssm_nc_server = client.start_session(
@@ -446,8 +447,9 @@ def run_sftp_commands(
446447
else:
447448
if not has_sshd and auto_install_sftp:
448449
install_sshd_client(
449-
ssm_target, aws_region, aws_account, auto_install_override
450+
ssm_target, aws_region, aws_account, auto_install_override, container.sftp_config.port, container.sftp_config.user, container.sftp_config.password
450451
)
452+
time.sleep(2) # Wait a bit for sshd to be ready
451453
run_sshd_command(
452454
parsed_containers,
453455
aws_region,

easyecs/command/event/synchronize_event_handler.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ def netcat(hostname, port, content, input, output):
5959

6060

6161
def sftp(
62-
target, aws_region, aws_account, hostname, port, input, output, volumes_excludes
62+
target, aws_region, aws_account, hostname, port, username, password, input, output, volumes_excludes
6363
):
6464
from easyecs.command import generate_ssm_cmd
6565

6666
DEBUG_EASYECS = os.environ.get("DEBUG_EASYECS", None)
6767
try:
6868
ssh = paramiko.SSHClient()
6969
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
70-
ssh.connect(hostname, port=port, username="root", password="root")
70+
ssh.connect(hostname, port=port, username=username, password=password)
7171

7272
with SCPClient(ssh.get_transport()) as scp:
7373
if DEBUG_EASYECS:
@@ -161,7 +161,7 @@ def dispatch(self, event: FileSystemEvent):
161161

162162

163163
class SynchronizeSFTPEventHandler(FileSystemEventHandler):
164-
def __init__(self, target, aws_region, aws_account, volume, volumes_excludes):
164+
def __init__(self, target, aws_region, aws_account, volume, volumes_excludes, port, username, password):
165165
super().__init__()
166166
self.target = target
167167
self.aws_region = aws_region
@@ -173,14 +173,19 @@ def __init__(self, target, aws_region, aws_account, volume, volumes_excludes):
173173
self.output_dirname = dirname(self.output)
174174
self.last_event = datetime.datetime.now().timestamp()
175175
self.volumes_excludes = volumes_excludes
176+
self.port = port
177+
self.username = username
178+
self.password = password
176179

177180
def synchronize(self):
178181
sftp(
179182
self.target,
180183
self.aws_region,
181184
self.aws_account,
182185
"127.0.0.1",
183-
2312,
186+
self.port,
187+
self.username,
188+
self.password,
184189
self.input,
185190
self.output_dirname,
186191
self.volumes_excludes,

easyecs/model/ecs.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ class EcsFileContainerHealthCheckModel(BaseModel):
9696
timeout: int
9797

9898

99+
class EcsSftpConfig(BaseModel):
100+
port: int = 2312
101+
user: str = "root"
102+
password: str = "root"
103+
104+
99105
class EcsFileContainerModel(BaseModel):
100106
name: str
101107
image: str
@@ -115,6 +121,8 @@ class EcsFileContainerModel(BaseModel):
115121
healthcheck: Optional[EcsFileContainerHealthCheckModel] = None
116122
depends_on: Optional[Dict[str, Dict[str, str]]] = None
117123
ports: Optional[List[str]] = []
124+
sftp_config: EcsSftpConfig = EcsSftpConfig()
125+
118126

119127
@field_validator("volumes")
120128
def validate_volumes(cls, volumes):
@@ -218,13 +226,12 @@ def validate_subnets(self):
218226
)
219227
return self
220228

221-
222229
class EcsFileModel(BaseModel):
223230
metadata: EcsFileMetadataModel
224231
role: EcsFileRoleModel
225232
execution_role: EcsFileRoleModel
226233
task_definition: EcsTaskDefinitionModel
227234
load_balancer: Optional[EcsLoadBalancerModel] = None
228235
security_group_id: Optional[str] = None
229-
copy_method: str = "nc"
230236
auto_install_override: list[list[str]] = []
237+
copy_method: str = "nc"

0 commit comments

Comments
 (0)