]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
Docker support 190/head
authorSébastien Han <sebastien.han@enovance.com>
Tue, 20 Jan 2015 17:43:47 +0000 (18:43 +0100)
committerSébastien Han <sebastien.han@enovance.com>
Thu, 12 Mar 2015 02:21:52 +0000 (21:21 -0500)
WIP!

Signed-off-by: Sébastien Han <sebastien.han@enovance.com>
19 files changed:
README.md
roles/ceph-common/defaults/main.yml
roles/ceph-mds/defaults/main.yml
roles/ceph-mds/tasks/docker.yml [new file with mode: 0644]
roles/ceph-mds/tasks/main.yml
roles/ceph-mds/tasks/pre_requisite.yml [new file with mode: 0644]
roles/ceph-mon/defaults/main.yml
roles/ceph-mon/tasks/docker.yml [new file with mode: 0644]
roles/ceph-mon/tasks/main.yml
roles/ceph-osd/defaults/main.yml
roles/ceph-osd/tasks/docker.yml [new file with mode: 0644]
roles/ceph-osd/tasks/main.yml
roles/ceph-osd/tasks/pre_requisite.yml [new file with mode: 0644]
roles/ceph-radosgw/defaults/main.yml
roles/ceph-radosgw/tasks/docker.yml [new file with mode: 0644]
roles/ceph-radosgw/tasks/main.yml
roles/ceph-radosgw/tasks/pre_requisite.yml [new file with mode: 0644]
roles/ceph-radosgw/tasks/start_radosgw.yml [new file with mode: 0644]
site.yml

index d641e9e25cb52824a03599ffac2795c1f328caa8..88b7c2017ee103be8a4059e8e89aa988398b1f57 100644 (file)
--- a/README.md
+++ b/README.md
@@ -3,6 +3,12 @@ ceph-ansible
 
 Ansible playbook for Ceph!
 
+Clone me:
+
+```bash
+git clone https://github.com/ceph/ceph-ansible.git
+```
+
 ## What does it do?
 
 General support for:
index e7c8048e76e6bc5f108b85caeb1ea3a6636204e7..a0ab1bc2f293f27d470a55499ca841fcff092fda 100644 (file)
@@ -1,9 +1,9 @@
 ---\r
 # You can override vars by using host or group vars\r
 \r
-#########\r
-# INSTALL\r
-#########\r
+###########\r
+# INSTALL #\r
+###########\r
 \r
 # /!\ EITHER ACTIVE ceph_stable OR ceph_stable_ice OR ceph_dev /!\\r
 \r
@@ -43,9 +43,9 @@ ceph_dev_branch: master # development branch you would like to use e.g: master,
 ceph_dev_redhat_distro: centos7\r
 \r
 \r
-####################\r
-# CEPH CONFIGURATION\r
-####################\r
+######################\r
+# CEPH CONFIGURATION #\r
+######################\r
 \r
 ## Ceph options\r
 #\r
@@ -134,9 +134,9 @@ radosgw_civetweb_port: 80
 #common_single_host_mode: true\r
 \r
 \r
-###########\r
-# OS TUNING\r
-###########\r
+#############\r
+# OS TUNING #\r
+#############\r
 \r
 disable_transparent_hugepage: true\r
 disable_swap: true\r
@@ -145,3 +145,10 @@ os_tuning_params:
   - { name: fs.file-max, value: 26234859 }\r
   - { name: vm.zone_reclaim_mode, value: 0 }\r
   - { name: vm.vfs_cache_pressure, value: 50 }\r
+\r
+\r
+##########\r
+# DOCKER #\r
+##########\r
+\r
+docker: false\r
index bd46d3bd5f09852e38d9b2743bcdf27a0cacf5bc..6734ef27538a9dd8b4bff8d0a14d92b22c69f607 100644 (file)
@@ -2,3 +2,12 @@
 # You can override vars by using host or group vars\r
 \r
 cephx: true\r
