Webux Lab

Par Studio Webux

Snippets

TG
Tommy Gingras Studio Webux S.E.N.C 2021-06-11

Snippets

Installer les packages de base pour un module nodeJS

J’utilise celle-ci pour installer les devDependencies dans un module

Voir Commande
npm i --save-dev \
eslint \
eslint-config-airbnb-base \
eslint-config-prettier \
eslint-plugin-import \
eslint-plugin-jest \
eslint-plugin-prettier \
jest \
jest-junit prettier

Itération dans les dossiers avec Bash

Cette snippet est utilisée pour faire des modifications dans un ensemble de dossiers rapidement.

Voir commande
process(){
  echo '> Do something here'
  echo 'e.g npm install'
  echo '---'
}

for dir in *;
do;
pushd $dir &> /dev/null
([ -f package.json ] && echo "$dir is using NodeJS") && process || echo "SKIP $dir"
popd &> /dev/null
done;

rsync les fichiers pour Docker

J’utilise une machine Linux pour Docker, donc j’utilise cette commande pour transférer mes changements

Voir commande
YOUR_LOCAL_DIR="./dir_to_sync"
USER="root"
IP_DOMAIN="1.2.3.4"
YOUR_REMOTE_DIR="dir_synced"

rsync -v -r ./$YOUR_LOCAL_DIR \
--exclude **/node_modules/ \
--exclude **/screenshots/ \
$USER@$IP_DOMAIN:~/$YOUR_REMOTE_DIR

Compter le nombre de fichiers dans un répertoire

ls | wc -l

Publier une version Alpha/Beta/Latest sur le npm registry

Alpha:

npm version 1.2.3-alpha
npm publish --tag alpha

Beta:

npm version 1.2.3-beta
npm publish --tag beta

Latest:

npm version 1.2.3
npm publish

Erreur avec CloudFormation

Errors found during import: Unable to put integration response on 'OPTIONS' for resource at path '/something': Invalid mapping expression specified: Validation Result: warnings

Solution:

export CORS_ORIGIN="\'https://webuxlab.com\'"
export CORS_HEADER="\'Content-Type,X-Api-Key,x-api-key\'"
export CORS_METHODS="\'POST,OPTIONS\'"
export CORS_MAX_AGE="\'600\'"
export CORS_ALLOW_CREDENTIALS="\'true\'"

N’oubliez pas les "\'contenu\'", sinon SAM ne sera pas capable de lire le contenu.


CloudWatch Logs role ARN must be set in account settings to enable logging

Solution, ces deux liens montrent comment configurer votre compte AWS.

Avec Cloudformation:

Pour simplifier, tout est dans le même template.

# Studio Webux S.E.N.C @ 2021

AWSTemplateFormatVersion: 2010-09-09
Description: Api Gateway Logs + IAM

Resources:
  ApiGatewayLog:
    Type: AWS::ApiGateway::Account
    Properties:
      CloudWatchRoleArn: !GetAtt ApiGatewayLogsRole.Arn

  ApiGatewayLogsRole:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: !Sub "ApiGatewayLogsRole"
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - apigateway.amazonaws.com
            Action:
              - "sts:AssumeRole"
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs

Outputs:
  ApiGatewayLogsRoleArn:
    Value: !GetAtt ApiGatewayLogsRole.Arn
    Description: Api Gateway Logs Role
    Export:
      Name: ApiGatewayLogsRoleArn

Supprimer tous les package-lock.json

for packageLock in **/lambda/**/package-lock.json
do
rm -f $packageLock
done

Supprimer tous les répertoires node_modules

Lancer cette commande à partir du répertoire que vous voulez nettoyer,

J’ai lancé cette commande dans mon répertoire Documents/ puis j’ai pu libérer 10Gb.

find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

Source: https://www.codegrepper.com/code-examples/javascript/remove+node+modules+from+mac


Rollback un commit pas encore pousser

git reset --soft HEAD~

Source: https://bytefreaks.net/programming-2/how-to-undo-a-git-commit-that-was-not-pushed


Script Bash pour améliorer la visibilité des erreurs

lib.trap.sh:

#!/bin/bash

set -o pipefail
set -o errtrace
set -o nounset
set -o errexit

trap 'catch $? $LINENO' EXIT

