Initial commit
This commit is contained in:
parent
67a52c760f
commit
c578f230a0
98
defaults/main.yml
Normal file
98
defaults/main.yml
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
# defaults file for os_ironic
|
||||||
|
|
||||||
|
# Verbosity Options
|
||||||
|
debug: False
|
||||||
|
verbose: True
|
||||||
|
|
||||||
|
# Name of the virtual env to deploy into
|
||||||
|
ironic_venv_tag: untagged
|
||||||
|
ironic_venv_bin: "/openstack/venvs/ironic-{{ ironic_venv_tag }}/bin"
|
||||||
|
|
||||||
|
# Set this to enable or disable installing in a venv
|
||||||
|
ironic_venv_enabled: True
|
||||||
|
|
||||||
|
# System info
|
||||||
|
ironic_system_user_name: ironic
|
||||||
|
ironic_system_group_name: ironic
|
||||||
|
ironic_system_shell: /bin/bash
|
||||||
|
ironic_system_comment: ironic system user
|
||||||
|
ironic_system_home_folder: "/var/lib/{{ ironic_system_user_name }}"
|
||||||
|
ironic_system_log_folder: "/var/log/{{ ironic_system_user_name }}"
|
||||||
|
|
||||||
|
# Ironic API
|
||||||
|
ironic_api_program_name: ironic-api
|
||||||
|
|
||||||
|
|
||||||
|
# Ironic Conductor
|
||||||
|
ironic_conductor_program_name: ironic-conductor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Python Ironic Client
|
||||||
|
python_ironic_client_program_name: ironic
|
||||||
|
|
||||||
|
|
||||||
|
ironic_service_names:
|
||||||
|
- "{{ ironic_api_program_name }}"
|
||||||
|
- "{{ ironic_conductor_program_name }}"
|
||||||
|
|
||||||
|
# Database
|
||||||
|
ironic_database_user: ironic
|
||||||
|
ironic_database_database: ironic
|
||||||
|
ironic_database_address: localhost
|
||||||
|
ironic_database_password: gu1d0
|
||||||
|
|
||||||
|
# TBD(mrda): need to handle this a little better :)
|
||||||
|
database_root_user: root
|
||||||
|
database_root_password: sp4m3ggs
|
||||||
|
|
||||||
|
# If you want to regenerate the ironic users SSH keys, on each run, set this var to True
|
||||||
|
# Otherwise keys will be generated on the first run and not regenerated each run.
|
||||||
|
ironic_recreate_keys: False
|
||||||
|
|
||||||
|
ironic_bin: "{{ ironic_venv_bin }}"
|
||||||
|
|
||||||
|
ironic_service_name: ironic
|
||||||
|
|
||||||
|
ironic_common_apt_packages:
|
||||||
|
- python-dev
|
||||||
|
- python-pip
|
||||||
|
- git
|
||||||
|
|
||||||
|
ironic_conductor_apt_packages:
|
||||||
|
- libmysqlclient-dev
|
||||||
|
- libxml2-dev
|
||||||
|
- rabbitmq-server
|
||||||
|
- mysql-server
|
||||||
|
- isc-dhcp-server
|
||||||
|
- tftpd-hpa
|
||||||
|
- syslinux
|
||||||
|
- syslinux-common
|
||||||
|
- libxslt1-dev
|
||||||
|
- qemu-utils
|
||||||
|
- libpq-dev
|
||||||
|
- python-yaml
|
||||||
|
- open-iscsi
|
||||||
|
- ipmitool
|
||||||
|
|
||||||
|
ironic_pip_packages:
|
||||||
|
- virtualenvwrapper
|
||||||
|
- six
|
||||||
|
- tox
|
||||||
|
- mysql-python
|
||||||
|
- python_ironicclient
|
||||||
|
|
||||||
|
ironicclient_pip_packages:
|
||||||
|
- python_ironicclient
|
||||||
|
|
||||||
|
## Ironic service
|
||||||
|
ironic_git_repo: https://git.openstack.org/openstack/ironic
|
||||||
|
ironic_git_install_branch: c6e8e2a33c65b6269a0b1b4f5e63620c68bdc3fb # HEAD sha as of 13 Nov 2015
|
||||||
|
ironic_git_dest: "/opt/ironic_{{ ironic_git_install_branch | replace('/', '_') }}"
|
||||||
|
|
||||||
|
## python-ironicclient
|
||||||
|
python_ironicclient_git_repo: https://git.openstack.org/openstack/python-ironicclient
|
||||||
|
python_ironicclient_git_install_branch: b66f5e8dd60c023d6d216c3bbc5ec22d837623c3 # HEAD sha as of 13 Nov 2015
|
||||||
|
python_ironicclient_git_dest: "/opt/python-ironicclient_{{ python_ironicclient_git_install_branch | replace('/', '_') }}"
|
||||||
|
|
4
files/map-file
Normal file
4
files/map-file
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
re ^(/tftpboot/) /tftpboot/\2
|
||||||
|
re ^/tftpboot/ /tftpboot/
|
||||||
|
re ^(^/) /tftpboot/\1
|
||||||
|
re ^([^/]) /tftpboot/\1
|
4
files/tftpd-hpa
Normal file
4
files/tftpd-hpa
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
TFTP_USERNAME="tftp"
|
||||||
|
TFTP_DIRECTORY="/tftpboot"
|
||||||
|
TFTP_ADDRESS="[::]:69"
|
||||||
|
TFTP_OPTIONS="-vvvv --map-file /tftpboot/map-file"
|
23
handlers/main.yml
Normal file
23
handlers/main.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Restart ironic services
|
||||||
|
service:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: restarted
|
||||||
|
pattern: "{{ item }}"
|
||||||
|
with_items: ironic_service_names
|
||||||
|
failed_when: false
|
||||||
|
|
21
local_install.sh
Executable file
21
local_install.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
ROLE_NAME=$(basename $(pwd))
|
||||||
|
|
||||||
|
pushd tests
|
||||||
|
ansible-playbook -i inventory local_install.yml -e rolename=${ROLE_NAME}
|
||||||
|
popd
|
||||||
|
|
16
meta/main.yml
Normal file
16
meta/main.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: OpenStack
|
||||||
|
description: Baremetal provisioning for Openstack
|
||||||
|
company: OpenStack
|
||||||
|
license: Apache
|
||||||
|
min_ansible_version: 1.8
|
||||||
|
platforms:
|
||||||
|
- name: Ubuntu
|
||||||
|
versions:
|
||||||
|
- trusty
|
||||||
|
categories:
|
||||||
|
- cloud
|
||||||
|
- baremetal
|
||||||
|
- system
|
||||||
|
dependencies: []
|
22
run_tests.sh
Executable file
22
run_tests.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
ROLE_NAME=$(basename $(pwd))
|
||||||
|
|
||||||
|
pushd tests
|
||||||
|
ansible-playbook -i inventory --syntax-check --list-tasks test.yml -e rolename=${ROLE_NAME}
|
||||||
|
popd
|
||||||
|
|
||||||
|
ansible-lint */*yml
|
89
tasks/ironic_conductor_post_install.yml
Normal file
89
tasks/ironic_conductor_post_install.yml
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Install apt packages
|
||||||
|
apt:
|
||||||
|
pkg: "{{ item }}"
|
||||||
|
state: latest
|
||||||
|
register: install_packages
|
||||||
|
until: install_packages|success
|
||||||
|
retries: 5
|
||||||
|
delay: 2
|
||||||
|
with_items: ironic_conductor_apt_packages
|
||||||
|
tags:
|
||||||
|
- ironic-install
|
||||||
|
- ironic-apt-packages
|
||||||
|
|
||||||
|
- name: Create /tftpboot
|
||||||
|
file:
|
||||||
|
path: "/tftpboot"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ ironic_system_user_name }}"
|
||||||
|
group: "{{ ironic_system_group_name }}"
|
||||||
|
mode: "0755"
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Copy in tftpd-hpa config file
|
||||||
|
copy:
|
||||||
|
src: tftpd-hpa
|
||||||
|
dest: /etc/default/tftpd-hpa
|
||||||
|
notify:
|
||||||
|
- Restart tftpd-hpa
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Copy in tftpd-hpa map file
|
||||||
|
copy:
|
||||||
|
src: map-file
|
||||||
|
dest: /tftpboot/map-file
|
||||||
|
notify:
|
||||||
|
- Restart tftpd-hpa
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Check to see if pxlinux.0 is required
|
||||||
|
stat: path=/tftpboot/pxelinux.0
|
||||||
|
register: pxelinux_exists
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Check to see if chain.c32 is required
|
||||||
|
stat: path=/tftpboot/chain.c32
|
||||||
|
register: chain32_exists
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Check pxlinux.0 exists
|
||||||
|
stat: path=/usr/lib/syslinux/pxelinux.0
|
||||||
|
register: pxelinux_stat
|
||||||
|
when: not pxelinux_exists
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Copy syslinux pxlinux.0
|
||||||
|
command: cp /usr/lib/syslinux/pxelinux.0 /tftpboot/pxelinux.0
|
||||||
|
when: not pxelinux_exists and pxelinux_stat.stat.exists
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
- name: Copy syslinux chain.c32
|
||||||
|
command: cp /usr/lib/syslinux/chain.c32 /tftpboot/chain.c32
|
||||||
|
when: not chain32_exists and chain32_stat.stat.exists
|
||||||
|
tags:
|
||||||
|
- tftpd-hpa
|
||||||
|
|
||||||
|
|
||||||
|
|
52
tasks/ironic_db_setup.yml
Normal file
52
tasks/ironic_db_setup.yml
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Create database for ironic
|
||||||
|
mysql_db:
|
||||||
|
#login_user: "{{ database_root_user }}"
|
||||||
|
#login_password: "{{ database_root_password }}"
|
||||||
|
#login_host: "{{ ironic_database_address }}"
|
||||||
|
name: "{{ ironic_database_database }}"
|
||||||
|
state: "present"
|
||||||
|
tags:
|
||||||
|
- ironic-db-setup
|
||||||
|
|
||||||
|
- name: Grant access to the DB
|
||||||
|
mysql_user:
|
||||||
|
#login_user: "{{ database_root_user }}"
|
||||||
|
#login_password: "{{ database_root_password }}"
|
||||||
|
#login_host: "{{ ironic_database_address }}"
|
||||||
|
name: "{{ ironic_database_user }}"
|
||||||
|
password: "{{ ironic_database_password }}"
|
||||||
|
host: "{{ item }}"
|
||||||
|
state: "present"
|
||||||
|
priv: "{{ ironic_database_database }}.*:ALL"
|
||||||
|
with_items:
|
||||||
|
- "localhost"
|
||||||
|
- "%"
|
||||||
|
tags:
|
||||||
|
- ironic-db-setup
|
||||||
|
|
||||||
|
- name: Synchronize database schema
|
||||||
|
command: "{{ ironic_bin }}/ironic-dbsync upgrade"
|
||||||
|
sudo: yes
|
||||||
|
sudo_user: "{{ ironic_system_user_name }}"
|
||||||
|
notify:
|
||||||
|
- restart ironic-conductor
|
||||||
|
when: ironic_checkout.changed
|
||||||
|
tags:
|
||||||
|
- ironic-db-setup
|
||||||
|
- ironic-conductor
|
||||||
|
|
33
tasks/ironic_get_source.yml
Normal file
33
tasks/ironic_get_source.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2014, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: git clone ironic source code
|
||||||
|
git: repo=https://github.com/openstack/ironic.git
|
||||||
|
dest={{ ironic_git_dest }}
|
||||||
|
version={{ ironic_git_install_branch }}
|
||||||
|
update=no
|
||||||
|
register: ironic_checkout
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: git clone python-ironicclient source code
|
||||||
|
git: repo=https://github.com/openstack/python-ironicclient.git
|
||||||
|
dest={{ python_ironicclient_git_dest }}
|
||||||
|
version={{ python_ironicclient_git_install_branch }}
|
||||||
|
update=no
|
||||||
|
register: python_ironicclient_checkout
|
||||||
|
tags:
|
||||||
|
- ironic-client
|
29
tasks/ironic_install.yml
Normal file
29
tasks/ironic_install.yml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2014, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Install Ironic (python system library)
|
||||||
|
when: ironic_checkout.changed and not ironic_venv_enabled
|
||||||
|
pip: name="file://{{ ironic_git_dest }}"
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Install Ironic (openstack venv)
|
||||||
|
when: ironic_checkout.changed and ironic_venv_enabled
|
||||||
|
pip: name="file://{{ ironic_git_dest }}" virtualenv="/openstack/venvs/ironic-{{ ironic_venv_tag }}"
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
125
tasks/ironic_pre_install.yml
Normal file
125
tasks/ironic_pre_install.yml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2014, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: create the system group
|
||||||
|
group:
|
||||||
|
name: "{{ ironic_system_group_name }}"
|
||||||
|
state: "present"
|
||||||
|
system: "yes"
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Remove old key file(s) if found
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: "absent"
|
||||||
|
with_items:
|
||||||
|
- "{{ ironic_system_home_folder }}/.ssh/authorized_keys"
|
||||||
|
- "{{ ironic_system_home_folder }}/.ssh/id_rsa"
|
||||||
|
- "{{ ironic_system_home_folder }}/.ssh/id_rsa.pub"
|
||||||
|
when: ironic_recreate_keys | bool
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Create the ironic system user
|
||||||
|
user:
|
||||||
|
name: "{{ ironic_system_user_name }}"
|
||||||
|
group: "{{ ironic_system_group_name }}"
|
||||||
|
comment: "{{ ironic_system_comment }}"
|
||||||
|
shell: "{{ ironic_system_shell }}"
|
||||||
|
system: "yes"
|
||||||
|
createhome: "yes"
|
||||||
|
home: "{{ ironic_system_home_folder }}"
|
||||||
|
generate_ssh_key: "yes"
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Create ironic dir
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ item.owner|default(ironic_system_user_name) }}"
|
||||||
|
group: "{{ item.group|default(ironic_system_group_name) }}"
|
||||||
|
mode: "{{ item.mode|default('0755') }}"
|
||||||
|
with_items:
|
||||||
|
- { path: "/openstack", mode: "0755", owner: "root", group: "root" }
|
||||||
|
- { path: "/etc/ironic" }
|
||||||
|
- { path: "/etc/ironic/rootwrap.d" }
|
||||||
|
- { path: "/etc/sudoers.d", mode: "0750", owner: "root", group: "root" }
|
||||||
|
- { path: "/var/cache/ironic" }
|
||||||
|
- { path: "{{ ironic_system_home_folder }}" }
|
||||||
|
- { path: "{{ ironic_system_home_folder }}/.ssh", mode: "0700" }
|
||||||
|
- { path: "{{ ironic_system_home_folder }}/images" }
|
||||||
|
- { path: "{{ ironic_system_home_folder }}/master_images" }
|
||||||
|
- { path: "/var/lock/ironic" }
|
||||||
|
- { path: "/var/run/ironic" }
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Create ironic venv dir
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- { path: "/openstack/venvs" }
|
||||||
|
- { path: "{{ ironic_venv_bin }}" }
|
||||||
|
when: ironic_venv_enabled | bool
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Test for log directory or link
|
||||||
|
shell: |
|
||||||
|
if [ -h "{{ ironic_system_log_folder }}" ]; then
|
||||||
|
chown -h {{ ironic_system_user_name }}:{{ ironic_system_group_name }} "{{ ironic_system_log_folder }}"
|
||||||
|
chown -R {{ ironic_system_user_name }}:{{ ironic_system_group_name }} "$(readlink {{ ironic_system_log_folder }} )"
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
register: log_dir
|
||||||
|
failed_when: false
|
||||||
|
changed_when: log_dir.rc != 0
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Create ironic log dir
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ item.owner|default(ironic_system_user_name) }}"
|
||||||
|
group: "{{ item.group|default(ironic_system_group_name) }}"
|
||||||
|
mode: "{{ item.mode|default('0755') }}"
|
||||||
|
with_items:
|
||||||
|
- { path: "{{ ironic_system_log_folder }}" }
|
||||||
|
when: log_dir.rc != 0
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
||||||
|
|
||||||
|
- name: Include sudoers file
|
||||||
|
template:
|
||||||
|
src: "sudoers.j2"
|
||||||
|
dest: "/etc/sudoers.d/{{ ironic_system_user_name }}_sudoers"
|
||||||
|
mode: "0440"
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
tags:
|
||||||
|
- ironic-api
|
||||||
|
- ironic-conductor
|
46
tasks/ironic_upstart_common_init.yml
Normal file
46
tasks/ironic_upstart_common_init.yml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2014, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Place the init script
|
||||||
|
template:
|
||||||
|
src: "ironic-upstart-init.j2"
|
||||||
|
dest: "/etc/init/{{ program_name }}.conf"
|
||||||
|
mode: "0644"
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
notify:
|
||||||
|
- Restart ironic services
|
||||||
|
tags:
|
||||||
|
- upstart-init
|
||||||
|
- ironic-init
|
||||||
|
|
||||||
|
- name: Reload init scripts
|
||||||
|
shell: |
|
||||||
|
initctl reload-configuration
|
||||||
|
notify:
|
||||||
|
- Restart ironic services
|
||||||
|
tags:
|
||||||
|
- upstart-init
|
||||||
|
- ironic-init
|
||||||
|
|
||||||
|
- name: Load service
|
||||||
|
service:
|
||||||
|
name: "{{ program_name }}"
|
||||||
|
enabled: "yes"
|
||||||
|
notify:
|
||||||
|
- Restart ironic services
|
||||||
|
tags:
|
||||||
|
- upstart-init
|
||||||
|
- ironic-init
|
35
tasks/ironic_upstart_init.yml
Normal file
35
tasks/ironic_upstart_init.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2014, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
- include: ironic_upstart_common_init.yml
|
||||||
|
vars:
|
||||||
|
program_name: "{{ ironic_api_program_name }}"
|
||||||
|
service_name: "{{ ironic_service_name }}"
|
||||||
|
system_user: "{{ ironic_system_user_name }}"
|
||||||
|
system_group: "{{ ironic_system_group_name }}"
|
||||||
|
service_home: "{{ ironic_system_home_folder }}"
|
||||||
|
# TODO(mrda): define groups
|
||||||
|
# when: inventory_hostname in groups['ironic_api_metadata']
|
||||||
|
|
||||||
|
- include: ironic_upstart_common_init.yml
|
||||||
|
vars:
|
||||||
|
program_name: "{{ ironic_conductor_program_name }}"
|
||||||
|
service_name: "{{ ironic_service_name }}"
|
||||||
|
system_user: "{{ ironic_system_user_name }}"
|
||||||
|
system_group: "{{ ironic_system_group_name }}"
|
||||||
|
service_home: "{{ ironic_system_home_folder }}"
|
||||||
|
# TODO(mrda): define groups
|
||||||
|
# when: inventory_hostname in groups['ironic_cert']
|
||||||
|
|
23
tasks/main.yml
Normal file
23
tasks/main.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
- include: ironic_pre_install.yml
|
||||||
|
- include: ironic_get_source.yml
|
||||||
|
- include: ironic_install.yml
|
||||||
|
- include: python_ironicclient_install.yml
|
||||||
|
- include: ironic_conductor_post_install.yml
|
||||||
|
- include: ironic_db_setup.yml
|
||||||
|
- include: ironic_upstart_init.yml
|
||||||
|
|
26
tasks/python_ironicclient_install.yml
Normal file
26
tasks/python_ironicclient_install.yml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2014, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Install Python-Ironicclient (python system library)
|
||||||
|
when: python_ironicclient_checkout.changed and not ironic_venv_enabled
|
||||||
|
pip: name="file://{{ python_ironicclient_git_dest }}"
|
||||||
|
tags:
|
||||||
|
- ironic-client
|
||||||
|
|
||||||
|
- name: Install Python-Ironicclient (openstack venv)
|
||||||
|
when: python_ironicclient_checkout.changed and ironic_venv_enabled
|
||||||
|
pip: name="file://{{ python_ironicclient_git_dest }}" virtualenv="/openstack/venvs/ironic-{{ ironic_venv_tag }}"
|
||||||
|
tags:
|
||||||
|
- ironic-client
|
46
templates/ironic-upstart-init.j2
Normal file
46
templates/ironic-upstart-init.j2
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
# vim:set ft=upstart ts=2 et:
|
||||||
|
|
||||||
|
description "{{ program_name }}"
|
||||||
|
author "Michael Davies <michael@the-davies.net>"
|
||||||
|
|
||||||
|
start on runlevel [2345]
|
||||||
|
stop on runlevel [016]
|
||||||
|
|
||||||
|
respawn
|
||||||
|
respawn limit 10 5
|
||||||
|
|
||||||
|
# Set the RUNBIN environment variable
|
||||||
|
env RUNBIN="{{ ironic_bin }}/{{ program_name }}"
|
||||||
|
|
||||||
|
# Change directory to service users home
|
||||||
|
chdir "{{ service_home }}"
|
||||||
|
|
||||||
|
# Pre start actions
|
||||||
|
pre-start script
|
||||||
|
mkdir -p "/var/run/{{ program_name }}"
|
||||||
|
chown {{ system_user }}:{{ system_group }} "/var/run/{{ program_name }}"
|
||||||
|
|
||||||
|
mkdir -p "/var/lock/{{ program_name }}"
|
||||||
|
chown {{ system_user }}:{{ system_group }} "/var/lock/{{ program_name }}"
|
||||||
|
|
||||||
|
{% if ironic_venv_enabled | bool -%}
|
||||||
|
. {{ ironic_venv_bin }}/activate
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
end script
|
||||||
|
|
||||||
|
# Post stop actions
|
||||||
|
post-stop script
|
||||||
|
rm "/var/run/{{ program_name }}/{{ program_name }}.pid"
|
||||||
|
end script
|
||||||
|
|
||||||
|
# Run the start up job
|
||||||
|
exec start-stop-daemon --start \
|
||||||
|
--chuid {{ system_user }} \
|
||||||
|
--make-pidfile \
|
||||||
|
--pidfile /var/run/{{ program_name }}/{{ program_name }}.pid \
|
||||||
|
--exec "{{ program_override|default('$RUNBIN') }}" \
|
||||||
|
-- {{ program_config_options|default('') }} \
|
||||||
|
--log-file={{ ironic_system_log_folder }}/{{ program_name }}.log
|
6
templates/sudoers.j2
Normal file
6
templates/sudoers.j2
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
Defaults:{{ ironic_system_user_name }} !requiretty
|
||||||
|
Defaults:{{ ironic_system_user_name }} secure_path="{{ ironic_bin }}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
|
||||||
|
{{ ironic_system_user_name }} ALL = (root) NOPASSWD: {{ ironic_bin }}/{{ ironic_service_name }}-rootwrap
|
2
tests/ansible.cfg
Normal file
2
tests/ansible.cfg
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[defaults]
|
||||||
|
roles_path = ../..
|
5
tests/inventory
Normal file
5
tests/inventory
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[all]
|
||||||
|
localhost ansible_connection=local ansible_user=root
|
||||||
|
|
||||||
|
[installhost]
|
||||||
|
installhost ansible_user=root ansible_ssh_port=22 ansible_ssh_host=192.168.1.21
|
5
tests/local_install.yml
Normal file
5
tests/local_install.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: Do things with the openstack-ironic-role role
|
||||||
|
remote_user: root
|
||||||
|
hosts: installhost
|
||||||
|
roles:
|
||||||
|
- role: openstack-ansible-ironic
|
20
tests/test.yml
Normal file
20
tests/test.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2015, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# 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: Playbook for role testing
|
||||||
|
hosts: localhost
|
||||||
|
remote_user: root
|
||||||
|
roles:
|
||||||
|
- role: "{{ rolename }}"
|
Loading…
Reference in New Issue
Block a user