Release Notes


Bug Fixes

  • Adds new lines at EOF of templates used by lftools to generate automated Gerrit changes after a new INFO.yaml is merged.


Upgrade Notes

  • Add Python 3.8 and 3.9 support to PyPI

Deprecation Notes

  • Remove Python 2.7 support to PyPI

Bug Fixes

  • Use Centos8 nodes in ONAP new project creation automated yaml files.

  • Pin urllib3 to <2.0.0

    The latest version of module breaks compatibility with python-{jenkins,openstacksdk}.


    ValueError: Timeout value connect was <object object at
    0x7fe57a4948a0>, but it must be an int, float or None.


    Launchpad#2018567 <>


Deprecation Notes


Bug Fixes

  • Dockerhub retired the v1 version of the dockerhub api, which was used to collect the existing tag information. This patch replaces v1 with v2 which is using json files.


Bug Fixes

  • Correct parameter name in os image cleanup code


Bug Fixes

  • Correct the file path for the JJB info file job. This was incorrectly set as an absolute path, but it needs to be relative to the git repo root.

  • Add the “safe” parameter to URL parsing in create_project. This removes the default safe value which includes the forward slash. In this case, we do want to escape slashes that are part of the repo name.

  • Code refactored to pass MyPy validation. MyPy highlighted a few issues with functional definitions that were overwriting each other in the command subsystem but was not because of how it operates they weren’t discovered.


New Features

  • Add get-private-keys to lftools.jenkins. get-private-keys retrives the private keys and passphrases stored in the credential store. This feature will add the command get-private-keys in order to print these as well.

Bug Fixes

  • Print upload size while deploying Nexus stage repositories. This is useful while comparing the repository sizes being uploaded or released.

  • Only attempt to split nexus3_ports after we’ve checked that they exist, and wrap that attempt in a try/except so that bad ports won’t break other parts of the job.

  • Remove all instances of the gerrit_api.sanity_check function. This is too tightly coupled with other parts of the Gerrit API, and does not perform correctly in the git class.


Bug Fixes

  • Fix template for INFO jobs and a bad call to sanity_check in git.gerrit.


New Features

  • Add get-secrets to lftools.jenkins. get-credentials only produces username/password credentials, which does not include “secret text” stores. This feature will add the command get-secrets in order to print these as well.

  • Add git-native functions for common Gerrit actions.

  • New method git.add_maven_config allows for adding settings files for new projects via JCasC, rather than the old method of using a Groovy script to manually add the file to Jenkins.


Bug Fixes

  • Create an temp file for logs shipping with AWS S3 Buckets.

    Since S3 buckets does not have an underlying file system, to view empty directories, an temp file has to be created when referencing the directory. This allows empty folders to be viewed through cloudfront, without which a 404 error is returned.


Bug Fixes

  • Fix: Indent line correctly to call deploy s3 function.

    When Unix style glob patterns are passed through the CLI option the deploy_s3() function skips the step to push logs to the S3 bucket.


Bug Fixes

  • Typo error in xml mimetype deploy to S3 storage. Thais patch remove the extra sign to correctly map mimetype to content-type.


Bug Fixes

  • Refactor image cleanup code to handle attribute types and multi-cloud config correctly. (Issue-ID: RELENG-3869)

    Error: AttributeError: ‘Connection’ object has no attribute ‘cloud_config’


Bug Fixes

  • When checking mimetype during _upload_to_s3, the newly-added text/html type was checking before it is checked for None, which is a potential TypeError. By moving it after the variable is checked for None, the feature is safe without requiring any further modifications.


Bug Fixes

  • Handle content-type for html uploaded files to S3 storage correctly. This fixes the issue with detecting and setting ExtraArgs for html to text/html instead of text/plain.


Bug Fixes

  • Add check for “stopped” event property before reading property text in nexus.release_staging_repo, in order to avoid possible missing attribute error.


