Giter VIP home page Giter VIP logo

f5-openstack-agent's Introduction

F5 Agent for OpenStack Neutron

Build Status Slack Coveralls

image

target

https://coveralls.io/github/F5Networks/f5-openstack-agent?branch=newton

Introduction

The F5 Agent for OpenStack Neutron is an OpenStack Neutron plugin agent. It works in conjunction with the F5 driver for OpenStack LBaaSv2 to manage F5 BIG-IP Local Traffic Manager (LTM) services via the OpenStack Neutron API.

Documentation

Documentation is published on clouddocs.f5.com.

Compatibility

The F5 Agent for OpenStack Neutron is compatible with OpenStack releases from Liberty forward.

See the F5 OpenStack Releases and Support Matrix for more information.

Installing the F5 Agent

Please see the product documentation.

Using the Built-in Debugger

Use the built-in debugger -- debug_bundler.py -- to package information about your environment for debugging purposes.

When the you install f5-openstack-agent, the debug_bundler.py script installs itself in /usr/bin/f5/. When you run the debugger, it searches for log and config files and dumps a complete listing of the pip lists output. The debugger bundles everything it finds into a tarfile that you can provide to F5's support representatives to assist them in identifying the cause of your issue.


WARNING

The files added to the debug bundle may contain VERY SENSITIVE INFORMATION such as encryption keys, passwords, and usernames. Do not upload this bundle, or any information within, to a public forum unless you have thoroughly scrubbed sensitive information. When in doubt, don't upload it at all.


Basic usage with the default command-line arguments

The command below creates a .tar file in the specified directory (in this example, /home/myuser/debug_bundle_output/) containing all logs and configuration files the script found. The script offers a best-effort search of the specified directories. If it cannot find the log files it is looking for in those directories, it prints an error message and continues to run.

$ python /usr/bin/f5/debug_bundler.py /home/myuser/debug_bundle_output/

Override log/config file locations

The default log location is /var/log/neutron. The default configuration file location is /etc/neutron.

To override the log and/or config file locations, use the command-line arguments shown below: :

$ python /usr/bin/f5/debug_bundler.py --log-dir=/var/log/mylogs --config-dir /etc/myconfigs/ ~/

Issues

If you find any issues with the debug_bundler, please file an issue.

For Developers

Filing Issues

If you find an issue, we would love to hear about it. Please file an issue in this repository. Use the issue template to tell us as much as you can about what you found, how you found it, your environment, etc. Admins will triage your issue and assign it for a fix based on the priority level assigned. We also welcome you to file issues for feature requests.

Contributing

See Contributing.

Testing

Before you open a pull request, your code must have passing pytest unit tests. In addition, you should include a set of functional tests written to use an actual BIG-IP device for testing. Information on how to run our test set is included below.

Style Checks

We use the hacking module for our style checks.

$ pip install tox
$ tox -e style

Unit Tests

We use tox to run our pytest unit tests.

To run the unit tests, use the tox unit environment.

$ pip install tox
$ tox -e unit

Functional Tests

You can run functional tests without a full OpenStack deployment. They do require access to a BIG-IP device or BIG-IP Virtual Edition (VE) instance.

  1. Copy and edit the symbols.json.example with the correct values for your BIG-IP device.
  2. Run tox -e functest with the --symbols flag pointing to your updates symbols.json file.

    For example, the command below calls the symbols file and runs the neutronless/disconnected_service functional test cases. The tox target changes to the [test/functional](test/functional) directory before the tests run.

$ tox -e functest -- \
  --symbols ~/path/to/symbols/symbols.json \
  neutronless/disconnected_service

Copyright (c) 2015-2018, F5 Networks, Inc.

Support

See Support.

License

Apache V2.0

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.

Contributor License Agreement

Individuals or business entities who contribute to this project must complete and submit the F5 Contributor License Agreement to Openstack_[email protected] before their code submission can be added to this project.

f5-openstack-agent's People

Contributors

amudukutore avatar dflanigan avatar f5openstackdevautobot avatar janakimeyyappan avatar jgruber avatar jikui avatar jlongstaf avatar jputrino avatar larkinkevin avatar mattgreene avatar niklaus-xie avatar pjbreaux avatar richbrowne avatar sorensf5 avatar swormke avatar szakeri avatar zancas avatar zhang-shengping avatar zhaoqin-github avatar zongzw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

f5-openstack-agent's Issues

branding compliance

OpenStack Release

Liberty

Description

I need to ensure we are in compliance with F5 branding requirements. F5, F5 Networks, BIG-IP, and all other product names must use the appropriate trademarks (except in code).

Default pool not set on virtual server when creating pool without name parameter

The default pool attribute of a BIG-IP virtual server is not updated when creating a pool without using the --name parameter. The 8.0.1 version of the LBaaS v2 agent incorrectly relies on the name parameter (e.g., --name pool1) to set the default pool attribute of the associated virtual server.

The following is an example reported by an internal F5 customer:

