Yaml

Heredoc that converts newlines to spaces and ignores leading indent

a_long_line: >
    line 1
    line 2
    line 3
    ...

# Prints: line 1 line 2 line 3

Heredoc that preserves newlines and ignores leading indent

private_key: |
    line 1
    line 2
    line 3
    ...

# Prints:
line 1
line 2
line 3
...

Ansible

Perf
Gathering facts is expensive
If you can skip this step, do so
I have a couple plays that looks at memory
Think about tuning the number of forks
5 is the default
Too many doesn't work (kinda heavy weight)
25-50 is probably good for a dedicated ansible server
5-25 for a dev machine
Use scp (default is sftp)
Increase ControlPersist (default 60s)

Sample ansible.cfg
[default]
gathering = smart
gather_subset = min
fact_caching = jsonfile
fact_caching_connection = ~/.ansible/cache
fact_caching_timeout = 3600
forks=50

[ssh_connection]
pipelining = True
scp_if_ssh = True
ssh_args = -C -o ControlMaster=auto -o ControlPersist=15m
Python3 is better than python2

Jq

Powerful json message parsing on the command line

# Gets me all keys connected to the doc node
jq '. | keys' a.json

# Tells me how many sub docs are rooted at events
jq '.events | count' a.json

# Generate a csv from a json array
# https://stackoverflow.com/questions/32960857/how-to-convert-arbitrary-simple-json-to-csv-using-jq/32965227#32965227
jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv' a.js.out

20191003

Read

Cloudflare

I’m looking into Cf for work. Beefing up our app’s edge in a bunch of ways is high up on our list of things to do this quarter: eg a web application firewall would be very nice, a cdn too for statics that we can purge (our frontend will soon be getting an upgrade to a fancy modern javascript framework – vuejs – which will make a purge button less important but for now we need one :)), ddos mitigation, etc. Yes. This will be most excellent to get started with.

Notes

Security

Feature nameDescription
Rate limiting
Monitoring
Cost
Threat protection
Web application firewall
SSL / TLS
DDoS protection

Performance

Feature nameDescription
Cdn
Load balancing
CachingHow is this different from the Cdn?
Resource optimizationsImage optimization
Mobile optimization

I’ll do a bit of digging into each of those Cf platform capabilities next. It seems bloody incredible!

Mongo

Logical backups

# Backup a specific mongodb
# This is generally slower than physical backups but good for grabbing
# very specific subsets of data from big db
mongodump --archive=a.gz --gzip --db <dbname>

# Restore
mongorestore --archive=a.gz --gzip 

Querying

# Find a document
db.a.findOne({ a: "1234" })

# Update a document
db.a.updateOne({ a: "1234" }, { $set: { a: true } })