aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-07-08 15:22:24 +0000
committerGerrit Code Review <review@openstack.org>2016-07-08 15:22:24 +0000
commit0f9534bc2339b20544abff33da87ec809e66e1a1 (patch)
tree95f7a0bcdce9c74a955c196b1cf1f2d774d8092b /docker
parent56178a58dc1ea3f9117f4c03893ebafcf0e1f57c (diff)
parentcadf8afdcf4c1d56892b6d708003066e11711c5f (diff)
downloadkolla-0f9534bc2339b20544abff33da87ec809e66e1a1.tar.gz
kolla-0f9534bc2339b20544abff33da87ec809e66e1a1.zip
Merge "Read GPT label using sgdisk rather than udev"
Diffstat (limited to 'docker')
-rw-r--r--docker/kolla-toolbox/Dockerfile.j25
-rw-r--r--docker/kolla-toolbox/ansible_sudoers1
-rw-r--r--docker/kolla-toolbox/find_disks.py29
3 files changed, 33 insertions, 2 deletions
diff --git a/docker/kolla-toolbox/Dockerfile.j2 b/docker/kolla-toolbox/Dockerfile.j2
index 351ba07f7..cdaf95050 100644
--- a/docker/kolla-toolbox/Dockerfile.j2
+++ b/docker/kolla-toolbox/Dockerfile.j2
@@ -7,6 +7,7 @@ MAINTAINER {{ maintainer }}
RUN yum -y install \
gcc \
+ gdisk \
git \
libffi-devel \
libxml2-devel \
@@ -23,6 +24,7 @@ RUN yum -y install \
RUN apt-get -y --no-install-recommends install \
build-essential \
ca-certificates \
+ gdisk \
git \
libffi-dev \
libmariadbclient-dev \
@@ -56,6 +58,9 @@ RUN useradd -m --user-group ansible --groups kolla \
COPY find_disks.py kolla_keystone_service.py kolla_keystone_user.py kolla_sanity.py kolla_zookeeper.py /usr/share/ansible/
COPY ansible.cfg /home/ansible/.ansible.cfg
+COPY ansible_sudoers /etc/sudoers.d/ansible_sudoers
+RUN chmod 440 /etc/sudoers.d/ansible_sudoers
+
CMD ["/bin/sleep", "infinity"]
{{ include_footer }}
diff --git a/docker/kolla-toolbox/ansible_sudoers b/docker/kolla-toolbox/ansible_sudoers
new file mode 100644
index 000000000..2f486cef9
--- /dev/null
+++ b/docker/kolla-toolbox/ansible_sudoers
@@ -0,0 +1 @@
+ansible ALL=(root) NOPASSWD: /usr/bin/ansible localhost -m find_disks -a *
diff --git a/docker/kolla-toolbox/find_disks.py b/docker/kolla-toolbox/find_disks.py
index dcb6e812b..d1a6055f0 100644
--- a/docker/kolla-toolbox/find_disks.py
+++ b/docker/kolla-toolbox/find_disks.py
@@ -67,11 +67,36 @@ EXAMPLES = '''
import json
import pyudev
import re
+import subprocess
+
+
+def get_id_part_entry_name(dev):
+ # NOTE(pbourke): Old versions of udev have trouble retrieving GPT partition
+ # labels. In this case shell out to sgdisk.
+ try:
+ udev_version = pyudev.udev_version()
+ except (ValueError, EnvironmentError, subprocess.CalledProcessError):
+ udev_version = -1
+
+ if udev_version >= 180:
+ dev_name = dev.get('ID_PART_ENTRY_NAME', '')
+ else:
+ part = re.sub(r'.*[^\d]', '', dev.device_node)
+ parent = dev.find_parent('block').device_node
+ # NOTE(Mech422): Need to use -i as -p truncates the partition name
+ out = subprocess.Popen(['/usr/sbin/sgdisk', '-i', part, parent],
+ stdout=subprocess.PIPE).communicate()
+ match = re.search(r'Partition name: \'(\w+)\'', out[0])
+ if match:
+ dev_name = match.group(1)
+ else:
+ dev_name = ''
+ return dev_name
def is_dev_matched_by_name(dev, name, mode):
if dev.get('DEVTYPE', '') == 'partition':
- dev_name = dev.get('ID_PART_ENTRY_NAME', '')
+ dev_name = get_id_part_entry_name(dev)
else:
dev_name = dev.get('ID_FS_LABEL', '')
@@ -107,7 +132,7 @@ def extract_disk_info(ct, dev, name):
kwargs['journal_num'] = 2
else:
kwargs['external_journal'] = True
- journal_name = dev.get('ID_PART_ENTRY_NAME', '') + '_J'
+ journal_name = get_id_part_entry_name(dev) + '_J'
for journal in find_disk(ct, journal_name, 'strict'):
kwargs['journal'] = journal.device_node
kwargs['journal_device'] = \