Merge "Use python import machinery for inventory code"

This commit is contained in:
Jenkins 2017-07-31 14:56:51 +00:00 committed by Gerrit Code Review
commit ca402dc36e
13 changed files with 47 additions and 63 deletions

View File

@ -31,6 +31,9 @@ The command can also be run manually as follows:
This invocation is useful when testing changes to the dynamic inventory script.
.. note:: When running the ``dynamic_inventory.py`` script on a local
development machine, use ``python dynamic_inventory.py`` instead.
Inputs
^^^^^^

View File

@ -21,10 +21,10 @@ import datetime
import json
import logging
import os
from osa_toolkit import dictutils as du
import tarfile
import yaml
import dictutils as du
logger = logging.getLogger('osa-inventory')

View File

@ -15,15 +15,15 @@
#
# (c) 2014, Kevin Carter <kevin.carter@rackspace.com>
import ip
import json
import logging
import netaddr
from osa_toolkit import dictutils as du
from osa_toolkit import filesystem as filesys
from osa_toolkit import ip
import uuid
import warnings
import dictutils as du
import filesystem as filesys
logger = logging.getLogger('osa-inventory')

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/opt/ansible-runtime/bin/python
# Copyright 2014, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@ -19,11 +19,13 @@ import argparse
import os
import sys
try:
from osa_toolkit import generate
except ImportError:
current_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
lib_path = os.path.join(current_path, '..', '..', 'osa_toolkit')
sys.path.append(lib_path)
import generate
from osa_toolkit import generate
# Function kept in order to use relative pathing for the env.d directory

View File

@ -0,0 +1,6 @@
---
other:
- The inventory generation code has been switched to use standard Python
packaging tools. For most, this should not be a visible change. However,
running the dynamic inventory script on a local development environment
should now be called via ``python dynamic_inventory.py``.

View File

@ -80,6 +80,7 @@ esac
PIP_OPTS=""
if [ -n "$HTTPS_PROXY" ]; then
PIP_OPTS="--proxy $HTTPS_PROXY"
elif [ -n "$HTTP_PROXY" ]; then
PIP_OPTS="--proxy $HTTP_PROXY"
fi
@ -141,6 +142,9 @@ PIP_OPTS+=" --constraint ${UPPER_CONSTRAINTS_FILE}"
${PIP_COMMAND} install ${PIP_OPTS} -r requirements.txt ${ANSIBLE_PACKAGE} \
|| ${PIP_COMMAND} install --isolated ${PIP_OPTS} -r requirements.txt ${ANSIBLE_PACKAGE}
# Install our osa_toolkit code from the current checkout
$PIP_COMMAND install -e .
# Ensure that Ansible binaries run from the venv
pushd /opt/ansible-runtime/bin
for ansible_bin in $(ls -1 ansible*); do

View File