catch() {
  if [ "$1" != "0" ]; then
    # error handling goes here
    echo "Error code $1 in $0 occurred on line $2"
    exit $1
  fi
  exit 2
}

Exemple:

protect-stack.sh:

#!/bin/bash

cwd=$(dirname "$0")
source "$cwd/lib.trap.sh"


echo "Protecting $PREFIX-$var-$STAGE"
aws cloudformation update-termination-protection \
  --enable-termination-protection \
  --stack-name $PREFIX-$var-$STAGE

Résultat:

PREFIX='bla' var='bli' STAGE='blo' bash protect-stack.sh
Protecting bla-bli-blo

Unable to locate credentials. You can configure credentials by running "aws configure".
Error code 253 in protect-stack.sh occurred on line 11

Ajouter plusieurs ligne dans un fichier avec Bash

Source: https://stackoverflow.com/a/21549836

cat <<EOF > test.sh

#!/bin/bash
echo "This is a test"
echo "Running in $PWD"
echo "At runtime in \$PWD"
EOF

Changer la version par défaut de nodejs avec nvm

nvm list

nvm alias default 14
nvm alias node default
nvm alias stable default

Relancer votre terminal puis faite à nouveau nvm list pour valider le changement.

Sur VS Code je dois fermer toutes les fenêtres et le réouvrir pour que le changement soit appliqué.


Fixer le autocomplete sur MacOS

Simplement lancer:

echo 'autoload -Uz compinit && compinit' >> ~/.zshrc && . ~/.zshrc

Bash et l’auto completion des Makefile

yum install -y bash-completion

echo 'source /etc/profile.d/bash_completion.sh' >> ~/.bashrc
echo 'complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' ?akefile | sed 's/[^a-zA-Z0-9_.-]*$//'\`" make' >> ~/.bashrc

source ~/.bashrc

Ignorer l’erreur de certificat avec Git

Ajouter le paramètre -c http.sslVerify=false

Par exemple:

git -c http.sslVerify=false pull

Convertir une clé SSH en base64

Pour macos:

echo -n "$(cat ssh.key)" | base64 -b0

Pour linux:

echo -n "$(cat ssh.key)" | base64 -w0
if [ "$OSTYPE" == "linux-gnu*" ]; then
  CMD="base64 -w0"
fi
if [ "$OSTYPE" == "darwin*" ]; then
  CMD="base64 -b0"
fi

echo -n "$(cat ssh.key)" | $CMD

Renommer les fichiers dans le répertoire courant et les sous dossier

for i in $(find . -name 'MY_PREFIX*');
do
  mv $i $(echo $i | sed s/MY_PREFIX//g);
done

Réparer Ansible sur MacOS

Si vous avez des problèmes avec:

cd /Applications/Python\ 3.9/ && ./Install\ Certificates.command

ansible-galaxy collection install community.aws amazon.aws

pip3 install boto3 botocore

Remplacer le contenu des fichiers avec sed

parcourir chaque dossier, puis vous pouvez remplacer automatiquement le contenu d’un fichier avec sed par une valeur souhaitée, qui elle aussi se trouve dans le dossier, en d’autres mots, ce script permet de synchroniser des valeurs automatiquement.

#!/bin/bash

for folder in *; do
    if [ -d $folder ]; then
        echo "processing $folder"
        pushd $folder
            valueToSync=$(grep 'VALUE_TO_USE_BELOW' ./MY_FILE_CONTAINING_THE_VALUE_TO_SYNC | xargs | cut -d ' ' -f2)
            sed -i -e "s/WHAT_TO_REPLACE/WHAT_TO_REPLACE_WITH_${valueToSync}/" TARGET.FILE
        popd
    fi
done

Les Services ‘Linked Roles’ dans AWS

SES:

aws iam create-service-linked-role --aws-service-name ses.amazonaws.com

RDS:

aws iam create-service-linked-role --aws-service-name rds.amazonaws.com

Les conditions Ansible ‘inline’

{{ use_this_value_when_A_is_true if a == 'true' else use_that_value_when_false }}

Docker Cleanup

docker volume prune
docker image prune --all
docker rm $(docker ps -aq --filter 'status=exited')

Lister les volumes non utilisé:

docker volume ls -f dangling=true

MacOS Réseau Static

sudo route -n add -net 192.168.66.0/24 192.168.2.250

Recherche