Cisco N1kv: Remove vmnetwork delete REST call on last port delete

Remove the vm network delete call to the VSM on final port call and
ensure that vm network is deleted from the database when the port count
becomes 0.

Change-Id: I6c08a099adfce2fdba8eefec6aadeb68a780ac37
Closes-Bug: 1373547
Fix quota limit range validator

In Quota model limit is defined with Integer type which in case of
MySQL and PostgreSQL is always stored in 4 bytes. At the same time,
the current validator checks that the value does not exceed sys.maxsize
which depends on whether the system is 32-bit or 64-bit based.

In SQLite Integer can be stored in 1, 2, 3, 4, 6, or 8 bytes depending
on the magnitude of the value. Nevertheless, assume that it can not
exceed 4 bytes for consistency.

Limited the upper bound of the validator with 2**31 - 1.

Added a unit test.

Closes-Bug: #1338479
Change-Id: Icefa2fc228e4255a022d586cab4590607953d1ee
nit : missing a "%s" in a log message

Change-Id: I171cc14d7d9b3917dea90cd36dfec7e58afaf626
Big Switch: Don't clear hash before sync

This patch removes the step of clearing the consistency
hash from the DB before a topology sync. This will ensure
that inconsistency will be detected if the topology sync
fails.

This logic was originally there to make sure the hash header
was not present on the topology sync call to the backend.
However, the hash header is ignored by the backend in a sync
call so it wasn't necessary.

Closes-Bug: #1379510
Change-Id: I2d58fa2aea3b692834d64192d06ace727c7df8a0
Teach DHCP Agent about DVR router interfaces

When DVR is enabled and enable_isolated_metadata=True,
the DHCP agent should only inject a metadata host route
when there is no port with the gateway IP address configured
on the subnet.  Add a check for DEVICE_OWNER_DVR_INTERFACE
when we look at each port's device_owner field, otherwise
it will always add this route to the opts file when DVR
is enabled.

Change-Id: I3ff3bb85105b8215b36535983016d8c0ff3d8cb7
Closes-bug: #1377307
Forbid update of HA property of routers

While the HA property is update-able, and resulting router-get
invocations suggest that the router is HA, the migration
itself fails on the agent. This is deceiving and confusing
and should be blocked until the migration itself is fixed
in a future patch.

Change-Id: I4171ab481e3943e0110bd9a300d965bbebe44871
Related-Bug: #1365426
Closes-Bug: #1378525
Remove two sets that are not referenced

The code no longer references the updated_routers and removed_routers
sets.  This should have been cleaned up before but was missed.

Change-Id: I0396e13d2f7c3789928e0c6a4c0a071b02d5ff17
Do not assume order of lvm.tun_ofports set elements

This fixes the test_fdb_add_flows unit test that breaks with a randomized PYTHONHASHSEED
(see the bug report).

The test assumed that the lvm.tun_ofports set had
elements in a particular order. Found with PYTHONHASHSEED=2455351445 and
1595538922.

The fix sorts the actions output string so that it is always sorted when the
outputs are compared.

Partial-bug: #1348818

Note: There are several other unrelated unit tests that also break with a
randomized PYTHONHASHSEED, but they are not addressed here. They will be
addressed in separate patches.

Change-Id: I86b453a93f3ba09212709caf462cf3bfc5b21ee9
Remove all_routers argument from _process_routers

There is no code left that passes True to this argument.  It is dead
code and it should be removed.

Change-Id: I55f71a5c0b96e530e45f2a6463978e8611cbc537
Add database relationship between router and ports

Add an explicit schema relationship between a router and its ports. This
change ensures referential integrity among the entities and prevents orphaned
ports.

Change-Id: I09e8a694cdff7f64a642a39b45cbd12422132806
Closes-Bug: #1378866
Add Juno release milestone

Change-Id: Iea584b00329d9474c14847db958f8743d4058525
Closes-Bug: #1378855
Merge "Remove all_routers argument from _process_routers"
Merge "Remove two sets that are not referenced"
Refactor _process_routers to handle a single router

The method _process_routers no longer handles multiple routers.  The
only caller of this method would construct a list of exactly one
router in order to make the call.  This made the for loop unnecessary.
The method's logic is too heavy for its current purpose.  This commit
removes much of the weight.

The use of the sets in this method is also no longer necessary.  It
became clear that all of it boiled down to "if the router is not
compatible with with this agent but it is known in router_info from
before then we need to remove it."  This is an exceptional condition
that shouldn't be handled in this method so I raise an exception and
handle it in process_router_update where other router removal is
handled.  Logging was added for this exceptional condition.

The eventlet pool was also obsolete.  It was used to spawn two methods
and there was a waitall at the end.  The other refactoring made it
clear that the two spawns were mutually exclusive.  There was only one
thread spawned for any given invocation of the method and the eventlet
pool is overkill.

Change-Id: Ibeac591b08565d10b2a9730e25a54f2cd11fc2bc
Closes-Bug: #1378398
Remove an argument that is never used

This code was creating a dict with a gw_exists key.  I was curious to
know who was interested in receiving this information down the line.
However, no one is ever interested in that key.  It took me some time
to follow this through wondering what was going on and found only dead
ends.

Change-Id: I755d9628ab750b950b33f5dcf32ccf2a9b00800e
Merge "Add database relationship between router and ports"
Merge "Cisco N1kv: Remove vmnetwork delete REST call on last port delete"
Merge "Add Juno release milestone"
Merge "Refactor _process_routers to handle a single router"
Imported Translations from Transifex

Change-Id: I674acacc96c2396c31658bab48a441dac56988b0