+\r
+\r
+##########\r
+# DOCKER #\r
+##########\r
+\r
+ceph_containerized_deployment: false\r
+ceph_mds_docker_username: ceph\r
+ceph_mds_docker_imagename: "mds:latest"\r
diff --git a/roles/ceph-mds/tasks/docker.yml b/roles/ceph-mds/tasks/docker.yml
new file mode 100644 (file)
index 0000000..e5d674d
--- /dev/null
@@ -0,0 +1,29 @@
+---
+- name: Fetch Ceph config and keys
+  copy: >
+    src=fetch/docker_mon_files/{{ item }}
+    dest=/etc/ceph/
+    owner=root
+    group=root
+    mode=600
+  with_items:
+    - /etc/ceph/ceph.client.admin.keyring
+    - /etc/ceph/ceph.conf
+    - /etc/ceph/monmap
+    - /etc/ceph/ceph.mon.keyring
+
+- name: Run the Ceph Medata docker image
+  docker: >
+    image="{{ ceph_mds_docker_username }}/{{ ceph_mds_docker_imagename }}"
+    name=ceph-mds-{{ ansible_hostname }}
+    net=host
+    state=running
+    env="MDS_NAME=ceph-mds-{{ ansible_hostname }}, MDS_CIVETWEB_PORT={{ ceph_mds_civetweb_port }}"
+    volumes="/var/lib/ceph:/var/lib/ceph,/etc/ceph:/etc/ceph"
+
+- name: Ensure ceph_mds service is running
+  docker: >
+    image="{{ ceph_mds_docker_username }}/{{ ceph_mds_docker_imagename }}"
+    name="ceph-{{ ansible_hostname }}"
+    detach=yes
+    state=running
index 35393ba422f2ccedd54d51b7874c84a113553875..fcdbce94e016c272ebb317239154182a25fb0f20 100644 (file)
@@ -1,40 +1,6 @@
 ---
-## Deploy Ceph metadata server(s)
+- include: pre_requisite.yml
+  when: not ceph_containerized_deployment
 
-- name: Copy MDS bootstrap key
-  copy: >
-    src=fetch/{{ fsid }}/var/lib/ceph/bootstrap-mds/ceph.keyring
-    dest=/var/lib/ceph/bootstrap-mds/ceph.keyring
-    owner=root
-    group=root
-    mode=600
-  when: cephx
-
-- name: Create MDS directory
-  file: >
-    path=/var/lib/ceph/mds/ceph-{{ ansible_hostname }}
-    state=directory
-    owner=root
-    group=root
-    mode=0644
-  when: cephx
-
-- name: Create MDS keyring
-  command: ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.{{ ansible_hostname }} osd 'allow rwx' mds 'allow' mon 'allow profile mds' -o /var/lib/ceph/mds/ceph-{{ ansible_hostname }}/keyring creates=/var/lib/ceph/mds/ceph-{{ ansible_hostname }}/keyring
-  when: cephx
-  changed_when: False
-
-- name: Set MDS key permissions
-  file: >
-    path=/var/lib/ceph/mds/ceph-{{ ansible_hostname }}/keyring
-    mode=0600
-    owner=root
-    group=root
-  when: cephx
-
-- name: Start and add that the MDS service to the init sequence
-  service: >
-    name=ceph
-    state=started
-    enabled=yes
-    args=mds
+- include: docker.yml
+  when: ceph_containerized_deployment
diff --git a/roles/ceph-mds/tasks/pre_requisite.yml b/roles/ceph-mds/tasks/pre_requisite.yml
new file mode 100644 (file)
index 0000000..bc83aed
--- /dev/null
@@ -0,0 +1,40 @@
+---
+# Deploy Ceph metadata server(s)
+
+- name: Copy MDS bootstrap key
+  copy: >
+    src=fetch/{{ fsid }}/var/lib/ceph/bootstrap-mds/ceph.keyring
+    dest=/var/lib/ceph/bootstrap-mds/ceph.keyring
+    owner=root
+    group=root
+    mode=600
+  when: cephx
+
+- name: Create MDS directory
+  file: >
+    path=/var/lib/ceph/mds/ceph-{{ ansible_hostname }}
+    state=directory
+    owner=root
+    group=root
+    mode=0644
+  when: cephx
+
+- name: Create MDS keyring
+  command: ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.{{ ansible_hostname }} osd 'allow rwx' mds 'allow' mon 'allow profile mds' -o /var/lib/ceph/mds/ceph-{{ ansible_hostname }}/keyring creates=/var/lib/ceph/mds/ceph-{{ ansible_hostname }}/keyring
+  when: cephx
+  changed_when: False
+
+- name: Set MDS key permissions
+  file: >
+    path=/var/lib/ceph/mds/ceph-{{ ansible_hostname }}/keyring
+    mode=0600
+    owner=root
+    group=root
+  when: cephx
+
+- name: Start and add that the MDS service to the init sequence
+  service: >
+    name=ceph
+    state=started
+    enabled=yes
+    args=mds
index c263221505e10d1ae10578a0fab695eb68b740b8..74728971d7ff3456d25b4200a71219dce41682f6 100644 (file)
@@ -1,6 +1,10 @@
 ---\r
 # You can override vars by using host or group vars\r
 \r