Bug Fixes

  • nexus.release_staging_repos was failing with an error due to an undeclared variable. Upon inspection, there were several other issues at play as well: * No unit test (which would have caught an undeclared variable). * Initial sleep of 20s is significantly longer than many repos take to release. * Only checked release status every 40s, while printing every 20s. * Rather than checking release status, we were checking for “close” status. Nexus closes repos before releasing them, so this is not the correct status to look for when waiting for the repo to release.

    A unit test has been added, several variables issues have been corrected, timing was adjusted (waiting just 5 seconds before the initial check for success), and the code will now check for “release” status.


New Features

  • lftools dco check will now include a check for signoff files to remove commits from the “missing DCO” list. By default, this will check the directory “dco_signoffs”, but the --signoffs option can be used to specify a different directory.

  • This patch adds the possibility for the user to change the Version Schema. This is done by the new –version_regexp <regexp> parameter. If this parameter is not used, then the ONAP #.#.# (“^d+.d+.d+$”) regexp will be used.

    The parameter can be an regexp, like “^d+.d+.d+$”, or a file name, which contains a longer regexp.

    Sample command lftools nexus docker releasedockerhub -o onap -r aai -v –version_regexp “^d+.d+.d+$”

Other Notes

  • Changed the printouts to console when releasing a staging repo. Printout every 20 seconds, and checking if released every 40 second.

  • Conventional Commit message subject lines are now enforced. This affects CI. Additionally, if developers want to protect themselves from CI failing on this please make sure of the following

    • you have pre-commit installed

    • that you have run pre-commit install –hook-type commit-msg

  • The shade library for openstack is deprecated. We are switching to the openstacksdk for image commands.


Bug Fixes

  • Check image owner and visibility on image cleanup

    Recently update on the cloud provider has caused the builder-cron-openstack job to fail, and exposed a bug in our cleanup scripts.

    Check the visibility and ownerid of the image before attempting to remove and image.


New Features

  • Add –repofile to releasedockerhub

    Enables providing a file with the repo names.

    -f, --repofile

    Repo Name is a file name, which contains one repo per row

    Sample lftools nexus docker releasedockerhub –org onap –repo /tmp/test_repos.txt –repofile

    Where the input file has the following syntax, one repo per row, ‘Nexus3 docker.release repo’; ‘dockerhub dockername’

    Sample onap/org.onap.dcaegen2.deployments.tls-init-container; onap/org.onap.dcaegen2.deployments.tls-init-container onap/policy-api; onap/policy-api onap/clamp-backend; onap/clamp-backend onap/msb/msb_apigateway; onap/msb-msb_apigateway

  • Enhancements for saml support.

    1. Added lftools gerrit create-saml-group.

    2. Takes a gerrit endpoint and an ldap group as parameters.

    3. Creates a saml group for this ldap group so that project creation can be automated.

    4. Project creation call now translates ldap group to saml group and adds saml group as project owner.

Upgrade Notes

  • lftools image upload command: NOTE: qemu-img is now required to be installed and on the path for image uploading to work

Bug Fixes

  • lftools image upload command: Previously image was not verified to match the type of image specified prior to upload. Image is now checked with qemu-img before upload to ensure it is of the correct type.


Upgrade Notes

Bug Fixes

  • The openstack image upload has been updated to default to raw uploads. This has been done as the LF Openstack cloud provider prefers raw format and having images uploaded in qcow2 format causes issues with services. Openstack cmd and upload should default to raw not qcow.


Bug Fixes

  • Remove pinned distlib requirement. Distlib is a common requirement for other libraries, and having it pinned is causing failures in builds. It is not explicitly used in lftools, so it does not need to be pinned. Fixes ERROR: virtualenv 20.0.26 has requirement distlib<1,>=0.3.1, but you’ll have distlib 0.3.0 which is incompatible.


Bug Fixes

  • Removes pre-commit as a dependency of lftools. This was an unnecessary dependency as lftools does not use pre-commit at runtime in anyway.


Bug Fixes

  • Requests can’t handle a put call for very large data objects. However, it can accept the data as a file-like object instead, and the size issue will not show up. Documented here:


New Features

  • Support log shipping logs to AWS S3 buckets.

    A conditional statement is provided so that when a s3 bucket name is provided, it checks to see if that bucket exists, and if it exists, uploads the logs.

  • Add utils section, with password generator (passgen).


