博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个openstack新增加计算节点的脚本。
阅读量:4296 次
发布时间:2019-05-27

本文共 9807 字,大约阅读时间需要 32 分钟。

主要有四个文件:

1)addcomputernode.sh,主要脚本。在centos7 hpdl580 测试过。
2)addcomputernode.conf,一些配置信息,每个节点不同,都要改。第一次不能只修改这个,下面conf也有要改的。
3)nova.conf,这个是yum安装就有的,但需要自己修改好ip、user、password等addcomputernode.conf,中不包含的配置项 ,这里可以先改好,和sh文件放同目录。然后sh脚本会复制过去。一个环境都一样的,只用改一次。
4)neutron.con,这个也是yum安装后有的,也是修改后。同3,一个环境都一样的,只用改一次。

# cat addcomputenode.sh #!/bin/shconf=./addcomputenode.confallyes=$1#set an option = value function setOptionEqual(){  local file=$1  local name=$2  local value=$3  local spliter=$4  echo file=$file,name=$name,value=$value,spliter=$spliter.  [ -f $file ] || (echo new file and add.;echo "$name$splite=$splite$value" >> $file;return)  local r=`grep "^ *$name *=" $file`  if [ "$r" == "" ];then    r2=`grep "^ *# *$name *=" $file`    if [ "$r2" == "" ];then      echo add $name = $value to $file      echo "$name$spliter=$spliter$value" >> $file;    else      echo "modify # $name"      echo sed -i 's/^ *# *'$name' *=.*/'$name$spliter'='$spliter$value'/' $file      sed -i 's/^ *# *'$name' *=.*/'$name"$spliter"'='"$spliter"$value'/' $file    fi  else    echo modify $name    echo sed -i 's/'$name' *=.*/'$name$spliter'='$spliter$value'/' $file    sed -i 's/'$name' *=.*/'$name"$spliter"'='"$spliter"$value'/' $file  fi}function setOption(){  local file=$1  local name=$2  local value=$3   [ -f $file ] || (echo "$name $value" >> $file;return)  local r=`grep "^ *$name " $file`  if [ "$r" == "" ];then    r2=`grep "^ *# *$name" $file`    if [ "$r2" == "" ];then      echo add $name $value to $file      echo "$name $value" >> $file;    else      echo sed -i 's/^ *# *'$name' .*/'$name' '$value'/' $file      sed -i 's/^ *# *'$name' .*/'$name' '$value'/' $file    fi  else    echo sed -i 's/^ *'$name' .*/'$name' '$value'/' $file    sed -i 's/^ *'$name' .*/'$name' '$value'/' $file  fi}run(){  cmd="$*"  echo cmd=$cmd.  $cmd  #echo exec done.  if [ $? -eq 0 ];then    echo ok.cmd=$cmd  else    echo failed,cmd=$cmd    exit 1  fi}askyn(){  question=$1  yesdo=$2  nodo=$3  [ "$allyes" == "-y" ] && local answer="y" || local answer=""  while ( [ "$answer" != "y" ] && [ "$answer" != "n" ] && [ "$answer" != "s" ] );do    echo -n "$question (yes/no/skip)(y/n/s) "    read answer  done  echo answer=$answer.yesdo=$yesdo.nodo=$nodo.  if [ "$answer" == "y" ];then    [ "$yesdo" != "" ] && run $yesdo  elif [ "$answer" == "s" ];then    return 0  else    if [ "$nodo" == "" ] || [ "$nodo" == "exit" ]; then      exit    else      run $nodo    fi  fi}checklog(){  item=$1  r=eval echo '$'$item == 'ok'  if [ "$r" == "ok" ];then     return 0  else    return 1  fi}#step 0#read configcat $confaskyn "is config right?" if [ -f $conf ];then . $conf;fiecho "-----"#step 1,hostnameaskyn "setting hostname=$NEW_HOSTNAME" "hostnamectl set-hostname $NEW_HOSTNAME" "exit"cat /etc/hostnameecho "-----"#step 2,interface nameaskyn "confirm interface name is $IF_NAME?" "echo ok." ip aecho "-----"#step 3,controlleraskyn "confirm controller ip=$CONTROLLER_IP" "echo ok."setOption /etc/hosts 192.168.36.114 controller || exitcat /etc/hostsecho "-----"#step 4,updaterun "yum update -y"echo "-----"#step 5,install askyn "install some utils?" "yum install -y bridge-utils iputils lsof lvm2 chrony openssh-server sudo tcpdump python net-tools wget"echo "-----"#step 6,firewalldsystemctl stop firewalld.service; systemctl disable firewalld.service; systemctl status firewalld.serviceecho "-----"#step 7,selinuxsetOptionEqual /etc/sysconfig/selinux SELINUX disabled " "|| exitrun "setenforce 0"getenforceecho "-----"#step 8,bonding,8021q#echo  "setting openstack-ansible.conf"#setOption /etc/modules-load.d/openstack-ansible.conf bonding#setOption /etc/modules-load.d/openstack-ansible.conf 8021q#cat /etc/modules-load.d/openstack-ansible.conf | egrep "(bonding|8021q)"#echo "-----"#step 9,chronyd.serviceecho enable chronydsystemctl enable chronyd.service && systemctl start chronyd.service && echo chronyd ok || (echo chronyd failed.;exit)echo "-----"#step 10,askyn "yum  centos-release-openstack-rocky?" "yum install -y centos-release-openstack-rocky"echo "-----"#step 11askyn "yum install openstack-nova-compute?" "yum install -y openstack-nova-compute"echo "-----"#step 12 nova.conf[ -f /etc/nova/nova.conf ] && mv /etc/nova/nova.conf /etc/nova/nova.conf.bakcp ./nova.conf /etc/nova/nova.conf || exitaskyn "setting my_ip=$MY_IP"  setOptionEqual /etc/nova/nova.conf my_ip $MY_IP || exitaskyn "go on?" 'echo "-----"'#step 13 kvm?mod_kvm_conf=/etc/modprobe.d/kvm-nested.conf([ -f $mod_kvm_conf ] && [ ! -f $mod_kvm_conf.bak ] ) &&  mv $mod_kvm_conf $mod_kvm_conf.bak || cat /dev/null > $mod_kvm_confisIntel=`cat /proc/cpuinfo | grep 'model name' |uniq|grep -i intel`if [ "$VIRT_TYPE" == "kvm" ] && [ "$isIntel" != "" ];then  if [ "$isIntel" != "" ];then    setOptionEqual $mod_kvm_conf "options kvm-intel nested" 1 || exit    setOptionEqual $mod_kvm_conf "options kvm-intel enable_shadow_vmcs" 1 || exit    setOptionEqual $mod_kvm_conf "options kvm-intel enable_apicv" 1 || exit    setOptionEqual $mod_kvm_conf "options kvm-intel ept" 1 || exit    modprobe -r kvm-intel;    modprobe -a kvm-intel || exit     sleep 5    echo cat /sys/module/kvm_intel/parameters/nested    cat /sys/module/kvm_intel/parameters/nested    kvmintelnested=`cat /sys/module/kvm_intel/parameters/nested`    [ "$kvmintelnested" == "N" ] && exit  else    echo "This machine is not intel, You must setting kvm manually.or do not use kvm."     exit 1  fi  sed -i 's/#compute_driver/compute_driver/g' /etc/nova/nova.conf && setOptionEqual /etc/nova/nova.conf compute_driver libvirt.LibvirtDriver || exit  sed -i 's/#virt_type/virt_type/g' /etc/nova/nova.conf && setOptionEqual /etc/nova/nova.conf virt_type kvm || exit  cat /etc/nova/nova.confaskyn "go on?" 'echo "-----"'fi#step 14 newtron agentyum install -y openstack-neutron-linuxbridge ebtables ipset || exitneutron_conf=/etc/neutron/neutron.conf[ -f $neutron_conf ] && mv $neutron_conf $neutron_conf.bakcp ./neutron.conf $neutron_conf || exitneutron_agent_file=/etc/neutron/plugins/ml2/linuxbridge_agent.inisetOptionEqual $neutron_agent_file physical_interface_mappings provider:$IF_NAMEsetOptionEqual $neutron_agent_file enable_security_group truesetOptionEqual $neutron_agent_file firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriversetOptionEqual $neutron_agent_file enable_vxlan truesetOptionEqual $neutron_agent_file local_ip $MY_IPsetOptionEqual $neutron_agent_file l2_population trueaskyn "go on?" 'echo "-----"'#step 15 modprobe br_netfiltermodprobe br_netfilter && sysctl -p || exitsysctl net.bridge.bridge-nf-call-ip6tablessysctl net.bridge.bridge-nf-call-iptablesaskyn "go on?" 'echo "-----"'#step 16 start servicesystemctl restart openstack-nova-compute.service || exitsystemctl enable neutron-linuxbridge-agent.service || exitsystemctl start neutron-linuxbridge-agent.service || exitsystemctl status neutron-linuxbridge-agent.service || exitecho check on contrller with "neutron agent-list"askyn "go on?" 'echo "-----"'#step 17 systemctl enable libvirtd.service openstack-nova-compute.service || exitsystemctl start libvirtd.service openstack-nova-compute.service || exitecho "-----"echo echo "All done."echo Check on dashboard website.
# cat nova.conf [DEFAULT]enabled_apis = osapi_compute,metadatatransport_url = rabbit://openstack:123456@controllermy_ip = 192.168.37.12use_neutron = truefirewall_driver = nova.virt.firewall.NoopFirewallDriver[api]auth_strategy = keystone[api_database][barbican][cache][cells][cinder][compute][conductor][console][consoleauth][cors][database][devices][ephemeral_storage_encryption][filter_scheduler][glance]api_servers = http://controller:9292[guestfs][healthcheck][hyperv][ironic][key_manager][keystone][keystone_authtoken]auth_url = http://controller:5000/v3memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = novapassword = 123456[libvirt]inject_password=True[matchmaker_redis][metrics][mks][neutron]url = http://controller:9696auth_url = http://controller:5000auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultregion_name = RegionOneproject_name = serviceusername = neutronpassword = 123456[notifications][osapi_v21][oslo_concurrency]lock_path = /var/lib/nova/tmp[oslo_messaging_amqp][oslo_messaging_kafka][oslo_messaging_notifications][oslo_messaging_rabbit][oslo_messaging_zmq][oslo_middleware][oslo_policy][pci][placement]region_name = RegionOneproject_domain_name = Defaultproject_name = serviceauth_type = passworduser_domain_name = Defaultauth_url = http://controller:5000/v3username = placementpassword = 123456[placement_database][powervm][profiler][quota][rdp][remote_debug][scheduler][serial_console][service_user][spice][upgrade_levels][vault][vendordata_dynamic_auth][vmware][vnc]enabled = trueserver_listen = 0.0.0.0server_proxyclient_address = $my_ipnovncproxy_base_url = http://controller:6080/vnc_auto.html[workarounds][wsgi][xenserver][xvp][zvm]compute_driver = libvirt.LibvirtDrivervirt_type = kvm

 

# cat addcomputenode.conf #none for no change,or set a new hostnameNEW_HOSTNAME=computer3711hpdl580IF_NAME=enp4s0f0CONTROLLER_IP=192.168.36.114VIRT_TYPE=kvmMY_IP=192.168.37.11
# cat neutron.conf [DEFAULT]transport_url = rabbit://openstack:123456@controllerauth_strategy = keystone[agent][cors][database][keystone_authtoken]www_authenticate_uri = http://controller:5000auth_url = http://controller:5000memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = neutronpassword = 123456[matchmaker_redis][nova][oslo_concurrency]lock_path = /var/lib/neutron/tmp[oslo_messaging_amqp][oslo_messaging_kafka][oslo_messaging_notifications][oslo_messaging_rabbit][oslo_messaging_zmq][oslo_middleware][oslo_policy][quotas][ssl]

 

转载地址:http://qhbws.baihongyu.com/

你可能感兴趣的文章
Spring 全家桶注解一览
查看>>
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>