+###########\r
+# GENERAL #\r
+###########\r
+\r
 # ACTIVATE BOTH FSID AND MONITOR_SECRET VARIABLES FOR NON-VAGRANT DEPLOYMENT\r
 fsid: "{{ cluster_uuid.stdout }}"\r
 # monitor_secret:\r
@@ -10,9 +14,10 @@ cephx: true
 # referenced in common role too.\r
 radosgw: false\r
 \r
-###########\r
-# OPENSTACK\r
-###########\r
+\r
+#############\r
+# OPENSTACK #\r
+#############\r
 \r
 openstack_config: false\r
 openstack_glance_pool: images\r
@@ -24,3 +29,13 @@ openstack_keys:
   - { name: client.glance, value: "mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool={{ openstack_glance_pool }}'" }\r
   - { name: client.cinder, value: "mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool={{ openstack_cinder_pool }}, allow rwx pool={{ openstack_nova_pool }}, allow rx pool={{ openstack_glance_pool }}'"  }\r
   - { name: client.cinder-backup, value: "mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool={{ openstack_cinder_backup_pool }}'" }\r
+\r
+\r
+##########\r
+# DOCKER #\r
+##########\r
+\r
+ceph_containerized_deployment: false\r
+ceph_mon_docker_interface: eth0\r
+ceph_mon_docker_username: ceph\r
+ceph_mon_docker_imagename: "mon:latest"\r
diff --git a/roles/ceph-mon/tasks/docker.yml b/roles/ceph-mon/tasks/docker.yml
new file mode 100644 (file)
index 0000000..1f3427f
--- /dev/null
@@ -0,0 +1,42 @@
+---
+- name: Try to fetch Ceph config and keys
+  copy: >
+    src=fetch/docker_mon_files/{{ item }}
+    dest=/etc/ceph/
+    owner=root
+    group=root
+    mode=600
+  with_items:
+    - /etc/ceph/ceph.client.admin.keyring
+    - /etc/ceph/ceph.conf
+    - /etc/ceph/monmap
+    - /etc/ceph/ceph.mon.keyring
+  ignore_errors: true
+
+- name: Run the Ceph Monitor docker image
+  docker: >
+    image="{{ ceph_mon_docker_username }}/{{ ceph_mon_docker_imagename }}"
+    name=ceph-{{ ansible_hostname }}
+    net=host
+    state=running
+    env="MON_NAME=ceph-{{ ansible_hostname }},MON_IP={{ hostvars[inventory_hostname]['ansible_' + ceph_mon_docker_interface]['ipv4']['address'] }}"
+    volumes="/var/lib/ceph:/var/lib/ceph,/etc/ceph:/etc/ceph"
+
+- name: Ensure ceph_mon service is running
+  docker: >
+    image="{{ ceph_mon_docker_username }}/{{ ceph_mon_docker_imagename }}"
+    name="ceph-{{ ansible_hostname }}"
+    ports=6789:6789
+    detach=yes
+    state=running
+
+- name: Collect Ceph files to the Ansible server
+  fetch: >
+    src={{ item }}
+    dest=fetch/docker_mon_files/{{ item }}
+    flat=yes
+  with_items:
+    - /etc/ceph/ceph.client.admin.keyring
+    - /etc/ceph/ceph.conf
+    - /etc/ceph/monmap
+    - /etc/ceph/ceph.mon.keyring
index 7077a7defa312b953e96a7cc928770973f9e6a76..0a7415374420497195495a6651dfb64e5901dc41 100644 (file)
@@ -1,3 +1,12 @@
 ---
 - include: deploy_monitors.yml
