Slide 1

Slide 1 text

Engineering for Failure Building for the unhappy path

Slide 2

Slide 2 text

Kerim Satirli Senior Engineer, IceMobile

Slide 3

Slide 3 text

Chris Grigor Ops Manager, IceMobile

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

The Cloud (someone else’s computer somewhere, with an API)

Slide 9

Slide 9 text

Engineering for Speed “I know what you did last summer”

Slide 10

Slide 10 text

- name: Check to see if pip is already installed command: "pip --version" ignore_errors: true changed_when: false register: pip_is_installed - name: Get pip get_url: url=https://bootstrap.pypa.io/get-pip.py dest=/home/ec2-user when: pip_is_installed.rc != 0 - name: install pip command: "python /home/ec2-user/get-pip.py" sudo: yes when: pip_is_installed.rc != 0 - name: delete get-pip.py file: state=absent path=~/get-pip.py when: pip_is_installed.rc != 0 - name: Installing docker-py for ansible pip: name=docker-py version=1.1.0 #executable=/usr/local/bin/pip sudo: yes - name: Adding Docker Hub robot login copy: src=../resources/dockercfg dest=/home/ec2-user/.dockercfg owner=ec2-user

Slide 11

Slide 11 text

- name: Check to see if pip is already installed command: "pip --version" ignore_errors: true changed_when: false register: pip_is_installed - name: Get pip get_url: url=https://bootstrap.pypa.io/get-pip.py dest=/home/ec2-user when: pip_is_installed.rc != 0 - name: install pip command: "python /home/ec2-user/get-pip.py" sudo: yes when: pip_is_installed.rc != 0 - name: delete get-pip.py file: state=absent path=~/get-pip.py when: pip_is_installed.rc != 0 - name: Installing docker-py for ansible pip: name=docker-py version=1.1.0 #executable=/usr/local/bin/pip sudo: yes - name: Adding Docker Hub robot login copy: src=../resources/dockercfg dest=/home/ec2-user/.dockercfg owner=ec2-user IT WORKS!

Slide 12

Slide 12 text

Ansible 2.0 early adopter

Slide 13

Slide 13 text

Ansible 2.0 it’s called bleeding edge for a reason

Slide 14

Slide 14 text

Engineering for Failure a beginner’s guide

Slide 15

Slide 15 text

Fail early and don’t waste my time!

Slide 16

Slide 16 text

Fail clearly and tell me where it hurts!

Slide 17

Slide 17 text

Engineering for Failure live-action test

Slide 18

Slide 18 text

A tale of Vaults passwords in the cloud!

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

- include: ./notify-datadog.yml vars: event_type: error api_key: "{{ datadog.api_key }}" event_title: "Checksum mismatch for {{ name }} v{{ version }}" event_text: "{{ fetch_application_package.msg }}" event_priority: "{{ datadog.priority }}" event_tags: "app:{{ name | lower }}, \ version:{{ version }}, \ type:checksum-mismatch" when: fetch_application_package.failed is defined tags: - fhp_datadog_checksum

Slide 26

Slide 26 text

A tale of Vaults and a key-value service

Slide 27

Slide 27 text

- # validate config file include: ../../roles/validate-file/tasks/main.yml vars: validation_file: "{{ config.dirs.etc }}/{{ config.file }}" validation_type: json validation_result_var: consulconfig_validation tags: - pc_validate_configfile

Slide 28

Slide 28 text

--- - shell: "cat {{ validation_file }}" register: res - set_fact: "{{ vldtn_res_var | default(vldtn_res)}}": \ "{{ res.stdout | from_json }}" when: validation_type == "json" - set_fact: "{{ vldtn_res_var | default(vldtn_res)}}": \ "{{ res.stdout | from_yaml }}" when: validation_type == "yaml"

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Engineering for Failure Building for the unhappy path

Slide 31

Slide 31 text

@grigorc @ksatirli

Slide 32

Slide 32 text

The mobile agency for food retail