@ -19,11 +19,7 @@ import argparse
import os
import sys
cwd = os.path.abspath(os.path.dirname(__file__))
import_path = os.path.join(cwd, '..', 'osa_toolkit')
sys.path.append(import_path)
import tools
from osa_toolki import tools
def args(arg_list):
@ -58,6 +54,7 @@ def args(arg_list):
if __name__ == "__main__":
script_args = args(sys.argv[1:])
config = tools.make_example_config(
script_args['base'],
script_args['conf_dir']

View File

@ -23,14 +23,8 @@
# to manage.py in order to facilitate importing of the python code
# This file remains for backwards compatibility
import os
import sys
cwd = os.path.abspath(os.path.dirname(__file__))
import_path = os.path.join(cwd, '..', 'osa_toolkit')
sys.path.append(import_path)
import manage
from osa_toolkit import manage
if __name__ == "__main__":
manage.main()

View File

@ -12,16 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import os
from os import path
import sys
import unittest
LIB_DIR = 'osa_toolkit'
sys.path.append(path.join(os.getcwd(), LIB_DIR))
import dictutils as du
from osa_toolkit import dictutils as du
class TestMergeDictUnit(unittest.TestCase):

View File

@ -24,12 +24,10 @@ from test_inventory import get_inventory
from test_inventory import make_config
INV_DIR = 'playbooks/inventory'
LIB_DIR = 'osa_toolkit'
sys.path.append(path.join(os.getcwd(), LIB_DIR))
sys.path.append(path.join(os.getcwd(), INV_DIR))
import filesystem as fs
from osa_toolkit import filesystem as fs
TARGET_DIR = path.join(os.getcwd(), 'tests', 'inventory')
USER_CONFIG_FILE = path.join(TARGET_DIR, 'openstack_user_config.yml')
@ -50,14 +48,14 @@ class TestMultipleRuns(unittest.TestCase):
def test_creating_backup_file(self):
inventory_file_path = os.path.join(TARGET_DIR,
'openstack_inventory.json')
get_backup_name_path = 'filesystem._get_backup_name'
get_backup_name_path = 'osa_toolkit.filesystem._get_backup_name'
backup_name = 'openstack_inventory.json-20160531_171804.json'
tar_file = mock.MagicMock()
tar_file.__enter__.return_value = tar_file
# run make backup with faked tarfiles and date
with mock.patch('filesystem.tarfile.open') as tar_open:
with mock.patch('osa_toolkit.filesystem.tarfile.open') as tar_open:
tar_open.return_value = tar_file
with mock.patch(get_backup_name_path) as backup_mock:
backup_mock.return_value = backup_name

View File

@ -26,16 +26,14 @@ import warnings
import yaml
INV_DIR = 'playbooks/inventory'
LIB_DIR = 'osa_toolkit'
sys.path.append(path.join(os.getcwd(), LIB_DIR))
sys.path.append(path.join(os.getcwd(), INV_DIR))
import dictutils
from osa_toolkit import dictutils
import dynamic_inventory
import filesystem as fs
import generate as di
import tools
from osa_toolkit import filesystem as fs
from osa_toolkit import generate as di
from osa_toolkit import tools
TARGET_DIR = path.join(os.getcwd(), 'tests', 'inventory')
BASE_ENV_DIR = INV_DIR
@ -488,8 +486,8 @@ class TestIps(unittest.TestCase):
self.longMessage = True
self.env = fs.load_environment(BASE_ENV_DIR, {})
@mock.patch('filesystem.load_environment')
@mock.patch('filesystem.load_user_configuration')
@mock.patch('osa_toolkit.filesystem.load_environment')
@mock.patch('osa_toolkit.filesystem.load_user_configuration')
def test_duplicates(self, mock_load_config, mock_load_env):
"""Test that no duplicate IPs are made on any network."""
@ -1187,8 +1185,8 @@ class TestNetworkEntry(unittest.TestCase):
class TestDebugLogging(unittest.TestCase):
@mock.patch('generate.logging')
@mock.patch('generate.logger')
@mock.patch('osa_toolkit.generate.logging')
@mock.patch('osa_toolkit.generate.logger')
def test_logging_enabled(self, mock_logger, mock_logging):
# Shadow the real value so tests don't complain about it
mock_logging.DEBUG = 10
@ -1199,8 +1197,8 @@ class TestDebugLogging(unittest.TestCase):
self.assertTrue(mock_logger.info.called)
self.assertTrue(mock_logger.debug.called)
@mock.patch('generate.logging')
@mock.patch('generate.logger')
@mock.patch('osa_toolkit.generate.logging')
@mock.patch('osa_toolkit.generate.logger')
def test_logging_disabled(self, mock_logger, mock_logging):
get_inventory(extra_args={"debug": False})
@ -1244,7 +1242,7 @@ class TestLxcHosts(TestConfigCheckBase):
inventory['lxc_hosts']['hosts'].append('compute1')
faked_path = INV_DIR
with mock.patch('filesystem.load_inventory') as inv_mock:
with mock.patch('osa_toolkit.filesystem.load_inventory') as inv_mock:
inv_mock.return_value = (inventory, faked_path)
new_inventory = get_inventory()
# host should no longer be in lxc_hosts
@ -1260,7 +1258,7 @@ class TestLxcHosts(TestConfigCheckBase):
self.assertNotIn('lxc_hosts', inventory.keys())
faked_path = INV_DIR
with mock.patch('filesystem.load_inventory') as inv_mock:
with mock.patch('osa_toolkit.filesystem.load_inventory') as inv_mock:
inv_mock.return_value = (inventory, faked_path)
new_inventory = get_inventory()
@ -1377,7 +1375,7 @@ class TestInventoryGroupConstraints(unittest.TestCase):
'load_user_configuration': mock.DEFAULT
}
with mock.patch.multiple('filesystem', **kwargs) as mocks:
with mock.patch.multiple('osa_toolkit.filesystem', **kwargs) as mocks:
mocks['load_environment'].return_value = env
mocks['load_user_configuration'].return_value = config

View File

@ -12,16 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
import os
from os import path
import sys
import unittest
LIB_DIR = path.join(os.getcwd(), 'osa_toolkit')
sys.path.append(LIB_DIR)
import ip
from osa_toolkit import ip
class TestIPManager(unittest.TestCase):

View File

@ -14,16 +14,12 @@
import os
from os import path
import sys
import test_inventory
import unittest
MANAGE_DIR = path.join(os.getcwd(), 'osa_toolkit')
TARGET_DIR = path.join(os.getcwd(), 'tests', 'inventory')
sys.path.append(MANAGE_DIR)
import manage as mi
from osa_toolkit import manage as mi
def setUpModule():