+  when: not ceph_containerized_deployment
+
 - include: ceph_keys.yml
+  when: not ceph_containerized_deployment
+
+- include: ceph_keys.yml
+  when: not ceph_containerized_deployment
+
+- include: docker.yml
+  when: ceph_containerized_deployment
index f6cc08a00db955bf8c85b3abca3b578614f9e118..5f767c2a1ad80f5c8d5b973855fa4390ac35c249 100644 (file)
@@ -104,3 +104,12 @@ osd_directories:
   - /var/lib/ceph/osd/mydir2\r
   - /var/lib/ceph/osd/mydir3\r
   - /var/lib/ceph/osd/mydir4\r
+\r
+\r
+##########\r
+# DOCKER #\r
+##########\r
+\r
+ceph_containerized_deployment: false\r
+ceph_osd_docker_username: ceph\r
+ceph_osd_docker_imagename: "osd:latest"\r
diff --git a/roles/ceph-osd/tasks/docker.yml b/roles/ceph-osd/tasks/docker.yml
new file mode 100644 (file)
index 0000000..9e6b7df
--- /dev/null
@@ -0,0 +1,29 @@
+---
+- name: Fetch Ceph config and keys
+  copy: >
+    src=fetch/docker_mon_files/{{ item }}
+    dest=/etc/ceph/
+    owner=root
+    group=root
+    mode=600
+  with_items:
+    - /etc/ceph/ceph.client.admin.keyring
+    - /etc/ceph/ceph.conf
+    - /etc/ceph/monmap
+    - /etc/ceph/ceph.mon.keyring
+
+- name: Run the Ceph OSD docker image
+  docker: >
+    image="{{ ceph_osd_docker_username }}/{{ ceph_osd_docker_imagename }}"
+    name=ceph-{{ ansible_hostname }}
+    net=host
+    state=running
+    env="OSD_NAME=ceph-{{ ansible_hostname }}"
+    volumes="/var/lib/ceph:/var/lib/ceph,/etc/ceph:/etc/ceph"
+
+- name: Ensure ceph_osd service is running
+  docker: >
+    image="{{ ceph_osd_docker_username }}/{{ ceph_osd_docker_imagename }}"
+    name="ceph-{{ ansible_hostname }}"
+    detach=yes
+    state=running
index e7bc3d41300e6a2d8cc6bf6ab3b33534fbbbb1ca..fca779bb53266e84523d3a41b631821aafef1751 100644 (file)
@@ -1,32 +1,16 @@
 ---
-## Deploy Ceph Oject Storage Daemon(s)
 
-- name: Install dependencies
-  apt: >
-    pkg=parted
-    state=present
-  when: ansible_os_family == 'Debian'
-
-- name: Install dependencies
-  yum: >
-    name=parted
-    state=present
-  when: ansible_os_family == 'RedHat'
-
-- name: Copy OSD bootstrap key
-  copy: >
-    src=fetch/{{ fsid }}/var/lib/ceph/bootstrap-osd/ceph.keyring
-    dest=/var/lib/ceph/bootstrap-osd/ceph.keyring
-    owner=root
-    group=root
-    mode=600
-  when: cephx
+- include: pre_requisite.yml
+  when: not ceph_containerized_deployment
 
 - include: journal_collocation.yml