Bug Fixes

  • Fix stack_cost initialization value


New Features

  • Nexus2 API operations.

    Usage: lftools nexus2 [OPTIONS] COMMAND [ARGS]…

        privilege   Privilege primary interface.
        repository  Repository primary interface.
        role        Role primary interface.
        user        User primary interface.
      --help             Show this message and exit.


New Features

  • Nexus3 API operations.

    Usage: lftools nexus3 [OPTIONS] FQDN COMMAND [ARGS]…

        asset       Asset primary interface.
        privilege   Privilege primary interface.
        repository  Repository primary interface.
        role        Role primary interface.
        script      Script primary interface.
        tag         Tag primary interface.
        task        Task primary interface.
        user        User primary interface.
      --help             Show this message and exit.
  • Enable project_version_update API method. Allows enabling or disabling a project version (visibility in the U/I) via an api call.

Bug Fixes

  • lftools github create-team no longer requires repo it is now an option



Changes to lftools needed for project creation to happen via command line logic.

New Features

  • Add “create role” subcommand for nexus, which enables users to create Nexus roles outside of project creation.

  • Added –exact to the releasedockerhub command. This enables user to only work on a specific repo (specified by –repo)

  • lftools gerrit [OPTIONS] COMMAND [ARGS] abandonchanges Abandon all OPEN changes for a gerrit project. addfile Add an file for review to a Project. addgithubrights Grant Github read for a project. addgitreview Add git review to a project. addinfojob Add an INFO job for a new Project. createproject Create a project via the gerrit API. list-project-inherits-from List who a project inherits from. list-project-permissions List Owners of a Project.

Known Issues

  • Addinfofile trips up on extended characters in usernames. Project lead must be added by hand to lftools infofile create.

Upgrade Notes

  • lftools.ini needs configuration on internal jenkins for auth. Documenting and implementing this is an internal endevor and beyond the scope of these release notes.

Bug Fixes

  • Print rule failures for unclosed repos

  • Catch and print errors thrown by check_response_code in lftools/

  • Use proper python3 config parser. Add has_section check for configparser lftools github update repo will properly return “repo not found” lftools infofile create will now take tsc approval string and set date. lftools infofile will allow INFO.yaml to be created before ldap group. yaml4info now correctly outputs to STDOUT so that its output can be properly captured and printed by python. lfidapi now correctly exits if a group does not exist.


New Features

  • New command lftools infofile create-info-file Creates an initial info file for a project. Must be on the VPN to use.

  • Add the ability to update existing project’s properties. This is done by invoking lftools rtd project-update PROJECT_NAME key=’value’ where key is the name of a json API key for the RTD API and value is the new value you require.

Upgrade Notes

  • Drop support for python2.7 and python3.4(EOL) lftools now requires python >= 3.6 This allows us to remove remaining pins, and to move from glob2 to builtin glob

Bug Fixes

  • Fixed issues with project and subproject listing.


New Features

  • Added a get_filesize method to calculate filesize is an appropriate format. This may be useful in logs if an upload fails.

  • Add support for RTD subprojects, including list, details, create, delete.

Bug Fixes

  • Refactored deploy_nexus to use concurrent.futures rather than multiprocessing. This allows for non-blocking I/O, and also allows for easy state tracking. It should also fix any random failures that are hard to troubleshoot.


New Features

  • Expanded DCO shell script with ‘check’ and ‘match’ commands. The check mode checks a git repo for missing DCO signatures. The match mode confirms whether or not the DCO signature(s) match the git commit author’s email address.

  • Read the Docs CRUD operations.

    Usage: Usage: lftools rtd [OPTIONS] COMMAND [ARGS]

        project-list             Get a list of Read the Docs projects.
        project-details          Retrieve project details.
        project-version-list     Retrieve project version list.
        project-version-details  Retrieve project version details.
        project-create           Create a new project.
        project-build-list       Retrieve a list of a project's builds.
        project-build-details    Retrieve specific project build details.
        project-build-trigger    Trigger a new build.
      --help             Show this message and exit.