neutron lbaas-loadbalancer-create 94c8de7f-c56e-4cb3-a57a-cdc268e64f1c
neutron lbaas-listener-create --loadbalancer bf66fed0-339a-4010-8e90-14b717dba7d7 --protocol HTTP --protocol-port 8080
neutron lbaas-pool-create --listener b455779a-28c3-433d-b0ec-38c3e1f89ad9 --loadbalancer bf66fed0-339a-4010-8e90-14b717dba7d7 --lb-algorithm ROUND_ROBIN --protocol HTTP

Docs cleanup, add templates

I need to remove artifacts from the old docs strategy (doc/, docScript.sh) and add the issue and pull request templates.

Cleanup L3 Binding config options and module initialization

Some refactoring for L3 binding.

Agent Version

2.0.1

Operating System

Ubuntu

OpenStack Release

Liberty

Description.

The l3_binding module needs to handle improperly formatted l3_static bindings and report the correct error. The configuration file also needs to be changed to be correctly loaded as JSON.

Deployment

assure service pools fails with exception

When creating a pool, the assure_pool_created() method fails

Error in LBaaSBuilder._assure_pools_created.Message: 'NoneType' object has no attribute 'getitem'

When session persistence was added the listener service checks references a None object in
update_session_persistence.

        persistence = pool['session_persistence']
        persistence_type = persistence['type']

Persistence is None.

  • Details: For bugs, fill out the template below.

Agent Version

<Fill in the version you have installed, such as 2.0.1>

Operating System

<Fill in the host OS of the machine running the agent, such as Centos 7>

OpenStack Release

<Fill in the OpenStack release, such as Liberty>

Description

<Describe the bug in detail, steps taken prior to encountering the issue, yand a short explanation of you have deployed openstack and F5® agent>

Deployment

<Explain in reasonable detail your OpenStack deployment, the F5® OpenStack agent, and BIG-IP®(s)>
<Example: Single OpenStack controller with one F5® agent managing a cluster of 4 BIG-IP® VEs>
<Example: Three OpenStack controllers in HA, each with one standalone F5® agent managing a single BIG-IP® appliance>

Fix System V startup to return correct status

The System V startup script does not return correct status.

Agent Version

2.0.1

Operating System

Ubuntu

OpenStack Release

Liberty

Description

When the user runs # service f5-oslbaasv2-agent status, there is an error in finding the process.

Deployment

Debian startup script fails

The Debian startup script f5-oslbaasv2-agent fails to start b/c of errors in path names.

Operating System

Ubuntu 14.04

OpenStack Release

Liberty

Description

There are a number of errors that were in the Ubuntu startup script that did not get pushed before release. This fixes those and the start-stop-daemon command execution error.

Deployment

<Explain in reasonable detail your OpenStack deployment, the F5® OpenStack agent, and BIG-IP®(s)>
<Example: Single OpenStack controller with one F5® agent managing a cluster of 4 BIG-IP® VEs>
<Example: Three OpenStack controllers in HA, each with one standalone F5® agent managing a single BIG-IP® appliance>

Error creating snatpool

Agent logs show following error when creating a snat pool:

2016-05-04 13:57:58.722 56098 ERROR f5_openstack_agent.lbaasv2.drivers.bigip.snats [req-33b4b334-9848-405b-bf7f-12b4f87f52e1 be3315095042428fb1ce7f5264f5bc61 d1aaf813eaa8455486b45f53ba467b71 - - -] Create SNAT pool failed 400 Unexpected Error: Bad Request for uri: https://10.50.50.21/mgmt/tm/ltm/snatpool/

Create LBaaS v2 objects on BIG-IP systems

Implement classes to take an LBaaS v2 service definition, map the service to BIG-IP model objects, and create the model objects on BIG-IP systems. Use f5-sdk for creating BIG-IP resources.

Exception: icontrol_driver: instance names and partitions cannot contain '/', but it's: /Common/snat-traffic-group-local-only- ...

  • Title: Creating a neutron lbaasv2 loadbalancer fails with error in agent log:
    ERROR f5_openstack_agent.lbaasv2.drivers.bigip.icontrol_driver [-] Exception: icontrol_driver: instance names and partitions cannot contain '/', but it's: /Common/snat-traffic-group-local-only-d9ce530c-e900-4564-beb7-b5b0279a2e4b_0
  • Labels:
  • Milestone:
  • Assignee:
  • Attachments: zip of -
    var/log/neutron/server.log
    var/log/neutron/f5-openstack-agent.log
    etc/neutron/neutron.conf
    etc/neutron/neutron_lbaas.conf
    etc/neutron/services/f5/f5-openstack-agent.ini

create-loadbalancer-issue.zip

  • Details

Agent Version

8.0.1

Operating System

Centos 7

OpenStack Release

Liberty

Description

<Describe the bug in detail, steps taken prior to encountering the issue, yand a short explanation of you have deployed openstack and F5® agent>

Deployment

  • Packstack all-in-one controller/network node with existing external network
  • under-the-cloud BIG-IP VE 12.0.0.1

Update Issue template

Per internal conversation w/ @jlongstaf & Johnny S., the issue template needs to be updated. The references to labels, assignee, and milestone should be removed, as they're not visible to users who aren't admins.

Update CLA landing page URL