-  when: journal_collocation
+  when: journal_collocation and not ceph_containerized_deployment
 
 - include: raw_multi_journal.yml
-  when: raw_multi_journal
+  when: raw_multi_journal and not ceph_containerized_deployment
 
 - include: osd_directory.yml
-  when: osd_directory
+  when: osd_directory and not ceph_containerized_deployment
+
+- include: docker.yml
+  when: ceph_containerized_deployment
diff --git a/roles/ceph-osd/tasks/pre_requisite.yml b/roles/ceph-osd/tasks/pre_requisite.yml
new file mode 100644 (file)
index 0000000..c0cd8d6
--- /dev/null
@@ -0,0 +1,23 @@
+---
+## Deploy Ceph Oject Storage Daemon(s)
+
+- name: Install dependencies
+  apt: >
+    pkg=parted
+    state=present
+  when: ansible_os_family == 'Debian'
+
+- name: Install dependencies
+  yum: >
+    name=parted
+    state=present
+  when: ansible_os_family == 'RedHat'
+
+- name: Copy OSD bootstrap key
+  copy: >
+    src=fetch/{{ fsid }}/var/lib/ceph/bootstrap-osd/ceph.keyring
+    dest=/var/lib/ceph/bootstrap-osd/ceph.keyring
+    owner=root
+    group=root
+    mode=600
+  when: cephx
index 91f1a4c6418369051a079d3d0d9e18e500567a97..241b2a83ce01c0b2d7af8c3106c14322f8c8fe40 100644 (file)
@@ -12,5 +12,14 @@ http_100_continue: false
 # Rados Gateway options\r
 redhat_distro_ceph_extra: centos6.4 # supported distros are centos6.3, centos6.4, centos6, fedora18, fedora19, opensuse12.2, rhel6.3, rhel6.4, rhel6.5, rhel6, sles11sp2\r
 email_address: foo@bar.com\r
-\r
 radosgw_frontend: civetweb # we currently only support a single backend\r
+\r
+\r
+##########\r
+# DOCKER #\r
+##########\r
+\r
+ceph_containerized_deployment: false\r
+ceph_rgw_civetweb_port: 80\r
+ceph_rgw_docker_username: ceph\r
+ceph_rgw_docker_imagename: "rgw:latest"\r
diff --git a/roles/ceph-radosgw/tasks/docker.yml b/roles/ceph-radosgw/tasks/docker.yml
new file mode 100644 (file)
index 0000000..51438af
--- /dev/null
@@ -0,0 +1,29 @@
+---
+- name: Fetch Ceph config and keys
+  copy: >
+    src=fetch/docker_mon_files/{{ item }}
+    dest=/etc/ceph/
+    owner=root
+    group=root
+    mode=600
+  with_items:
+    - /etc/ceph/ceph.client.admin.keyring
+    - /etc/ceph/ceph.conf
+    - /etc/ceph/monmap
+    - /etc/ceph/ceph.mon.keyring
+
+- name: Run the Ceph Monitor docker image
+  docker: >
+    image="{{ ceph_rgw_docker_username }}/{{ ceph_rgw_docker_imagename }}"
+    name=ceph-rgw-{{ ansible_hostname }}
+    net=host
+    state=running
+    env="RGW_NAME=ceph-rgw-{{ ansible_hostname }}, RGW_CIVETWEB_PORT={{ ceph_rgw_civetweb_port }}"
+    volumes="/var/lib/ceph:/var/lib/ceph,/etc/ceph:/etc/ceph"
+
+- name: Ensure ceph_rgw service is running
+  docker: >
+    image="{{ ceph_rgw_docker_username }}/{{ ceph_rgw_docker_imagename }}"
+    name="ceph-{{ ansible_hostname }}"
+    detach=yes
+    state=running
index 58360949279433354eb8ea1629bdf44ce8a8f728..0d7aecb50a71657872f4d952fdd9b318ce05dc43 100644 (file)
@@ -1,31 +1,7 @@
 ---