Bug Fixes

  • Fix copy archives when a directory is foundm which results in the error: ERROR: [Errno 17] File exists: ‘<dir>’


New Features

  • –team now lists members of a specific team

  • check_votes now takes click.option(’–github_repo’) Used in automation to determine is 50% of committers have voted on an INFO.yaml change

  • nexus release now checks “{}/staging/repository/{}/activity” Ensures that Repository is in closed state Checks if Repository is already released (exit 0) Check for failures, if found (exit 1) Added click.option(‘-v’, ‘–verify-only’, is_flag=True, required=False) if -v is passed, only checks for errors, skips release

Bug Fixes

  • Fixes invite to team


New Features

  • Support multiple nexus sections in lftools.ini

    In the format:


    [nexus] section is taken from -s “server” passed to release job. https part of passed url is stripped before match.

Upgrade Notes

  • current [nexus] section of lftools.ini must be changed to []

    where matches the “server” string passed to lftools nexus release -s The https part of passed url is stripped before match. example provided would require auth section in lftools.ini of []


Bug Fixes

  • Remove drop of staging repos on release The api returns that the relese is completed. in the background java threads are still running. Then we call drop and nexus has threads promoting and dropping at the same time. In this way we lose data. Something else needs to drop, the api does not correctly handle this.


Known Issues

  • Pytest 5 has come out and requires Python >= 3.5 which we’re not presently testing on. Pytest is now pinned to 4.6.4 until we update.

Bug Fixes

  • Change out lfidapi module print statements to use the logger facility. This allows us to split appart information, debugging, and error log statements so that they can be easily enabled and captured on the correct streams.

  • There was a subtle bug where a function call was being overwritten by a local variable of the same name and then a call to the function was being attempted.


Bug Fixes

  • Use requests.put rather than for deploy_nexus in order to fix Nexus 3 compatibility. This does not affect Nexus 2 compatibility.


New Features

  • Add a --force option to delete stacks command. This will help with re-factoring the code in global-jjb scripts using in builder-openstack-cron job to remove orphaned stacks/node and continue with the next stack to delete.

Critical Issues

  • A problem was found with the Jenkins OpenStack cloud configuration job routines that were relying on the long name form of installed plugins. As the long name form is more human friendly we are reverting to that configuration.


New Features

  • Github list and create repositories.

    Usage: Usage: lftools github [OPTIONS] COMMAND [ARGS]…

        audit   List Users for an Org that do not have 2fa enabled.
        create  Create a Github repo for within an Organizations.
        list    List and Organizations GitHub repos.
      --help    Show this message and exit.

Bug Fixes

  • There is a possibility that there exists a file called Archives, and if so, there will be an OSError crash

    02:15:01 File “/home/jenkins/.local/lib/python2.7/site-packages/lftools/”, line 236, in deploy_archives 02:15:01 copy_archives(workspace, pattern) 02:15:01 File “/home/jenkins/.local/lib/python2.7/site-packages/lftools/”, line 170, in copy_archives 02:15:01 for file_or_dir in os.listdir(archives_dir): 02:15:01 OSError: [Errno 20] Not a directory: ‘/w/workspace/autorelease-update-validate-jobs-fluorine/archives’

    This fix raises an Exception, and exists lftools with (1), if there is any issues with the Archive directory

    (missing, a file instead of directory, or something else)

  • Fix OSError in lftools deploy archives due to pattern

    If the pattern is not properly done, the resulting file list might contain duplicated files.

    This fix will remove the duplicated patterns, as well as the duplicated matched files.

    This fix should fix the following crash 08:24:05 File “/home/jenkins/.local/lib/python2.7/site-packages/lftools/”, line 204, in copy_archives 08:24:05 os.makedirs(os.path.dirname(dest)) 08:24:05 File “/usr/lib64/python2.7/”, line 157, in makedirs 08:24:05 mkdir(name, mode) 08:24:05 OSError: [Errno 17] File exists: ‘/tmp/lftools-da.m80YHz/features/benchmark/odl-benchmark-api/target/surefire-reports’

  • Handle config parser correctly which defaults to “[jenkins]” section when no server is passed. This fixes the issue with checking if the key exists in the configuration read before reading the key-value.

    The issue is reproducible by running lftools jenkins plugins –help or tox -e docs, with jenkins.ini missing the “[jenkins]” section.

  • lfidapi create group checks if group exists before posting

  • Unicode compatibility in deploy_logs for Python 2 and 3 was improved in several ways. The former method to pull and write log files did not work properly in Python 3, and was not very robust for Python 2. Both reading and writing logs is now handled in a unicode-safe, 2/3 compatible way.


