def get_http_details(self): """ get http details and directories names created under /var/www/html """ self.clear_screen() port = input('enter http port \n' 'default [8080]: ') default = 8080 port = set_values(port, default) port = validate_port(port) ignition_dir = input('specify dir where ignition files will be placed \n' 'directory will be created under /var/www/html \n' 'default [ignition]: ') default = 'ignition' ignition_dir = set_values(ignition_dir, default) ocp_version = input('specify the version of ocp \n' 'default [4.3]: ') default = 4.3 ocp_version = set_values(ocp_version, default) logging.info('adding http_port: {} http_ignition: {} version: {}'.format(port, ignition_dir, ocp_version)) self.inventory_dict['csah']['vars']['http_port'] = int(port) self.inventory_dict['csah']['vars']['os'] = 'rhcos' self.inventory_dict['csah']['vars']['http_ignition'] = ignition_dir self.inventory_dict['csah']['vars']['version'] = ocp_version
def get_ignition_details(self): """ get details from users used for install-config.yaml file """ default = 'openshift' install_dir = 'openshift' install_dir = set_values(install_dir, default) default = '10.128.0.0/14' pod_network_cidr = '10.128.0.0/14' pod_network_cidr = set_values(pod_network_cidr, default) logging.info('pod network cidr: {}'.format(pod_network_cidr)) pod_network_cidr = validate_network_cidr(pod_network_cidr) default = 23 host_prefix = 23 host_prefix = set_values(host_prefix, default) host_prefix = validate_cidr(host_prefix) default = '172.30.0.0/16' service_network_cidr = '172.30.0.0/16' service_network_cidr = set_values(service_network_cidr, default) service_network_cidr = validate_network_cidr(service_network_cidr) logging.info('adding install_dir: {} cluster_network_cidr: {}\ host_prefix: {} service_network_cidr: {}'.format(install_dir, pod_network_cidr, host_prefix, service_network_cidr)) self.inventory_dict['all']['vars']['install_user'] = '******' self.inventory_dict['all']['vars']['install_dir'] = install_dir self.inventory_dict['all']['vars']['cluster_network_cidr'] = pod_network_cidr self.inventory_dict['all']['vars']['host_prefix'] = int(host_prefix) self.inventory_dict['all']['vars']['service_network_cidr'] = service_network_cidr
def get_disk_name(self): """ disknames used for each node type. """ self.clear_screen() default = 'nvme0n1' logging.info( 'ensure disknames are absolutely available. Otherwise OpenShift install fails' ) master_install_device = input( 'specify the control plane device that will be installed\n' 'default [nvme0n1]: ') master_install_device = set_values(master_install_device, default) self.inventory_dict['csah']['vars'][ 'master_install_device'] = master_install_device if self.cluster_install == 1: pass else: worker_install_device = input( 'specify the compute node device that will be installed\n' 'default [nvme0n1]: ') worker_install_device = set_values(worker_install_device, default) logging.info( 'adding master_install_device: {} worker_install_device: {}'. format(master_install_device, worker_install_device)) self.inventory_dict['csah']['vars'][ 'worker_install_device'] = worker_install_device
def get_worker_nodes(self): """ get details about worker node """ worker_nodes_count = input('enter number of worker nodes\n' 'default [2]: ') default = 2 worker_nodes_count = set_values(worker_nodes_count, default, check='integer') worker_keys = ['name','ip','mac'] self.inventory_dict['csah']['vars']['worker_nodes'] = [] for num in range(worker_nodes_count): worker_values = [] default = 'worker-{}'.format(num) worker_name = input('enter the worker {} node name\n' 'default [{}]: '.format(num, default)) worker_name = set_values(worker_name, default) worker_ip = get_ip(node_name=worker_name, ip_type='os') worker_mac = get_network_device_mac(node_name=worker_name, ip_type='idrac') worker_values.append(worker_name) worker_values.append(worker_ip) worker_values.append(worker_mac) worker_node_dict_pairs = dict(zip(worker_keys, worker_values)) logging.info('adding {} values as name: {} ip: {} mac: {}'.format(worker_name, worker_name, worker_ip, worker_mac)) self.inventory_dict['csah']['vars']['worker_nodes'].append(worker_node_dict_pairs) self.clear_screen() self.inventory_dict['csah']['vars']['number_of_workers'] = worker_nodes_count
def get_master_nodes(self): """ get details about master node """ default = 3 master_nodes_count = input('enter number of master nodes\n' 'default [3]: ') master_nodes_count = set_values(master_nodes_count, default, check='integer') master_keys = ['name','ip','mac'] self.inventory_dict['csah']['vars']['master_nodes'] = [] for num in range(master_nodes_count): master_values = [] default = 'etcd-{}'.format(num) master_name = input('enter the master {} node name \n' 'default [{}]: '.format(num, default)) master_name = set_values(master_name, default) master_ip = get_ip(node_name=master_name, ip_type='os') master_mac = get_network_device_mac(node_name=master_name, ip_type='idrac') master_values.append(master_name) master_values.append(master_ip) master_values.append(master_mac) master_node_dict_pairs = dict(zip(master_keys, master_values)) logging.info('adding {} values as name: {} ip: {} mac: {}'.format(master_name, master_name, master_ip, master_mac)) self.inventory_dict['csah']['vars']['master_nodes'].append(master_node_dict_pairs) self.clear_screen() self.inventory_dict['csah']['vars']['number_of_masters'] = master_nodes_count
def get_disk_name(self): """ disknames used for each node type. """ default = 'nvme0n1' logging.info('ensure disknames are available. Otherwise OpenShift install fails') master_install_device = self.diskname_master master_install_device = set_values(master_install_device, default) self.inventory_dict['all']['vars']['master_install_device'] = master_install_device worker_install_device = self.diskname_worker worker_install_device = set_values(worker_install_device, default) logging.info('adding master_install_device: {} worker_install_device: {}'.format(master_install_device, worker_install_device)) self.inventory_dict['all']['vars']['worker_install_device'] = worker_install_device
def add_new_worker_nodes(self): """ get new worker nodes added to inventory file """ current_inventory_file = input('Enter complete path to existing inventory file: ') file_exists = os.path.exists('{}'.format(current_inventory_file)) if file_exists: with open('{}'.format(current_inventory_file), 'r') as file: self.inventory_dict = yaml.safe_load(file) try: self.inventory_dict['all']['vars']['compute_nodes'] except KeyError: logging.error('Inventory file does not contain worker nodes info') self.inventory_dict['all']['vars']['cluster_install'] = '5+ node' self.inventory_dict['all']['vars']['compute_nodes'] = [] default = 'nvme0n1' worker_install_device = input('specify the compute node device that will be installed\n' 'default [nvme0n1]: ') worker_install_device = set_values(worker_install_device, default) self.inventory_dict['all']['vars']['worker_install_device'] = worker_install_device self.inventory_dict = get_nodes_info(node_type='new_compute_nodes', inventory=self.inventory_dict, add=True, idrac_user=self.id_user, idrac_pass=self.id_pass, nodes_info=self.nodes_inv) self.yaml_inventory(inventory_file=current_inventory_file) sys.exit(2) else: logging.error('incorrect file path specified') sys.exit(2)
def get_ignition_details(self): """ get details from users used for install-config.yaml file """ self.clear_screen() default = 'core' install_user = input('enter the user used to install openshift\n' 'DONOT CHANGE THIS VALUE\n' 'default [core]: ') install_user = set_values(install_user, default) default = 'openshift' install_dir = input('enter the directory where openshift installs\n' 'directory will be created under /home/core\n' 'default [openshift]: ') install_dir = set_values(install_dir, default) default = '10.128.0.0/14' pod_network_cidr = input('enter the pod network cidr\n' 'default [10.128.0.0/14]: ') pod_network_cidr = set_values(pod_network_cidr, default) logging.info('pod network cidr: {}'.format(pod_network_cidr)) pod_network_cidr = validate_network_cidr(pod_network_cidr) default = 23 host_prefix = input( 'specify cidr notation for number of ips in each node: \n' 'cidr number should be an integer and less than 32\n' 'default [23]: ') host_prefix = set_values(host_prefix, default) host_prefix = validate_cidr(host_prefix) default = '172.30.0.0/16' service_network_cidr = input('specify the service network cidr\n' 'default [172.30.0.0/16]: ') service_network_cidr = set_values(service_network_cidr, default) service_network_cidr = validate_network_cidr(service_network_cidr) logging.info( 'adding install_user: {} install_dir: {} cluster_network_cidr: {}\ host_prefix: {} service_network_cidr: {}'.format( install_user, install_dir, pod_network_cidr, host_prefix, service_network_cidr)) self.inventory_dict['csah']['vars']['install_user'] = install_user self.inventory_dict['csah']['vars']['install_dir'] = install_dir self.inventory_dict['csah']['vars'][ 'cluster_network_cidr'] = pod_network_cidr self.inventory_dict['csah']['vars']['host_prefix'] = int(host_prefix) self.inventory_dict['csah']['vars'][ 'service_network_cidr'] = service_network_cidr
def get_dns_details(self): """ get zone config file and cluster name used by DNS """ self.clear_screen() zone_file = input('specify zone file \n' 'default [/var/named/ocp.zones]: ') default = '/var/named/ocp.zones' zone_file = set_values(zone_file, default) cluster_name = input('specify cluster name \n' 'default [ocp]: ') default = 'ocp' cluster_name = set_values(cluster_name, default) logging.info('adding zone_file: {} cluster: {}'.format(zone_file, cluster_name)) self.inventory_dict['csah']['vars']['default_zone_file'] = zone_file self.inventory_dict['csah']['vars']['cluster'] = cluster_name
def get_http_details(self): """ get http details and directories names created under /var/www/html """ port = 8080 default = 8080 port = set_values(port, default) port = validate_port(port) ignition_dir = 'ignition' default = 'ignition' ignition_dir = set_values(ignition_dir, default) logging.info('adding http_port: {} http_ignition: {} version: {}'.format(port, ignition_dir, self.version)) self.inventory_dict['all']['vars']['http_port'] = int(port) self.inventory_dict['all']['vars']['os'] = 'rhcos' self.inventory_dict['all']['vars']['http_ignition'] = ignition_dir self.inventory_dict['all']['vars']['version'] = self.version
def dhcp_lease_times(self): """ get dhcp lease times """ default_lease_time = input('enter a default lease time for dhcp\n' 'default [800]: ') default = 800 default_lease_time = set_values(default_lease_time, default, check='integer') max_lease_time = input('enter max lease time for dhcp\n' 'default [7200]: ') default = 7200 max_lease_time = set_values(max_lease_time, default, check='integer') logging.info('adding default_lease_time: {} max_lease_time: {}'.format(default_lease_time, max_lease_time)) self.inventory_dict['csah']['vars']['default_lease_time'] = default_lease_time self.inventory_dict['csah']['vars']['max_lease_time'] = max_lease_time
def get_dns_details(self): """ get zone config file and cluster name used by DNS """ dns_forwarder = self.dns_forwarder self.inventory_dict['all']['vars']['dns_forwarder'] = dns_forwarder cluster_name = self.cluster_name default = self.cluster_name cluster_name = set_values(cluster_name, default) default = '/var/named/{}.zones'.format(cluster_name) zone_file = default zone_file = set_values(zone_file, default) logging.info('adding zone_file: {} cluster: {}'.format(zone_file, cluster_name)) self.inventory_dict['all']['vars']['default_zone_file'] = zone_file self.inventory_dict['all']['vars']['cluster'] = cluster_name
def set_bond_network_details(self): """ get bond details and user interfaces used for bond """ self.clear_screen() default = 'bond0' name = input('enter bond name\n' 'default [bond0]: ') name = set_values(name, default) interfaces = input('enter bond interfaces seperated by \',\'\n' 'default [ens2f0,ens2f1]: ') default = 'ens2f0,ens2f1' interfaces = set_values(interfaces, default) default = 'mode=active-backup,miimon=100,primary=ens2f0' options = input('enter bond options \n' 'default [mode=active-backup,miimon=100,primary=ens2f0]: ') options = set_values(options, default) logging.info('adding bond_name: {} interfaces: {} bond_options: {}'.format(name, interfaces, options)) self.inventory_dict['csah']['vars']['bond_name'] = name self.inventory_dict['csah']['vars']['bond_interfaces'] = interfaces self.inventory_dict['csah']['vars']['bond_options'] = options
def get_disk_name(self): """ disknames used for each node type. """ self.clear_screen() default = 'nvme0n1' logging.info('ensure disknames are absolutely available. Otherwise OpenShift install fails') master_install_device = input('specify the master device that will be installed\n' 'default [nvme0n1]: ') master_install_device = set_values(master_install_device, default) bootstrap_install_device = input('specify the bootstrap device that will be installed\n' 'default [nvme0n1]: ') bootstrap_install_device = set_values(bootstrap_install_device, default) worker_install_device = input('specify the worker device that will be installed\n' 'default [nvme0n1]: ') worker_install_device = set_values(worker_install_device, default) logging.info('adding master_install_device: {} bootstrap_install_device: {}\ worker_install_device: {}'.format(master_install_device, bootstrap_install_device, worker_install_device)) self.inventory_dict['csah']['vars']['master_install_device'] = master_install_device self.inventory_dict['csah']['vars']['bootstrap_install_device'] = bootstrap_install_device self.inventory_dict['csah']['vars']['worker_install_device'] = worker_install_device
def get_software_download_dir(self): """ get software download directory to download OCP software bits """ default = '/home/ansible/files' self.software_dir = '/home/ansible/files' self.software_dir = set_values(self.software_dir, default) dest_path_exist = check_path(self.software_dir, isdir=True) if dest_path_exist: logging.info('directory {} already exists'.format(self.software_dir)) else: logging.info('Creating directory {}'.format(self.software_dir)) create_dir(self.software_dir) self.inventory_dict['all']['vars']['software_src'] = self.software_dir
def get_software_download_dir(self): """ get software download directory to download OCP 4.3 software bits """ self.clear_screen() default = '/home/ansible/files' self.software_dir = input('provide complete path of directory to download OCP 4.3 software bits\n' 'default [/home/ansible/files]: ') self.software_dir = set_values(self.software_dir, default) dest_path_exist = check_path(self.software_dir, isdir=True) if dest_path_exist: logging.info('directory {} already exists'.format(self.software_dir)) else: logging.info('Creating directory {}'.format(self.software_dir)) create_dir(self.software_dir) self.inventory_dict['csah']['vars']['software_src'] = self.software_dir
def get_bootstrap_node(self): """ get details about bootstrap node """ self.clear_screen() default = 'bootstrap' bootstrap_name = input('enter the bootstrap node name\n' 'default [bootstrap]: ') bootstrap_name = set_values(bootstrap_name, default) bootstrap_ip = get_ip(node_name=bootstrap_name, ip_type='os') bootstrap_ip = validate_ip(bootstrap_ip) bootstrap_mac = get_network_device_mac(node_name=bootstrap_name, ip_type='idrac') logging.info('adding bootstrap_node values as name: {} ip: {} mac: {}'.format(bootstrap_name, bootstrap_ip, bootstrap_mac)) self.inventory_dict['csah']['vars']['bootstrap_node'] = [{'name': '{}'.format(bootstrap_name), 'ip': '{}'.format(bootstrap_ip), 'mac': '{}'.format(bootstrap_mac)}]