Advertisement
Guest User

A automated Designate DNSaaS setup for Red Hat OpenStack

a guest
Apr 26th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.31 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. set -e
  4.  
  5. #### RUN IN YOUR DNS SERVER. CAN ALSO BE CO-LOCATED IN YOUR CONTROLLER NODE.
  6. yum install -y bind bind-utils
  7.  
  8. #### CONFIG DNS
  9. setenforce 0
  10. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  11.  
  12. sed -i -e "s/listen-on port.*/listen-on port 53 { any; };/" /etc/named.conf
  13. sed -i '/^options.*/i include "/etc/rndc.key"; controls {         inet * allow { any; } keys { "rndc-key"; }; };' /etc/named.conf
  14. sed -i '/allow-query.*/d' /etc/named.conf
  15. sed -i '/^options.*/a         allow-new-zones yes;         allow-query { any; };' /etc/named.conf
  16.  
  17. rndc-confgen -a
  18.  
  19. chmod g+w /var/named
  20.  
  21. systemctl enable named
  22. systemctl start named
  23.  
  24. #### RUN IN YOUR CONTROLLER
  25. yum install -y openstack-designate-api openstack-designate-central openstack-designate-sink openstack-designate-pool-manager openstack-designate-mdns openstack-designate-common python-designate python-designateclient openstack-designate-agent openstack-utils
  26.  
  27. #### SETUP VARIABLES
  28. source ~/keystonerc_admin
  29.  
  30. CONTROLLER_IP_ADDRESS=`ip -f inet ad show dev br-ex | grep -Po 'inet \K[\d.]+'`
  31.  
  32. ZONE_NAME=openstack.rf01.co
  33. INTERNAL_NET_NAME=interna
  34. INSTANCES_PROJECT_NAME=admin
  35. SERVICES_PROJECT_NAME=services
  36. DESIGNATE_PASSWORD=Corinthians
  37. EXTERNAL_DNS_SERVER_IP=$CONTROLLER_IP_ADDRESS
  38. EXTERNAL_DNS_SERVER_FQDN=`hostname`
  39. DESIGNATE_VIP_IP=$CONTROLLER_IP_ADDRESS
  40. RABBIT_SERVER_IP=$CONTROLLER_IP_ADDRESS
  41. REDIS_SERVER_IP=$CONTROLLER_IP_ADDRESS
  42. MYSQL_SERVER_IP=$CONTROLLER_IP_ADDRESS
  43. KEYSTONE_SERVER_IP=$CONTROLLER_IP_ADDRESS
  44. DESIGNATE_SERVER_1=$CONTROLLER_IP_ADDRESS
  45.  
  46. SERVICES_TENANT_ID=`openstack project show $SERVICES_PROJECT_NAME -f value -c id`
  47. INSTANCES_TENANT_ID=`openstack project show $INSTANCES_PROJECT_NAME -f value -c id`
  48. DEFAULT_NAMESERVER_ID=$(uuidgen)
  49. DEFAULT_TARGET_ID=$(uuidgen)
  50. INTERNAL_NET_ID=`openstack network show $INTERNAL_NET_NAME -f value -c id`
  51.  
  52.  
  53. #### PREPARE DATABASE
  54. mysql -u root << EOF
  55. CREATE DATABASE designate;
  56. GRANT ALL ON designate.* TO 'designate'@'%' IDENTIFIED BY '$DESIGNATE_PASSWORD';
  57. GRANT ALL ON designate.* TO 'designate'@'localhost' IDENTIFIED BY '$DESIGNATE_PASSWORD';
  58. CREATE DATABASE designate_pool_manager;
  59. GRANT ALL ON designate_pool_manager.* TO 'designate'@'%' IDENTIFIED BY '$DESIGNATE_PASSWORD';
  60. GRANT ALL ON designate_pool_manager.* TO 'designate'@'localhost' IDENTIFIED BY '$DESIGNATE_PASSWORD';
  61. FLUSH PRIVILEGES;
  62. quit
  63. EOF
  64.  
  65. # CREATE SERVICES ENDPOINTS
  66. openstack user create designate --password $DESIGNATE_PASSWORD --email designate@localhost
  67. openstack role add --project $SERVICES_TENANT_ID --user designate admin
  68. openstack service create dns --name designate --description "Designate DNS Service"
  69. openstack endpoint create --region RegionOne --publicurl http://$DESIGNATE_VIP_IP:9001 --internalurl http://$DESIGNATE_VIP_IP:9001 --adminurl http://$DESIGNATE_VIP_IP:9001 designate
  70.  
  71. ## DESIGNATE BASE CONFIGURATION
  72. crudini --set /etc/designate/designate.conf keystone_authtoken auth_uri http://$KEYSTONE_SERVER_IP:5000/v2.0
  73. crudini --set /etc/designate/designate.conf keystone_authtoken identity_uri http://$KEYSTONE_SERVER_IP:35357/
  74. crudini --set /etc/designate/designate.conf keystone_authtoken admin_tenant_name $SERVICES_PROJECT_NAME
  75. crudini --set /etc/designate/designate.conf keystone_authtoken project_name $SERVICES_PROJECT_NAME
  76. crudini --set /etc/designate/designate.conf keystone_authtoken admin_user designate
  77. crudini --set /etc/designate/designate.conf keystone_authtoken admin_password $DESIGNATE_PASSWORD
  78.  
  79. crudini --set /etc/designate/designate.conf service:api enabled_extensions_v1 "diagnostics, quotas, reports, sync, touch"
  80. crudini --set /etc/designate/designate.conf service:api enabled_extensions_v2 "quotas, reports"
  81.  
  82. crudini --set /etc/designate/designate.conf service:central managed_resource_tenant_id $INSTANCES_TENANT_ID
  83.  
  84. crudini --set /etc/designate/designate.conf storage:sqlalchemy connection mysql+pymysql://designate:$DESIGNATE_PASSWORD@$MYSQL_SERVER_IP/designate
  85.  
  86. crudini --set /etc/designate/designate.conf pool_manager_cache:sqlalchemy connection mysql+pymysql://designate:$DESIGNATE_PASSWORD@$MYSQL_SERVER_IP/designate_pool_manager
  87.  
  88. crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_hosts $RABBIT_SERVER_IP:5672
  89.  
  90. ## POPULATE DESIGNATE DATABASE
  91. su -s /bin/sh -c "designate-manage database sync" designate
  92. su -s /bin/sh -c "designate-manage pool-manager-cache sync" designate
  93.  
  94. ## PRELIMINARY SERVICE START
  95. systemctl enable designate-central designate-api
  96. systemctl start designate-central designate-api
  97.  
  98. ## YML FILE WITH POOL CONFIG
  99. cat << EOF > /etc/designate/pools.yaml
  100. - name: default
  101.   description: Default BIND9 Pool
  102.  
  103.   attributes:
  104.     external: true
  105.   ns_records:
  106.     - hostname: $EXTERNAL_DNS_SERVER_FQDN.
  107.       priority: 1
  108.   nameservers:
  109.     - host: $EXTERNAL_DNS_SERVER_IP
  110.       port: 53
  111.  
  112.   targets:
  113.     - type: bind9
  114.       description: BIND9 Server 1
  115.       masters:
  116.         - host: $DESIGNATE_SERVER_1
  117.           port: 5354
  118. # ---        - host: $DESIGNATE_SERVER_2
  119. # ---          port: 5354
  120. # ---        - host: $DESIGNATE_SERVER_3
  121. # ---          port: 5354
  122.       options:
  123.         host: $EXTERNAL_DNS_SERVER_IP
  124.         port: 53
  125.         rndc_host: $EXTERNAL_DNS_SERVER_IP
  126.         rndc_port: 953
  127.         rndc_key_file: /etc/designate/rndc.key
  128. EOF
  129.  
  130. cp -f /etc/rndc.key /etc/designate/rndc.key
  131. chown designate:designate /etc/designate/rndc.key
  132.  
  133. ### LOAD THE ABOVE YML INTO DESIGNATE RUNTIME
  134. su -s /bin/sh -c "designate-manage pool update" designate
  135.  
  136. ### ACTIVATE AND START SERVICE
  137. systemctl enable designate-pool-manager designate-mdns designate-sink
  138. systemctl start designate-pool-manager designate-mdns designate-sink
  139.  
  140. # CREATE THE ZONE THAT WILL BE USED BY NEUTRON
  141. ZONE_ID=`openstack zone create --email admin@$ZONE_NAME $ZONE_NAME. -f value -c id`
  142. crudini --set /etc/designate/designate.conf handler:nova_fixed domain_id $ZONE_ID
  143. crudini --set /etc/designate/designate.conf handler:neutron_floatingip domain_id $ZONE_ID
  144.  
  145. ### RESTART THE SERVICES TO LOAD THE ABOVE CHANGED CONFIG
  146. systemctl restart designate-api designate-central designate-mdns designate-pool-manager designate-sink
  147.  
  148. #### SETUP NEUTRON SERVICES
  149. crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security,dns
  150.  
  151. crudini --set /etc/neutron/neutron.conf DEFAULT dns_domain $ZONE_NAME.
  152. crudini --set /etc/neutron/neutron.conf DEFAULT external_dns_driver designate
  153.  
  154. crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dnsmasq_dns_servers $EXTERNAL_DNS_SERVER_IP
  155.  
  156. crudini --set /etc/neutron/neutron.conf designate url http://$DESIGNATE_VIP_IP:9001/v2
  157. crudini --set /etc/neutron/neutron.conf designate admin_auth_url http://$DESIGNATE_VIP_IP:35357/v2.0
  158. crudini --set /etc/neutron/neutron.conf designate admin_username designate
  159. crudini --set /etc/neutron/neutron.conf designate admin_password $DESIGNATE_PASSWORD
  160. crudini --set /etc/neutron/neutron.conf designate admin_tenant_name $SERVICES_PROJECT_NAME
  161. crudini --set /etc/neutron/neutron.conf designate allow_reverse_dns_lookup True
  162. crudini --set /etc/neutron/neutron.conf designate ipv4_ptr_zone_prefix_size 24
  163. crudini --set /etc/neutron/neutron.conf designate ipv6_ptr_zone_prefix_size 116
  164. crudini --set /etc/neutron/neutron.conf designate insecure true
  165.  
  166. openstack-service restart neutron
  167. openstack-service restart nova
  168.  
  169. neutron net-update $INTERNAL_NET_ID  --dns_domain $ZONE_NAME.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement