summaryrefslogtreecommitdiffstats
path: root/playbooks/adhoc/docker_loopback_to_lvm/docker_loopback_to_direct_lvm.yml
blob: f638fab83a5868e2f76c4781b4d1a101230b5d65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
---
# This playbook coverts docker to go from loopback to direct-lvm (the Red Hat recommended way to run docker)
#  in AWS.  This adds an additional EBS volume and creates the Volume Group on this EBS volume to use.
#
#  To run:
#  1. Source your AWS credentials (make sure it's the corresponding AWS account) into your environment
#    export AWS_ACCESS_KEY_ID='XXXXX'
#    export AWS_SECRET_ACCESS_KEY='XXXXXX'
#
# 2. run the playbook:
#   ansible-playbook -e 'cli_tag_name=<tag-name>' -e "cli_volume_size=30" docker_loopback_to_direct_lvm.yml
#
#  Example:
#   ansible-playbook -e 'cli_tag_name=ops-master-12345' -e "cli_volume_size=30" docker_loopback_to_direct_lvm.yml
#
#  Notes:
#  * By default this will do a 30GB volume.
#  * iops are calculated by Disk Size * 30.  e.g ( 30GB * 30) = 900 iops
#  * This will remove /var/lib/docker!
#  * You may need to re-deploy docker images after this is run (like monitoring)
#

- name: Fix docker to have a provisioned iops drive
  hosts: "tag_Name_{{ cli_tag_name }}"
  user: root
  connection: ssh
  gather_facts: no

  vars:
    cli_volume_type: gp2
    cli_volume_size: 30

  pre_tasks:
  - fail:
      msg: "This playbook requires {{item}} to be set."
    when: "{{ item }} is not defined or {{ item }} == ''"
    with_items:
    - cli_tag_name
    - cli_volume_size

  - debug:
      var: hosts

  - name: start docker
    service:
      name: docker
      state: started

  - name: Determine if loopback
    shell: docker info | grep 'Data file:.*loop'
    register: loop_device_check
    ignore_errors: yes

  - debug:
      var: loop_device_check

  - name: fail if we don't detect loopback
    fail:
      msg: loopback not detected! Please investigate manually.
    when: loop_device_check.rc == 1

  - name: stop zagg client monitoring container
    service:
      name: oso-rhel7-zagg-client
      state: stopped
    ignore_errors: yes

  - name: stop pcp client monitoring container
    service:
      name: oso-f22-host-monitoring
      state: stopped
    ignore_errors: yes

  - name: stop docker
    service:
      name: docker
      state: stopped

  - name: delete /var/lib/docker
    command: rm -rf /var/lib/docker

  - name: remove /var/lib/docker
    command: rm -rf /var/lib/docker

  - name: check to see if /dev/xvdb exists
    command: test -e /dev/xvdb
    register: xvdb_check
    ignore_errors: yes

  - debug: var=xvdb_check

  - name: fail if /dev/xvdb already exists
    fail:
      msg: /dev/xvdb already exists.  Please investigate
    when: xvdb_check.rc == 0

  - name: Create a volume and attach it
    delegate_to: localhost
    ec2_vol:
      state: present
      instance: "{{ ec2_id }}"
      region: "{{ ec2_region }}"
      volume_size: "{{ cli_volume_size | default(30, True)}}"
      volume_type: "{{ cli_volume_type }}"
      device_name: /dev/xvdb
    register: vol

  - debug: var=vol

  - name: tag the vol with a name
    delegate_to: localhost
    ec2_tag: region={{ ec2_region }} resource={{ vol.volume_id }}
    args:
      tags:
        Name: "{{ ec2_tag_Name }}"
        clusterid: "{{ ec2_tag_clusterid }}"
    register: voltags

  - name: Wait for volume to attach
    pause:
      seconds: 30

  - name: copy the docker-storage-setup config file
    copy:
      src: docker-storage-setup
      dest: /etc/sysconfig/docker-storage-setup
      owner: root
      group: root
      mode: 0664

  - name: docker storage setup
    command: docker-storage-setup
    register: setup_output

  - debug: var=setup_output

  - name: start docker
    command: systemctl start docker.service
    register: dockerstart

  - debug: var=dockerstart