CHANGES
=======

1.0.4
-----

* Fix unwanted unmounting of /usr/share/oem

1.0.3
-----

* Updated from global requirements
* Install qemu-image from backports repo
* Correct link to enabling agent drivers
* Fix full_trusty_build once and for all
* Append BRANCH_PATH to filenames of build output

1.0.2
-----

* determine tgtd ready status through tgtadm
* Fix vfd mount for capitalized device name
* Updated from global requirements

1.0.1
-----

* Add release note for 9353adda59d7fe9d85465ef195b82a2437814e39
* Add reno for release notes management
* Updated from global requirements
* Fix "logs" inspection collector when logs contain non-ascii symbols
* pyudev exception has changed for from_device_file
* Updated from global requirements
* Set up stable/liberty branch

1.0.0
-----

* Updated from global requirements
* Add "logs" and "extra-hardware" inspection collectors
* Use doc8 style checker
* Make the erase_devices clean step abortable
* Fixes config drive creation failure in UEFI boot mode
* Fix default ironic api port number
* Add more info to checksum exception
* Expose serial, wwn and vendor on the BlockDevice object
* Updated from global requirements
* inspection: prepare for future deprecations
* Follow-up to inspection patch 096830414b
* Fixes incorrect description URL
* Added home-page value in setup.cfg file
* Adds project resources links to Readme
* Create a SerializableComparable class
* Install "dmidecode" and "ipmitool" by default
* Tuples returned by clean steps cause API error
* Add support for inspection using ironic-inspector
* Rename unit test file utils.py to test_utils.py
* Add docstrings for cmd/agent and extensions/clean
* Remove ordereddict as 2.6 is no longer supported
* Fix plural agreement grammar error
* Three attempts message is incorrect
* Fix get_os_install_device()
* Update qemu-utils package from testing
* Updated from global requirements
* Split functional and py27 tests
* Load Hardware Managers at runtime
* Enable --debug for debug logging
* Have tox run py34 as first test
* Dispatch the call to erase_block_device
* Refactor list_block_devices to its own function
* Updated from global requirements
* Updated from global requirements
* Allow passing node UUID to lookup
* Extend hardware manager with data needed for inspector
* Updated from global requirements
* Bump wait timeout in functional tests to 5 seconds
* Use addCleanup instead of tearDown
* Remove execute mode of cloud-config.yaml
* Add base for IPA functional tests
* Updated from global requirements
* Updated from global requirements
* Cleaning with custom hardware manager docs
* Fix printing of errors in IPA
* Activate pep8 check that _ is imported
* Fix logging levels
* Updated from global requirements
* Remove openstack.common package
* Updated from global requirements
* Add node param to base erase_block_device
* Improve IPA logging and exception handling
* Updated from global requirements
* Updated from global requirements
* Updated from global requirements
* Change Dockerfile to use Debian as a base
* Updated from global requirements
* Add Python3 support
* Fix using non-existent mock method
* Fix iso-image-create to work on RedHat distros
* Updated from global requirements
* Mark required packages before cleanup
* Convert Int to String for shred execute
* Switch to oslo.service
* Use host_device mode for qemu-img
* IPA:'shred' utility to use configured iterations
* Updated from global requirements
* Fixes CoreOS GPG expired key
* Updated from global requirements
* Add power_off command in standby extension
* Add 'pbr' to the requirements
* Updated from global requirements
* Update hacking and fix hacking violations
* Make sure sysrq functions are enabled in reboot.sh
* Rename gendocs tox environment
* Fix error in in-band disk erase using shred
* Updated from global requirements
* Use latest pip in Docker build
* Fix inband disk erase using agent_ilo driver
* Use mkdtemp for mounting virtual media device
* Error doc builds on WARN or ERROR
* Add PYTHONHASHSEED=0 to venv tox env
* Docs on HardwareManager, building, and workflow
* Fix Sphinx Autodoc WARNING/ERROR in docs build
* Add sphinx build + basic documentation
* Update README file
* Use oslo_log lib
* Sync from oslo.incubator
* Do udevadm settle after running partx in image extn
* Updated from global requirements
* Call partprobe+partx before writing configdrive
* Add fallback secure erase using shred
* Add cleaning/zapping support to IPA
* Add uefi support in image extension
* Fix nit in test_get_agent_params_from_cache
* Cache agent parameters for later invocations
* Add support for root device hints
* Add dispatch to all managers
* Use labels for virtual media dev in agent ramdisk
* os.path.exists should be mocked in test case
* SyncCommandResult should store actual exception
* Move _get_agent_params() to a common place
* Updated from global requirements
* Add the image extension (for local boot)
* Fix incorrect IPA log message
* Enable setting standalone mode via APARAMS
* Add iscsi extension
* Updated from global requirements
* Add additional logging and return results for IPA extensions
* Log required troubleshooting info on image dl fail
* Image building support for fedora hosts
* Add *.swp to .gitignore
* use oslo_config replace oslo.config
* Added support for secure erase enhanced
* Use partx to update partition table
* Prevent CoreOS from using configdrive in ramdisk
* Correct inline comment in sync_command decorator
* Updated from global requirements
* Make all IPA error classes inherit from RESTError
* Consistent way to set details for Error instances
* Updated from global requirements
* Error classes invoke their parent's __init__()
* Updated from global requirements
* HardwareManagerMethodNotFound requires a method
* Allow use of multiple simultaneous HW managers
* Remove python 2.6 from tox.ini
* Updated from global requirements
* Skip failing execute tests when using /tmp noexec
* Reduce _verify_image memory consumption
* Remove /mnt/sys support
* Remove configdrive builder
* Add standalone mode for IPA
* Fix missing string format symbol
* Do not log configdrive contents ever
* Use LLDP to get switch port mapping
* Use oslo.utils and oslo.concurrency
* Workflow documentation is now in infra-manual
* Fix badly named function _get_kernel_params()
* Updated from global requirements
* Use _ instead of - for config options
* Improve/add docstrings for CommandResult classes
* Support configdrive from HTTP(S)
* Use requirements.txt from the root for image build
* Cleanup coreos-oem-inject.py
* Fix requests version for build scripts
* Updated from global requirements
* Improve docstrings for cmd/agent.py
* Write image directly to disk
* Force heartbeat immediately after async command completes
* Use poll instead of threading.Event in heartbeat thread
* Delete unused method get_agent_mac_address()
* Add docstrings for api/ tree
* Preserve environment variables when doing sudo
* Add support to build iso image
* Remove PyPy from default tox runlist
* Add docstrings for agent.py
* Enhance decorators in agent and automate creation of command_map
* Fix exception that is not properly raised
* Add missing "/files" to IPA image URLs
* Fix minor documentation issues
* Fix incorrect documentation
* Add vmedia boot support in IPA
* Clean up image build script
* Sync oslo.incubator modules
* Prevent python 2.7 from being purged in container
* Updated from global requirements
* Bump IPA container to use Trusty
* Bump CoreOS to latest stable
* Add support for psutil v1 as well as v2
* Add two undeclared dependencies to the Dockerfile
* Improve Disk Detection
* Fix no IP on interface error
* Migrate CoreOS to use coreos-cloudinit
* Install requirements for coreos-oem-inject.py
* Run make with sudo when building
* Add current directory logging to build script
* Fix author/email in setup.cfg
* Add support for passing no configdrive
* Add infra build script to IPA
* Converted documentation in md format to rst
* No longer recommend use of ipa-advertise-url
* Better errors for execute() failures
* Improve readme for CoreOS imagebuild
* Fix comments to reflect reality
* Fix invalid command in Dockerfile
* Reduce requests connection pool size
* Fix HardwareManager loading order bug
* Improve cache_image testing
* Remove duplicated test for caching image
* Fix incorrect log statement
* Use processutils properly
* Fix: partitions recently imaged not being detected
* Fix test_run_image
* Tries to advertise valid default IP
* Perform manual error checks instead of set -e
* Expose decom.erase_hardware command via API
* Add a HardwareManager method to erase devices
* Add missing methods to base HardwareManager class
* Allow configdrive partition to be precreated
* Readme should point to Openstack, not travis-ci
* Flow extension uses extension manager from agent
* Switch to oslo.config for CLI parsing
* Don't begin heartbeating until the API server is listening
* Make encoding.serialize() more programmatical
* Uninstall more buildtime only deps and clean lists
* Fix unexpected stevedore traceback in tests
* Fix broken path to shell scripts
* Make docker image smaller by using Precise
* Use systemd-nspawn instead of docker for image
* Check configdrive size before writing to partition
* Remove Heartbeat-Before check from heartbeat
* Accept new parameters for `prepare_image`
* Fix expected status code in Ironic heartbeat
* Revert "Fix expected status code in Ironic lookup"
* Fix expected status code in Ironic lookup
* Fix wait argument on POST
* Uniquely identify builds to prevent race
* Better documentation and defaults for coreos image
* Use docker import/export to make image smaller
* Decorated commands no longer take command_name
* Deprecated extension name attribute
* Added metaclass statement
* Add a @sync_command() decorator
* Organize agent extensions
* Minor fixes to image build
* Use configurable driver name in lookup URL
* Kill the build_agent function
* Add FlowExtension
* Add self to validator method
* Resolve circular import, introduce ExecuteCommandMixin
* Implement version 2 payload with more hw info
* Use a released version of Pecan
* Deprecate hardware._cmd in favor of utils.execute
* Close file handle after use
* Properly mock _cmd so blockdev does not run
* Use # instead of """ for copyright blocks
* Version node lookup payload
* Compatibility fixes for Python 3.3
* Add BackOffLoopingCall with jitter
* Move split_command to utils
* Added execute util
* Add timeout param for execution_thread.join
* Adding oslotest to improve debugging
* Added some infrastructure tools
* Added some oslo modules
* Synced oslo modules
* Add kernel parameter support
* Updated from global requirements
* Adding DynamicLoopingCall around lookup
* Remove advertise-host from service file
* Added PyPy env to tox.ini
* Fix URL for node lookup
* Get rid of modes. Introduce pluggable extensions
* Actual exception message, stylistic changes
* Removing commented out code
* Getting the heartbeat from Ironic instead
* Fixing import order
* Doing replacement on imagebuild
* Renaming things in Dockerfile
* Replacing teeth/overlord with ipa/ironic
* Renaming to IPA
* Fixing kwarg vs posarg
* Generalizing help message for command args
* Using RFC5737 example ip addrs
* Using advertise_address, using valid uuid/macs
* remove wsgiref
* Removing host/port, already in listen_address
* fix tests on python 2.6
* Minor fixes and sending agent_url with heartbeat
* Remove dependency on werkzeug
* Consolidate content and configuration as node
* Renaming ConfigurationError to LookupNodeError
* Renaming get_configuration to lookup_node
* Retaining configuration error, changing message
* Retaining configuration error, changing message
* Adding Apache header
* fix log.exception calls
* switch structlog out for oslo.log
* add oslo.config and oslo.log
* Fixing merge conflicts, passing py26
* Remove dependency on teeth-rest
* Fix MediaType() call and add tests for / and /v1
* remove commented code
* fix up API docs a bit
* add wait param
* simplify tests a bit
* Cleaning up errors
* All posted data goes in get_configuration
* parse the ipaddr argument
* add horrible method of getting the host IP
* Using Ironic vendor passthru for heartbeat/config
* fix up some text
* remove oslo dependency
* remove dead code
* fix some copyrights
* add /status and fix tests
* get api tests passing
* fix exception handling
* some cleanup
* move everything into pecan
* add(gerrit support): Required to move to openstack
* Fixing ordereddict and format string for py26
* Preparing for OpenStack testing environment
* fix(coreos-oem-inject): Default to dev-channel
* remove api-url from unit file
* get things kind of working with pecan
* add(gerrit support): Required to move to openstack
* bump(stevedore): Bump to version in OS global reqs
* remove(dep): Remove dep on plumbum
* fix(test): Properly mock hwmgr for heartbeat test
* img(coreos): Initial commit of CoreOS image build
* test(standby): Ensure hardware call is mocked
* check for cached image in cache_image as well
* add tests
* pass command_name to the command function itself
* also mark cached in prepare
* accept command name in decorator
* don't write image if already cached
* remove magic from decorator and fix function binding
* add wait option to POST /commands
* Use thread methods rather than time.sleep to wait
* Fixing single vs double quotes
* Added an async_command decorator
* Making async and sync calls consistent
* Adding format_logger from teeth_overlord
* Fixing quoting
* Changing image commands to be async functions
* speedup(image): Use dd to write image
* force ordering in tests
* use unicode listerals in configdrive tests
* fix(travis): Build master or PRs to master only
* update tests
* remove auto-discovery of advertise url
* download and write out an image in cache_image
* update standby agent tests
* update standby agent to use split makefs.sh
* add new ConfigDriveWriteError class
* split makefs.sh into two scripts
* make 'cache_image' singular
* update heartbeater use of client heartbeat()
* update overlord client tests
* update overlord client heartbeat method
* add test of list_hardware_info
* add HardwareManager method to list hw info
* update list_network_interfaces tests
* filter out virtual interfaces
* add tests of listing network interfaces
* expand use of /mnt/sys detection
* fix typo
* allow listing of MAC addresses
* fix configdrive content location
* fix(style): Fix style to match rest of project
* imporove OS install device detection test
* fix(logging): Don't drop precision on time values
* update OS install device detection test
* improve OS install device detection
* add plumbum requirement
* fix(log): Log attrs separately instead of w/format
* add(logging): Log and time various events
* fix configdrive write tests
* make configdrive dirs before writing
* cause the agent to lazily load a command mode
* make InvalidCommandError more generic
* fix dockerfile cmd
* fix(Dockerfile): Use CMD instead of Entrypoint
* retrieve OS install dev from the HardwareManager
* cache a global hardware manager
* fix(Dockerfile): Install requirements separately
* fix(docker): git required to install from repo
* fix(log): Use basename instead of hardcoding name
* fix(makefs): Match 0, not just numbers ending in zero
* feature(makefs): Add logging of all activities
* use openstack as default configdrive prefix
* improve stevedore import
* call a function that actually exists
* simplify HardwareManager comparison
* update tests
* register the BaseHardwareManager
* use the new hardware manager loading
* make hardware managers pluggable
* better metadata name
* hardcode device to /dev/sda
* remove test_prepare.py
* write configdrive to disk from metadata
* move sync result wrapping into BaseAgentMode
* clarify BaseAgentMode operation
* add configdrive from teeth_overlord
* update standby tests
* load agent mode from the configuration API
* add an API client method to fetch agent config
* add an OverlordAPIError
* clarify test module naming
* update tests
* update imports
* split out base and agent modules
* unify the agent executables in teeth-agent
* use a mode implementation in the teeth agent
* rename BaseTeethAgent to TeethAgent
* allow BaseTeethAgent to load a mode implementation
* register standby and decom modes in setup.cfg
* replace DecomAgent with DecomMode
* replace StandbyAgent with StandyMode
* add BaseAgentMode class
* add stevedore dependency
* add travis build status badge to README
* fix(travis): disable email notify, enable IRC
* bump to latest teeth-rest
* add run_image command
* fix(travis): We do not need env set
* fix(travis): Specify python version
* add(travis): Add config for travis-ci
* add(Dockerfile): Add Dockerfile for building teeth-agent
* fix(requirements): git ssh urls changed to https
* hardcode on-disk location for configdrive
* change variable name
* accept configdrive info as path: base64_content
* fix image checksums
* fix(makefs.sh): Remove any existing partition tables
* check for empty urls/hashes
* catch streaming errors
* fix comment
* simplify errors
* test _verify_image
* consolidate _write_image tests
* add test for _write_local_config_drive
* verify checksums
* check makefs.sh return code
* remove default arguments
* fix tests
* run makefs under bash
* unpin httmock
* refactor downloading a bit
* fix makefs.sh location
* try all urls
* pin httmock to working version
* better exception for failed checksum
* log reason for shutdown
* better download error exception
* update tests
* add missing parens
* update commands to pass advertise_host
* take a listen_host argument to base agent
* re-order listen-host and listen-port arguments
* update tests
* allow the user to specify listen-host
* update configdrive location in test script
* update tests
* use 1 MB chunks for downloads
* add script to boot a server
* support separation of listen and advertised ports
* make configdrive data and device dynamic
* remove the listen_host parameter to both agents
* resolve listen IP by connecting to API
* fix typo
* log heartbeats
* fix teet-rest requirement
* throw in a configdrive hack
* configure logging in both agents
* add a logging module to configure structlog
* bump teeth-rest
* add shell script for injecting configdrive
* start writing tests
* update tests to verify cherrypy use
* use cherrypy in place of werkzeug dev server
* add cherrypy to requirements.txt
* skeleton for agent prepare/run commands
* add fetch and list API unit tests
* remove unused serialize method on AgentCommand
* join cache_images result in tests
* add join to base command result
* lock to avoid race conditions in command execution
* limit the agent to a single concurrent command
* add api endpoints to list and fetch results
* update tests to reflect plural /commands API
* make /commands plural in the API
* return an async result from standby.cache_images
* add BaseAgent methods to retrieve and list results
* fix reference to invalid error class
* modify comment to match test
* fix typos in base agent
* modify api client to use request instead of send
* stop heartbeating when agent is stopped
* first pass at heartbeater tests
* exponential backoff in heartbeater
* verify the heartbeater is started
* start the heartbeater on agent run
* add tests of api client failure cases
* fix incorrect exception in api client
* happy path test of api client
* actually use the specified method in the api client
* return the heartbeat-before value from the api client
* fix typo
* add dependency on httmock
* add tests of hardware module
* read the eth0 mac address from sysfs
* add a class that heartbeats to the API
* add methods to get agent URL and mac address
* record agent version on TeethBaseAgent
* add a teeth-agent-api client library
* take an --api-url option to agent executables
* pass in api_url to agents in tests
* add an api_url parameter to BaseTeethAgent
* add tests of async command execution
* add an async command result that runs commands in a thread
* add a base class to represent execution errors
* update tests to use new command results
* add a concept of a command result
* update command tests to expect a command name
* pass the command name to implementations
* add tests of image info validation in standby agent
* update api tests to validate command results
* return command results to the user
* pass command results back to the API
* document intentions regarding async command results
* add tests of invalid command execution
* update base agent command execution test
* fix typo in base agent
* begin hacking on command execution
* get rid of separate jenkins tox env
* clean up coverage xml
* generate coverage xml
* run coverage from tox
* begin adding tests for decom and standby modes
* add tests of base agent
* add a test of agent command parameter validation
* add a missing period to an error message
* split agent command test
* simplify internal command execution API
* gitignore .coverage
* add unit tests of agent API
* remove old agent classes
* validate that command params are a dictionary
* split agent out into standby and decom classes
* update code to adhere to OS hacking guidelines
* reduce max line length to default of 79
* add dependency on 'hacking' flake8 plugin
* begin on command execution
* begin adding agent API
* out with the old, in with the new
* give each task a unique id
* add image download tests
* add basic tasks structure
* add(docs): Document when autobuilds happen
* add(docs): Document builder locations
* switch from simplejson to json
* capitalize
* dumb change
* Add tests for require_parameters
* Force upgrade
* finish stubbing out the standby agent
* fix task tests
* hook up `prepare_image` to `PrepareImageTask`
* remove unnecessary parameter to Task constructor
* fix kwarg mismatch
* fix require_parameters
* unify agent handler convention
* rename addHandler -> add_handler
* expose more of structlog.get_logger()
* clean up task logging
* expand agent response to 'status' call
* expose 'log' method which sends log messages to endpoint
* client: send_response -> _send_response
* log fatal errors
* close connections cleanly on a fatal error
* add protocol utilities for parameter validation
* fix bug when non-connected protocol gets disconnected
* fix prepare_image implementation
* fix returning responses
* stop pinging on disconnect
* fix ping response logging
* fix tests
* ping agent endpoint and disconnect when no response occurs
* default make target runs lint + tests
* remove unused import
* make TeethClient to rely more MultiService for startup/shutdown
* update handshake to use new message objects
* Add many test cases for the RPC protocol and start making a Task structure
* add task status
* start on README.md docs on agent protocol
* improve error message
* Use twisted application framework
* Add tests for event emitter class
* distribute is depreciated, setuptools wins
* Move main.py to a scripts directory and wrap in standard options parsing
* Update git ignore
* add structlog
* fix aborting of connection, and set the delimiter to a reasonable \\n
* Fix spelling of standbye
* add jenkins xml submission deps
* Restructure agent into a higher level client that handles multiple connections to the endpoints
* use --null since we print0
* Get version from single place
* Change setup.py to extract version without importing
* Add scripting and Makefile infrastructure to create virtual envs and be ran by CI tooling
* add requirements.txt
* pep8 cleanup
* stub out prepare_image method
* improve handshake logging
* implement connecting and handshaking
* add license file
* rename teeth.agent to teeth_agent
* add agent packaging
* begin work on the agent
