diff --git a/.env.example b/.env.example index b754e66..ae025e5 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ FREEDNS_User=MyFreeDNSUsername FREEDNS_Password=MyFreeDNSPassword -DOMAIN_NAME=mydomain.com \ No newline at end of file +DOMAIN_NAME=mydomain.com +SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EMYPUBLICKEY7+" \ No newline at end of file diff --git a/.gitea/workflows/aws_deploy_on_push.yml b/.gitea/workflows/aws_deploy_on_push.yml index f188a44..f910933 100644 --- a/.gitea/workflows/aws_deploy_on_push.yml +++ b/.gitea/workflows/aws_deploy_on_push.yml @@ -43,6 +43,7 @@ jobs: FREEDNS_User: ${{ secrets.FREEDNS_USER }} FREEDNS_Password: ${{ secrets.FREEDNS_PASSWORD }} DOMAIN_NAME: ${{ secrets.DOMAIN_NAME }} + SSH_PUBLIC_KEY: ${{ secrets.SSH_PUBLIC_KEY }} - name: Install AWS CLI run: | diff --git a/app.py b/app.py index 5c2f356..1bd7038 100644 --- a/app.py +++ b/app.py @@ -9,6 +9,7 @@ app = cdk.App() freedns_user = os.environ.get("FREEDNS_User") freedns_password = os.environ.get("FREEDNS_Password") domain_name = os.environ.get("DOMAIN_NAME") +ssh_public_key = os.environ.get("SSH_PUBLIC_KEY") if not freedns_user or not freedns_password: raise ValueError("FREEDNS_User and FREEDNS_Password environment variables must be set.") @@ -16,10 +17,14 @@ if not freedns_user or not freedns_password: if not domain_name: raise ValueError("DOMAIN_NAME environment variable must be set.") +if not ssh_public_key: # Check if SSH public key is set + raise ValueError("SSH_PUBLIC_KEY environment variable must be set.") + IptvUpdaterStack(app, "IptvUpdaterStack", freedns_user=freedns_user, freedns_password=freedns_password, domain_name=domain_name, + ssh_public_key=ssh_public_key, # If you don't specify 'env', the stack will be deployed to the account and region that are # configured in your AWS CLI profile. Defaulting to the environment where the CLI is configured. # env=cdk.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')), diff --git a/infrastructure/stack.py b/infrastructure/stack.py index 540b50a..efc4fe9 100644 --- a/infrastructure/stack.py +++ b/infrastructure/stack.py @@ -18,6 +18,7 @@ class IptvUpdaterStack(Stack): freedns_user: str, freedns_password: str, domain_name: str, + ssh_public_key: str, **kwargs ) -> None: super().__init__(scope, construct_id, **kwargs) @@ -65,7 +66,7 @@ class IptvUpdaterStack(Stack): self, "IptvUpdaterKeyPair", key_pair_name="iptv-updater-key", - public_key_material="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDZcD20mfOQ/al6VMXWWUcUILYIHyIy5gY9RmC6koicaMYTJ078yMUnYw9DONEIfvxZwceTrtdUWv7vOXjknh1bberF78Pi3vwwFKazdgjbyZnkM9r2N40+PqfOFYf03B53VIA8jdae6gaD3VvYdlwV5dqqW3N+JE/+7sXHLeENnqxeS5jNLoRKDIxHgV4MBnewWNdp77ZEHZFrG3Fj/0lnqq2EfDh+5E/Vhkc/mzkuXu2l5Z1szw2rcjJz4IYUjgnClorBVlmWwwiICrHbyVCYivaaVvpVmZoBy7WW1P8KFAiot4G6C0Klyn4sy2AwCQ7u65TyDtbCR89VuuwW0zLgERAfWMdhn/5HdIudcTScXEsUsADTqxb2x0IXVbs3uhxHCUcc7BVg0S7dpAbmpK+80NlDCH38LFcyrYASRD6/Le2skVePIFt0Tw1OnwPH/QqPG0Y9vLZJl8779pg+kpk+o1MaRnczPq9Sk9zr3dR4Sv82CObnjTeY5LCTvs06JBCtcey/vLk7RQYs43uXZgg746aWIcM0lgHPivh2JpUOAd/Kj1v4aEXTRgHyPPLQ4KKwnALcd4s6+ytXwf4gxumRmPf/7P6HYJQvY8pfVda8jEvu08rvSVMXb09Jq4tzS/JTX2flfEdF0qIyTNHnK/lum27fgP0yq6Pq24IWYXha9w== stefano@MSI" + public_key_material=ssh_public_key ) # Create IAM role for EC2 diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 098434f..6f39157 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -1,13 +1,16 @@ #!/bin/bash # Load environment variables from .env file if it exists -if [ -f .env ]; then - export $(cat .env | xargs) +if [ -f ${PWD}/.env ]; then + # Use set -a to automatically export all variables + set -a + source ${PWD}/.env + set +a fi # Check if required environment variables are set -if [ -z "$FREEDNS_User" ] || [ -z "$FREEDNS_Password" ] || [ -z "$DOMAIN_NAME" ]; then - echo "Error: FREEDNS_User, FREEDNS_Password, and DOMAIN_NAME must be set as environment variables or in a .env file." +if [ -z "$FREEDNS_User" ] || [ -z "$FREEDNS_Password" ] || [ -z "$DOMAIN_NAME" ] || [ -z "$SSH_PUBLIC_KEY" ]; then + echo "Error: FREEDNS_User, FREEDNS_Password, DOMAIN_NAME, and SSH_PUBLIC_KEY must be set as environment variables or in a .env file." exit 1 fi diff --git a/scripts/destroy.sh b/scripts/destroy.sh index 141e61e..1878bcf 100755 --- a/scripts/destroy.sh +++ b/scripts/destroy.sh @@ -2,18 +2,17 @@ # Load environment variables from .env file if it exists if [ -f ${PWD}/.env ]; then - export $(cat ${PWD}/.env | xargs) + # Use set -a to automatically export all variables + set -a + source ${PWD}/.env + set +a fi # Check if required environment variables are set -if [ -z "$FREEDNS_User" ] || [ -z "$FREEDNS_Password" ] || [ -z "$DOMAIN_NAME" ]; then - echo "Error: FREEDNS_User, FREEDNS_Password, and DOMAIN_NAME must be set as environment variables or in a .env file." +if [ -z "$FREEDNS_User" ] || [ -z "$FREEDNS_Password" ] || [ -z "$DOMAIN_NAME" ] || [ -z "$SSH_PUBLIC_KEY" ]; then + echo "Error: FREEDNS_User, FREEDNS_Password, DOMAIN_NAME, and SSH_PUBLIC_KEY must be set as environment variables or in a .env file." exit 1 fi -# Optional: Print the variables being used (for verification) -echo "Using DOMAIN_NAME: $DOMAIN_NAME" -echo "Using FREEDNS_User: $FREEDNS_User" # Be cautious printing passwords - # Destroy infrastructure cdk destroy --app="python3 ${PWD}/app.py" --force \ No newline at end of file