Skip to content

Commit

Permalink
[MANOPD-81952] - use internal address if address is not defined (#297)
Browse files Browse the repository at this point in the history
* use internal address if address is not defined

* fix optional address

* remove comment code

* add test for optional field

* add check final inventory

* add tests for add node and remove node

* fix add node test

* remove address field from README
  • Loading branch information
Imadzuma authored and dmyar21 committed Jan 19, 2023
1 parent b4f5df1 commit cb9067e
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 14 deletions.
9 changes: 3 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,16 +123,13 @@ To install a Kubernetes cluster using Kubemarine:
nodes:
- name: "k8s-control-plane-1"
address: "10.101.0.1"
internal_address: "192.168.0.1"
internal_address: "10.101.0.1"
roles: ["balancer", "control-plane", "worker"]
- name: "k8s-control-plane-2"
address: "10.101.0.2"
internal_address: "192.168.0.2"
internal_address: "10.101.0.2"
roles: ["balancer", "control-plane", "worker"]
- name: "k8s-control-plane-3"
address: "10.101.0.3"
internal_address: "192.168.0.3"
internal_address: "10.101.0.3"
roles: ["balancer", "control-plane", "worker"]
cluster_name: "k8s.example.com"
Expand Down
6 changes: 4 additions & 2 deletions kubemarine/procedures/remove_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@ def remove_node_finalize_inventory(cluster: KubernetesCluster, inventory_to_fina

if inventory_to_finalize['services'].get('kubeadm', {}).get('apiServer', {}).get('certSANs'):
for node in nodes_for_removal.get_ordered_members_list(provide_node_configs=True):
hostnames = [node['name'], node['address'], node['internal_address']]
hostnames = [node['name'], node['internal_address']]
if node.get('address') is not None:
hostnames.append(node['address'])
for name in hostnames:
if name in inventory_to_finalize['services']['kubeadm']['apiServer']['certSANs']:
inventory_to_finalize['services']['kubeadm']['apiServer']['certSANs'].remove(name)
Expand All @@ -108,7 +110,7 @@ def remove_node_finalize_inventory(cluster: KubernetesCluster, inventory_to_fina
for node in nodes_for_removal.get_ordered_members_list(provide_node_configs=True):
if inventory_to_finalize['services']['etc_hosts'].get(node['internal_address']):
del inventory_to_finalize['services']['etc_hosts'][node['internal_address']]
if inventory_to_finalize['services']['etc_hosts'].get(node['address']):
if node.get('address') is not None and inventory_to_finalize['services']['etc_hosts'].get(node['address']):
del inventory_to_finalize['services']['etc_hosts'][node['address']]

coredns.enrich_add_hosts_config(inventory_to_finalize, cluster)
Expand Down
5 changes: 1 addition & 4 deletions kubemarine/system.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,9 @@ def enrich_inventory(inventory, cluster):
external_node_ip_names = inventory['services']['etc_hosts'].get(node['address'], [])
external_node_ip_names.append("%s-external.%s" % (node['name'], cluster.inventory['cluster_name']))
external_node_ip_names.append(node['name'] + "-external")
external_node_ip_names = list(set(external_node_ip_names))
inventory['services']['etc_hosts'][node['address']] = external_node_ip_names

uniq_node_hostnames = list(set(inventory['services']['etc_hosts'][node['address']]))
inventory['services']['etc_hosts'][node['address']] = uniq_node_hostnames


return inventory


Expand Down
62 changes: 60 additions & 2 deletions test/unit/test_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
# 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.


import copy
import unittest

from kubemarine import demo
from kubemarine.core import utils


class TestInventoryValidation(unittest.TestCase):
Expand Down Expand Up @@ -96,5 +96,63 @@ def test_roles_in_inventory(self):
self.assertIn('master', roles)
self.assertIn('control-plane', roles)

def test_internal_address_inventory(self):
inventory = demo.generate_inventory()
for node in inventory['nodes']:
node.pop('address')

cluster = demo.new_cluster(inventory)
for node in cluster.inventory['nodes']:
self.assertNotIn('address', node)

final_inventory = utils.get_final_inventory(cluster, inventory)
for node in final_inventory['nodes']:
self.assertNotIn('address', node)

def test_internal_address_remove_node_inventory(self):
inventory = demo.generate_inventory(**demo.MINIHA_KEEPALIVED)
for node in inventory['nodes']:
node.pop('address')
procedure_inventory = {
'nodes': [copy.deepcopy(inventory['nodes'][0])]
}

# Remove node inventory
context = demo.create_silent_context(procedure='remove_node')
cluster = demo.new_cluster(inventory, procedure_inventory=procedure_inventory, context=context)
for node in cluster.inventory['nodes']:
self.assertNotIn('address', node)

final_inventory = utils.get_final_inventory(cluster)
for node in final_inventory['nodes']:
self.assertNotIn('address', node)

def test_internal_address_add_node_inventory(self):
inventory = demo.generate_inventory(**demo.MINIHA_KEEPALIVED)
for node in inventory['nodes']:
node.pop('address')

# Add node inventory
context = demo.create_silent_context(procedure='add_node')
host_different_os = inventory['nodes'][0]['internal_address']
context['nodes'] = self._nodes_context_one_different_os(inventory, host_different_os)
procedure_inventory = {'nodes': [inventory['nodes'].pop(0)]}
cluster = demo.new_cluster(inventory, procedure_inventory=procedure_inventory, context=context)
for node in cluster.inventory['nodes']:
self.assertNotIn('address', node)

final_inventory = utils.get_final_inventory(cluster)
for node in final_inventory['nodes']:
self.assertNotIn('address', node)

def _nodes_context_one_different_os(self, inventory, host_different_os):
nodes_context = demo.generate_nodes_context(inventory, os_name='ubuntu', os_version='20.04')
nodes_context[host_different_os]['os'] = {
'name': 'centos',
'family': 'rhel',
'version': '7.9'
}
return nodes_context

if __name__ == '__main__':
unittest.main()

0 comments on commit cb9067e

Please sign in to comment.