New Features

  • List active plugins that have a known vulnerability.

Bug Fixes

  • Add file extensions .html and .xml to ensure they are compressed. .xml files pushed to the log server can be quite large, so the fix ensures that the logs uploaded to Nexus have a smaller foot print.


New Features

  • Add sigul signing for git tags and Docker containers.


Bug Fixes

  • Fix the unhelpful stack trace when a deploy nexus-zip fails to upload.

    Traceback (most recent call last):
      File "/home/jenkins/.local/bin/lftools", line 10, in <module>
      File "/home/jenkins/.local/lib/python2.7/site-packages/lftools/cli/", line 110, in main
      File "/usr/lib/python2.7/site-packages/click/", line 721, in __call__
        return self.main(*args, **kwargs)
      File "/usr/lib/python2.7/site-packages/click/", line 696, in main
        rv = self.invoke(ctx)
      File "/usr/lib/python2.7/site-packages/click/", line 1065, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/lib/python2.7/site-packages/click/", line 1065, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/lib/python2.7/site-packages/click/", line 894, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/lib/python2.7/site-packages/click/", line 534, in invoke
        return callback(*args, **kwargs)
      File "/usr/lib/python2.7/site-packages/click/", line 17, in new_func
        return f(get_current_context(), *args, **kwargs)
      File "/home/jenkins/.local/lib/python2.7/site-packages/lftools/cli/", line 63, in archives
        deploy_sys.deploy_archives(nexus_url, nexus_path, workspace, pattern)
      File "/home/jenkins/.local/lib/python2.7/site-packages/lftools/", line 236, in deploy_archives
        deploy_nexus_zip(nexus_url, 'logs', nexus_path, archives_zip)
      File "/home/jenkins/.local/lib/python2.7/site-packages/lftools/", line 362, in deploy_nexus_zip
        raise requests.HTTPError(e.value)
    AttributeError: 'HTTPError' object has no attribute 'value'

    Now instead it returns a much more helpful error message:

    ERROR: Failed to upload to Nexus with status code: 401.
  • Fixes an OSError exception that is not handled, in the lftools command:

    lftools deploy archives

    The code resides in the copy_archives function in file.

    This exception is caused by a missing archives directory, which a for loop expects to be there. The fix is simply to verify if archives file/directory exists, and if it does then perform the for loop.

    12:07:36 File “/home/jenkins/.local/lib/python2.7/site-packages/lftools/”, line 166, in copy_archives 12:07:36 for file_or_dir in os.listdir(archives_dir): 12:07:36 OSError: [Errno 2] No such file or directory: ‘/w/workspace/music-mdbc-master-verify-java/archives’


New Features

  • check-votes

    Usage: lftools infofile check-votes [OPTIONS] INFO_FILE GERRIT_URL

      Check for Majority of votes on a gerrit patchset that changes
      an INFO.yaml file.
      --help    Show this message and exit.


New Features

  • Allow passing serial as third argument to sign_dir

    Parallel-signing using sigul is resulting in NSPR reset errors, so allow passing “serial” to the sign_dir function as a third argument to request serial signing of directory contents.