-- name: Copy RGW bootstrap key
-  copy: >
-    src=fetch/{{ fsid }}/etc/ceph/radosgw.{{ ansible_hostname }}.keyring
-    dest=/etc/ceph/radosgw.{{ ansible_hostname }}.keyring
-    owner=root
-    group=root
-    mode=600
-  when: cephx
 
-- name: Set RGW bootstrap key permissions
-  file: >
-    path=/etc/ceph/radosgw.{{ ansible_hostname }}.keyring
-    mode=0600
-    owner=root
-    group=root
-  when: cephx
-
-- name: Create RGW directory
-  file: >
-    path=/var/lib/ceph/radosgw/{{ ansible_fqdn }}
-    state=directory
-    owner=root
-    group=root
-    mode=0644
-
-## Check OS family
-#
+- include: pre_requisite.yml
+  when: not ceph_containerized_deployment
 
 - include: install_redhat.yml
   when: ansible_os_family == 'RedHat' and radosgw_frontend == 'apache'
     pkg=radosgw
     state=present
     update_cache=yes
-  when: ansible_os_family == 'Debian'
+  when: ansible_os_family == 'Debian' and not ceph_containerized_deployment
 
 - name: "Install Rados Gateway"
   yum: >
     name=ceph-radosgw
     state=present
-  when: ansible_os_family == 'RedHat'
+  when: ansible_os_family == 'RedHat' and not ceph_containerized_deployment
 
-## If we don't perform this check Ansible will start multiple instance of radosgw
-- name: Check if RGW is started
-  command: /etc/init.d/radosgw status
-  register: rgwstatus
-  ignore_errors: True
+- include: start_radosgw.yml
 
-- name: Start RGW
-  command: /etc/init.d/radosgw start
-  when: rgwstatus.rc != 0
+- include: docker.yml
+  when: ceph_containerized_deployment
diff --git a/roles/ceph-radosgw/tasks/pre_requisite.yml b/roles/ceph-radosgw/tasks/pre_requisite.yml
new file mode 100644 (file)
index 0000000..4e64153
--- /dev/null
@@ -0,0 +1,25 @@
+---
+- name: Copy RGW bootstrap key
+  copy: >
+    src=fetch/{{ fsid }}/etc/ceph/radosgw.{{ ansible_hostname }}.keyring
+    dest=/etc/ceph/radosgw.{{ ansible_hostname }}.keyring
+    owner=root
+    group=root
+    mode=600
+  when: cephx
+
+- name: Set RGW bootstrap key permissions
+  file: >
+    path=/etc/ceph/radosgw.{{ ansible_hostname }}.keyring
+    mode=0600
+    owner=root
+    group=root
+  when: cephx
+
+- name: Create RGW directory
+  file: >
+    path=/var/lib/ceph/radosgw/{{ ansible_fqdn }}
+    state=directory
+    owner=root
+    group=root
+    mode=0644
diff --git a/roles/ceph-radosgw/tasks/start_radosgw.yml b/roles/ceph-radosgw/tasks/start_radosgw.yml
new file mode 100644 (file)
index 0000000..574b408
--- /dev/null
@@ -0,0 +1,10 @@
+---
+## If we don't perform this check Ansible will start multiple instance of radosgw
+- name: Check if RGW is started
+  command: /etc/init.d/radosgw status
+  register: rgwstatus
+  ignore_errors: True
+
+- name: Start RGW
+  command: /etc/init.d/radosgw start
+  when: rgwstatus.rc != 0
index 2cded5238cff08414b8ebe2f4ad283d05ed9d40e..90469c212b4821f50fa4a7784ae50d69de85dca6 100644 (file)
--- a/site.yml
+++ b/site.yml
@@ -8,7 +8,7 @@
   - rgws
   sudo: True
   roles:
-  - ceph-common
+  - { role: ceph-common, when: not docker }
 
 - hosts: mons
   sudo: True