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.
- https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cloudwatch-logs/
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html
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
#!/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:
#!/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:
- Certificats
- Collection AWS
- Les requis Python
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