New Features

  • Gerrit project create and github enable replication commands.

    Usage: lftools gerrit [OPTIONS] COMMAND [ARGS]…

      create  Create and configure permissions for a new gerrit repo.
      --enable  Enable replication to Github.
                This skips creating the repo.
      --parent  Specify parent other than "All-Projects"
      --help    Show this message and exit.
  • LFID Api Tools.

    Usage: lftools lfidapi [OPTIONS] COMMAND [ARGS]…

      create-group    Create group.
      invite          Email invitation to join group.
      search-members  List members of a group.
      user            Add and remove users from groups.
      --help    Show this message and exit
  • Add Nexus command to release one or more staging repositories. Via the Nexus 2 REST API, this command performs both a “release” and a “drop” action on the repo(s), in order to best reproduce the action of manually using the “Release” option in the Nexus UI.

    Usage: lftools nexus release [OPTIONS] [REPOS]…

    -s, --server TEXT

    Nexus server URL. Can also be set as NEXUS_URL in the environment. This will override any URL set in settings.yaml.

  • Add command to list openstack containers.


    lftools openstack --os-cloud example object list-containers
  • This command will collect all tags from both Nexus3 and Docker Hub, for a particular org (for instance ‘onap’), as well as a repo (default all repos). With this information, it will calculate a list of valid tags that needs to be copied to Docker Hub from Nexus3.


    lftools nexus docker releasedockerhub

    -o, --org TEXT

    Specify repository organization. [required]

    -r, --repo TEXT

    Only repos containing this string will be selected. Default set to blank string, which is every repo.

    -s, --summary

    Prints a summary of missing docker tags.

    -v, --verbose

    Prints all collected repo/tag information.

    -c, --copy

    Copy missing tags from Nexus3 repos to Docker Hub repos.

    -p, --progbar

    Display a progress bar for the time consuming jobs.

  • Verify YAML Schema.

    Usage: Usage: lftools schema verify [OPTIONS] YAMLFILE SCHEMAFILE

      verify a yaml file based on a schema file.
      --help    Show this message and exit.

Known Issues

  • Currently, if the Docker Hub repo is missing, it is not created specifically, but implicitly by docker itself when we push the docker image to an non- existing Docker Hub repo.

    The command handles any org (onap or hyperledger for instance), “BUT” it requires that the versioning pattern is #.#.# (1.2.3) for the project. In regexp terms : ^d+.d+.d+$

Critical Issues

  • Before you give the “lftools nexus docker releasedockerhub” command please ensure you have manually logged in to both Nexus as well as to Docker.

    sudo docker login —> DOCKER Credentials sudo docker login -u <yourLFID>


New Features

  • Provide additional methods to pass LFID to lftools than lftools.ini

    1. Via explicit --password parameter

    2. Via environment variable LFTOOLS_PASSWORD

    3. At runtime if --interactive mode is set

  • Refactored deploy_nexus function from shell/deploy to pure Python to be more portable with Windows systems. Also added a number of unit tests to cover all executable branches of the code.

  • Refactored deploy_nexus_stage function from shell/deploy to pure Python to be more portable with Windows systems. Also added a number of unit tests to cover all executable branches of the code.

  • Add --conf parameter to jenkins subcommand to allow choosing a jjb config outside of the default paths.

  • Docker list and delete commands for Nexus docker repos.

    Usage: lftools nexus docker [OPTIONS] COMMAND [ARGS]…

      delete  Delete all images matching the PATTERN.
      list    List images matching the PATTERN.
  • The shell/deploy file’s copy_archives() function has been reimplemented in pure Python for better portability to Windows systems.

  • Refactored deploy_archives() function from shell/deploy to pure Python to be more portable with Windows systems.

  • Refactored deploy_logs() function from shell/deploy to pure Python to be more portable with Windows systems.

  • Refactored deploy_nexus_zip() function from shell/deploy to pure Python to be more portable with Windows systems.

  • Refactored nexus_stage_repo_close(), and nexus_repo_stage_create() function from shell/deploy to pure Python to be more portable with Windows systems. Also added a number of unit tests to cover all executable branches of the code.

  • Refactored upload_maven_file_to_nexus function from shell/deploy to pure Python to be more portable with Windows systems. Also added a number of unit tests to cover all executable branches of the code.

