bifrost/playbooks/roles/bifrost-ironic-install/tasks/install.yml
Markos Chandras 952e99cb6b roles: bifrost-ironic-install: Add PyMySQL dependency for ironic-dbsync
We are using MariaDB database for ironic so we need to install
the optional PyMySQL dependency for sqlalchemy on all distributions
otherwise ironic-dbsync fails with the following error:

CRITI [ironic] ImportError: No module named pymysql
Traceback (most recent call last):
  File "/usr/bin/ironic-dbsync", line 10, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/site-packages/ironic/cmd/dbsync.py", line 103, in main
    CONF.command.func()
  File "/usr/lib/python2.7/site-packages/ironic/cmd/dbsync.py", line 35, in upgrade
     migration.upgrade(CONF.command.revision)
  File "/usr/lib/python2.7/site-packages/ironic/db/migration.py", line 36, in upgrade
     return get_backend().upgrade(version)
  File "/usr/lib/python2.7/site-packages/ironic/db/sqlalchemy/migration.py", line 56, in upgrade
     alembic.command.upgrade(config, revision or 'head')
  [...]
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 49, in dbapi
     return __import__('pymysql')
ImportError: No module named pymysql

Change-Id: Ib44779de06a7bad91a08e148e1c0e1eb9815afe8
2017-03-14 00:25:17 +00:00

113 lines
4.5 KiB
YAML

# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
- name: "Update Package Cache"
apt: update_cache=yes
when: ansible_os_family == 'Debian'
- name: "Install packages"
action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
with_items: "{{ required_packages }}"
# Step required for Ubuntu 14.10
- name: "Install Ubuntu 14.10 (and later) packages"
action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
with_items:
- pxelinux
when: >
ansible_distribution_version|version_compare('14.10', '>=') and
ansible_distribution == 'Ubuntu'
- name: "If running in CI, set source install facts just to be sure"
set_fact:
shade_source_install: true
ironicclient_source_install: true
when: ci_testing | bool == true
- name: "If VENV is set in the environment, enable installation into venv"
set_fact:
enable_venv: true
when: lookup('env', 'VENV') | length > 0
# NOTE(TheJulia) While we don't necessarilly require /opt/stack any longer
# and it should already be created by the Ansible setup, we will leave this
# here for the time being.
- name: "Ensure /opt/stack is present"
file: name=/opt/stack state=directory owner=root group=root
- name: "proliantutils - Install from pip"
include: pip_install.yml
package=proliantutils
state=present
when: skip_install is not defined and testing | bool != true
- name: "UcsSdk - Install from pip"
include: pip_install.yml
package=UcsSdk
version=0.8.1.9
when: skip_install is not defined and testing | bool != true
- name: "Install iSCSI client if PXE driver support is enabled"
action: "{{ ansible_pkg_mgr }} name={{ iscsi_client_package }} state=present"
when: skip_install is not defined and enable_pxe_drivers | bool == true
- name: "Shade - Install"
include: pip_install.yml
package=shade
state=latest
sourcedir={{ shade_git_folder }}
source_install={{ shade_source_install }}
when: skip_install is not defined
- name: "dib-utils - install from pip"
include: pip_install.yml
package=dib-utils
state=present
when: skip_install is not defined and install_dib | bool == true
- name: "Diskimage-builder - Install"
include: pip_install.yml
package=diskimage-builder
sourcedir={{ dib_git_folder }}
source_install=true
when: skip_install is not defined and install_dib | bool == true
- name: "Ironic Client - Install"
include: pip_install.yml
package=python-ironicclient
state=latest
sourcedir={{ ironicclient_git_folder }}
source_install={{ ironicclient_source_install }}
when: skip_install is not defined
- name: "Install configparser in venv if using"
include: pip_install.yml package=configparser virtualenv=bifrost_venv_dir
when: skip_install is not defined and (enable_venv | bool == true)
- name: "Install pymysql in venv if using"
include: pip_install.yml package=pymysql virtualenv=bifrost_venv_dir
when: skip_install is not defined and (enable_venv | bool == true)
# NOTE(hwoarang): The python-pymysql package is not available on the CentOS7
# and old Debian/Ubuntu repositories so we need to get it via pip
- name: "Install pymysql on CentOS/Ubuntu if necessary"
include: pip_install.yml package=pymysql
when:
- skip_install is not defined
- enable_venv | bool == false
- (ansible_distribution == 'CentOS' and ansible_distribution_major_version <= 7) or
(ansible_distribution == 'Ubuntu' and ansible_distribution_version|version_compare('14.10', '=='))
- name: "Install Ironic using pip"
include: pip_install.yml
package=ironic
state=latest
sourcedir={{ ironic_git_folder }}
source_install=true
extra_args="--no-cache-dir --upgrade -c {{ reqs_git_folder }}/upper-constraints.txt"
when: skip_install is not defined
- name: "Install ironic-inspector to permit use of inspection interface"
include: inspector_install.yml
when: skip_install is not defined and enable_inspector | bool == true
- name: "Install ironic-staging-drivers"
include: staging_install.yml
when: skip_install is not defined and staging_drivers_include | bool == true