I need to update the CLA landing page URL with the new read the docs URL everywhere it appears.

  • CONTRIBUTING
  • README

Add slack channel URL

OpenStack Release

n/a

Description

I need to replace the contact email address with the Slack channel URL.

Add L3 binding support

Support L3 binding, including loading L3 binding class defined in configuration file, registering BIG-IP MAC addresses, and binding address/subnet pairs when load balancer is created.

Liberty Release not in pypi

  • Title: Liberty Release not in Pypi
  • Details:Liberty release is not in Pypi

OpenStack Release

Liberty

Description

- Details: For bugs, fill out the template below. #### Agent Version

8.0.1

OpenStack Release

Liberty

Description

The pip install of agent can only be done from github. Needs to be able to be installed from pypi too.

Disconnected Service Deployment

Introduction

This document is meant to provide a lightweight, high-level view of the “Disconnected Service Deployment” capability in the F5 OpenStack Agent, hereafter known as “agent”. The business driver for this capability is a requirement to support “Hierarchical Port Binding”; as possible via the ML2 plugin driver architecture.

Background

The agent assumes that a Neutron network will already exist when attempting to create Neutron LBaaS objects. The service model constructed and sent to the agent, and subsequent RPC from the agent back to Neutron for discovery purposes will always have complete information. Therefore, the agent is able to immediately create the necessary configuration on attached BIG-IP(s).

Deploying an OpenStack network architecture with hierarchical port-binding breaks current agent assumptions. The key difference is that the network to which the BIG-IP should attach may not exist at the time Neutron LBaaS sends loadbalancer requests to the F5 plugin driver. The network design provides an outward-facing segment ID to connect to the public/provider network. This ‘top’ network can cascade through a series of one or more intermediate segments before reaching the ‘bottom’ network to which the BIG-IP will be attached.

Proposal

The agent will be modified to create a “disconnected network” in order to support the “delayed activation” of loadbalancer objects. This will become the default behavior and not modifiable by the operator. For deployments using pre-existing Neutron networks, there may be a minor increase (on the order of seconds) in the time to activate BIG-IP configuration. For deployments that create networks on-the-fly, the agent will poll for a maximum of 5 minutes waiting for the BIG-IP facing network to become available. The agent does not attempt to create a Virtual Server until both a loadbalancer AND listener object have been created. The listener object will sit in “PENDING_CREATE” state until either the network is created or the 5-minute timeout occurs.

Definitions

Disconnected Network

The agent will create a VLAN interface named “disconnected-vlan” within each tenant partition that is not connected to an external interface. Therefore, the interface will not be capable of sending or receiving data traffic. But it provides sufficient configuration to support creation of loadbalancer objects.

Delayed Activation

Specific network fields in the Service Model will be allowed to point to, or contain, a non-existent value. The agent will retain its current behavior that immediately translates loadbalancer objects to the appropriate BIG-IP configuration. But the Virtual Server/Listener will be connected to the tenant’s disconnected network. For this proposal, the segment ID (i.e. VXLAN tunnel ID) can be empty even though the Service Model should still contain the name of the network missing an ID.

Deliverables

  • Enhanced F5 OpenStack agent

Workflow

Assumption

  1. Operator creates loadbalancer with the parent subnet_id
  2. ML2 plugin driver creates the network hierarchy
  3. Agent must detect a hierarchical network and traverse down to locate the child network
  4. Agent polls for child subnet_id
  5. Agent requests a neutron port (for the listener, a.k.a. VIP) on the child subnet_id
  6. Agent creates the tenant interface on BIG-IP and binds the listener (Virtual Server address)

Sequence Diagram

image

icontrol driver sync() refers to service 'pool' object, causing exeception.

OpenStack Release

#### Description

The agent_manager is refreshing the state of a loadbalancing service because it has found a loadbalancing object in the pending state. The sync() method in icontrol_driver refers to service['pool'] which refers to the old service model. This must be changed to service['loadbalancer']

  • Details: For bugs, fill out the template below.

Agent Version

<Fill in the version you have installed, such as 2.0.1>

Operating System

<Fill in the host OS of the machine running the agent, such as Centos 7>

OpenStack Release

<Fill in the OpenStack release, such as Liberty>

Description

<Describe the bug in detail, steps taken prior to encountering the issue, yand a short explanation of you have deployed openstack and F5® agent>

Deployment

<Explain in reasonable detail your OpenStack deployment, the F5® OpenStack agent, and BIG-IP®(s)>
<Example: Single OpenStack controller with one F5® agent managing a cluster of 4 BIG-IP® VEs>
<Example: Three OpenStack controllers in HA, each with one standalone F5® agent managing a single BIG-IP® appliance>

Create member fails with bad URI

Check for existing member fails in L2 adjacent network environment. Error caused by % character in member name (e.g., 10.2.3.4%2:80). Need to urlencode member names. Note: the requests library used by the f5-sdk does not URL encode % characters, so this needs to be explicitly done before submitting the request.

Add L3 binding to make global routing mode

Adding implementation to perform L3 binding to open up the Self-IP for VIP traffic.

Adding Agent L2 population and Tunnel update consumer.

Adding more state information to the report state method.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.