Deprecation Notes

  • shell/deploy script’s deploy_nexus function is now deprecated and will be removed in a future release.

  • shell/deploy script’s deploy_nexus_stage function is now deprecated and will be removed in a future release.

  • The shell/deploy script’s copy_archives() function is now deprecated and will be removed in a later version. We recommend migrating to the lftools pure Python implementation of this function.

  • shell/deploy script’s deploy_archives() function is now deprecated and will be removed in a future release.

  • shell/deploy script’s deploy_logs() function is now deprecated and will be removed in a future release.

  • shell/deploy script’s deploy_nexus_zip() function is now deprecated and will be removed in a future release.

  • shell/deploy script’s nexus_stage_repo_close() and nexus_stage_repo_create() function is now deprecated and will be removed in a future release.

  • shell/deploy script’s upload_maven_file_to_nexus function is now deprecated and will be removed in a future release.

Bug Fixes

  • Running the lftools CLI was unexpectedly creating unnecessary gpg-signatures directories in the /tmp directory and not cleaning them up.


New Features

  • Add new cmd to fetch Jenkins token from user account. An optional --change parameter can be passed to have Jenkins change the API token.

    Usage: lftools jenkins token [OPTIONS]

    Get API token.


    Generate a new API token.


    Show this message and exit.

  • Add jenkins token init command to initialize a new server section in jenkins_jobs.ini. This command uses credentials found in lftools.ini to initialize the new Jenkins server configuration.

    Usage: lftools jenkins token init [OPTIONS] NAME URL

  • Add jenkins token reset command to automatically reset API tokens for all Jenkins systems configured in jenkins_jobs.ini.

    Usage: lftools jenkins token reset [OPTIONS] [SERVER]

  • We now support locating the jenkins_jobs.ini in all the same default search paths as JJB supports. Specifically in this order:

    1. $PWD/jenkins_jobs.ini

    2. ~/.config/jenkins_jobs/jenkins_jobs.ini

    3. /etc/jenkins_jobs/jenkins_jobs.ini

  • Add a new delete-stale option to the stack command.

    This function compares running builds in Jenkins to active stacks in OpenStack and determines if there are orphaned stacks and removes them.

  • Add an openstack image share sub-command to handle sharing images between multiple tenants. Command accepts a space-separated list of tenants to share the provided image with.

    Usage: lftools openstack image share [OPTIONS] IMAGE [DEST]...

  • Add an openstack image upload sub-command to handle uploading images to openstack.

    Usage: Usage: lftools openstack image upload [OPTIONS] IMAGE NAME...

Bug Fixes

  • The get-credentials command is now fixed since it was was broken after refactoring done in Gerrit patch I2168adf9bc992b719da6c0350a446830015e6df6.

Other Notes

  • Refactored the Jenkins object into a class to allow us to reuse it outside of the Jenkins command group.


New Features

  • Add support to the jenkins command to parse jenkins_jobs.ini for configuration if server parameter passed is not a URL.

  • Add a jobs sub-command to jenkins command to enable or disable Jenkins Jobs that match a regular expression.

Other Notes

  • Enhance logger subsystem to work better as a CLI program. This is a first step to migrating all lftools subsystems to use the logger instead of print statements everywhere.


Bug Fixes

  • The v0.16.0 pulled in a new ldap module which breaks if the ldap devel libraries are not available on the system trying to use it. This hotfix makes the ldap module optional.


New Features

  • Add a new --debug flag to enable extra troubleshooting information. This flag can also be set via environment variable DEBUG=True.

  • $ lftools ldap

    Usage: lftools ldap [OPTIONS] COMMAND [ARGS]…

      autocorrectinfofile  Verify INFO.yaml against LDAP group.
      csv                  Query an Ldap server.
      inactivecommitters   Check committer participation.
      yaml4info            Build yaml of commiters for your INFO.yaml.
  • $ lftools infofile

      get-committers   Extract Committer info from INFO.yaml or LDAP...
      sync-committers  Sync committer information from LDAP into...

Deprecation Notes

  • Remove support for modifying the logger via logging.ini. It was a good idea but in practice this is not really used and adds extra complexity to lftools.

Bug Fixes

  • Fix broken openstack and sign help command output in docs.