Testēšana ir izstrādes procesa neatņemama sastāvdaļa. Un dažreiz izstrādātājiem pirms izmaiņu veikšanas ir jāveic testi lokāli.
Ja lietojumprogramma izmanto Amazon Web pakalpojumi, pitons библиотека moto ideāls šim.
Pilnu resursu pārklājuma sarakstu var apskatīt
Githubā ir rācenis Hugo Pikado Sākot no
Labi, to ir pietiekami viegli salabot.
Kopš sākuma jums ir jānorāda pakalpojuma veids (env mainīgais MOTO_SERVICE), mums tikai jāapraksta resursa izveide.
Mazliet pamainīsim start.sh:
Tā vietā, lai
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
Ievietot:
if [ -f /opt/init/bootstrap.py ]; then
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Executing bootstrap script." && python /opt/init/bootstrap.py)
else
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
fi
wait
Galīgais fails ir:
start.sh
#!/bin/sh
# validate required input
if [ -z "$MOTO_SERVICE" ]; then
echo "Please define AWS service to run with Moto Server (e.g. s3, ec2, etc)"
exit 1
fi
# setting defaults for optional input
if [ -z "$MOTO_HOST" ]; then
MOTO_HOST="0.0.0.0"
fi
if [ -z "$MOTO_PORT" ]; then
MOTO_PORT="5000"
fi
echo "Starting service $MOTO_SERVICE at $MOTO_HOST:$MOTO_PORT"
if [ -f /opt/init/bootstrap.py ]; then
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT & (sleep 5 && echo "Executing bootstrap script." && python /opt/init/bootstrap.py)
else
moto_server $MOTO_SERVICE -H $MOTO_HOST -p $MOTO_PORT
fi
# Prevent container from exiting when bootstrap.py finishing
wait
Mēs izveidojam jaunu attēlu un ievietojam to savā reģistrā.
Tālāk, piemēram, uzrakstīsim resursa inicializācijas skriptu SWF domēns, izmantojot bibliotēku darbam ar AWS - boto3:
bootstrap_swf.py
import boto3
from botocore.exceptions import ClientError
import os
os.environ["AWS_ACCESS_KEY_ID"] = "fake"
os.environ["AWS_SECRET_ACCESS_KEY"] = "fake"
client = boto3.client('swf', region_name='us-west-2', endpoint_url='http://localhost:5000')
try:
client.register_domain(
name='test-swf-mock-domain',
description="Test SWF domain",
workflowExecutionRetentionPeriodInDays="10"
)
except ClientError as e:
print "Domain already exists: ", e.response.get("Error", {}).get("Code")
response = client.list_domains(
registrationStatus='REGISTERED',
maximumPageSize=123,
reverseOrder=True|False
)
print 'Ready'
Loģika ir šāda:
- Sākot darbu, mēs ievietojam savu skriptu /opt/init/bootstrap.py.
- Ja fails ir uzstādīts, tas tiks izpildīts.
- Ja faila nav, tukšais moto-serveris vienkārši startēs.
Un jūs varat izsmiet visu resursu, palaižot vienu konteineru:
docker run --name swf -d
-e MOTO_SERVICE=swf
-e MOTO_HOST=0.0.0.0
-e MOTO_PORT=5000
-p 5001:5000
-v /tmp/bootstrap_swf.py:/opt/init/bootstrap.py
-i awesome-repo.com/moto-server:latest
Izmēģināsim to interaktīvi:
Tas darbojas!
Tātad mēs varam izveidot docker-compose.yml, kas ietaupīs laiku, pārbaudot izmaiņas:
docker-compose.yml
version: '3'
services:
s3:
image: picadoh/motocker
environment:
- MOTO_SERVICE=s3
- MOTO_HOST=10.0.1.2
ports:
- "5002:5000"
networks:
motonet:
ipv4_address: 10.0.1.2
volumes:
- /tmp/bootstrap_s3.py:/opt/init/bootstrap.py
swf:
image: picadoh/motocker
environment:
- MOTO_SERVICE=swf
- MOTO_HOST=10.0.1.3
ports:
- "5001:5000"
networks:
motonet:
ipv4_address: 10.0.1.3
volumes:
- /tmp/bootstrap_swf.py:/opt/init/bootstrap.py
ec2:
image: picadoh/motocker
environment:
- MOTO_SERVICE=ec2
- MOTO_HOST=10.0.1.4
ports:
- "5003:5000"
networks:
motonet:
ipv4_address: 10.0.1.4
volumes:
- /tmp/bootstrap_ec2.py:/opt/init/bootstrap.py
networks:
motonet:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/16
Faktiski šo pieeju var izmantot ne tikai izstrādātāja klēpjdatorā. Sākotnējie testi ar izspēles pēc montāžas palīdzēs atbrīvoties no iespējamām problēmām, darbojoties izstrādātāju* vidēs.
Saites:
Motocker repo —
Moto repo —
Boto3 dokumenti —
Avots: www.habr.com