| Tatyana Leontovich | 4885f79 | 2017-09-25 15:16:27 +0300 | [diff] [blame^] | 1 | | # All the data below will be stored as a string object | 
 | 2 |   #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html | 
 | 3 |  | 
 | 4 |   ssh_pwauth: True | 
 | 5 |   users: | 
 | 6 |    - name: root | 
 | 7 |      sudo: ALL=(ALL) NOPASSWD:ALL | 
 | 8 |      shell: /bin/bash | 
 | 9 |      ssh_authorized_keys: | 
 | 10 |      {% for key in config.underlay.ssh_keys %} | 
 | 11 |       - ssh-rsa {{ key['public'] }} | 
 | 12 |      {% endfor %} | 
 | 13 |  | 
 | 14 |   disable_root: false | 
 | 15 |   chpasswd: | 
 | 16 |    list: | | 
 | 17 |     root:r00tme | 
 | 18 |    expire: False | 
 | 19 |  | 
 | 20 |   bootcmd: | 
 | 21 |    # Block access to SSH while node is preparing | 
 | 22 |    - cloud-init-per once sudo iptables -A INPUT -p tcp --dport 22 -j DROP | 
 | 23 |    # Enable root access | 
 | 24 |    - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config | 
 | 25 |    - service sshd restart | 
 | 26 |   output: | 
 | 27 |     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0' | 
 | 28 |  | 
 | 29 |   runcmd: | 
 | 30 |    - export TERM=linux | 
 | 31 |    - export LANG=C | 
 | 32 |    # Configure dhclient | 
 | 33 |    - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base | 
 | 34 |    - sudo resolvconf -u | 
 | 35 |  | 
 | 36 |    # Prepare network connection | 
 | 37 |    - sudo ifup ens3 | 
 | 38 |    #- sudo route add default gw {gateway} {interface_name} | 
 | 39 |    - sudo ifup ens4 | 
 | 40 |  | 
 | 41 |    # Create swap | 
 | 42 |    - fallocate -l 4G /swapfile | 
 | 43 |    - chmod 600 /swapfile | 
 | 44 |    - mkswap /swapfile | 
 | 45 |    - swapon /swapfile | 
 | 46 |    - echo "/swapfile   none    swap    defaults   0   0" >> /etc/fstab | 
 | 47 |  | 
 | 48 |  | 
 | 49 |    ############## Cloud repo01 node ################## | 
 | 50 |    - echo "nameserver 172.18.208.44" >> /etc/resolv.conf; | 
 | 51 |    - echo "nameserver 8.8.8.8" >> /etc/resolv.conf; | 
 | 52 |    - which wget >/dev/null || (apt-get update; apt-get install -y wget); | 
 | 53 |  | 
 | 54 |    - echo "deb [arch=amd64] http://apt.mirantis.com/xenial {{ REPOSITORY_SUITE }} salt extra" > /etc/apt/sources.list.d/mcp_salt.list; | 
 | 55 |    - wget -O - http://apt.mirantis.com/public.gpg | apt-key add -; | 
 | 56 |    - echo "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main" > /etc/apt/sources.list.d/saltstack.list; | 
 | 57 |    - wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub | apt-key add -; | 
 | 58 |  | 
 | 59 |    - eatmydata apt-get clean && apt-get update | 
 | 60 |  | 
 | 61 |    # Install common packages | 
 | 62 |    - eatmydata apt-get install -y salt-minion python-pip git curl tmux byobu iputils-ping traceroute htop tree; | 
 | 63 |    - cd /tmp; | 
 | 64 |    - git clone https://github.com/TatyankaLeontovich/salt-formula-nginx; | 
 | 65 |    - git clone https://github.com/TatyankaLeontovich/salt-dnsmasq; | 
 | 66 |    - git clone https://github.com/TatyankaLeontovich/underpillar; | 
 | 67 |    - mkdir -p /srv/pillar/; | 
 | 68 |    - mkdir -p /srv/salt; | 
 | 69 |    - cd /srv/salt; | 
 | 70 |    - ln -s /tmp/salt-formula-nginx/nginx; | 
 | 71 |    - ln -s /tmp/salt-dnsmasq/dnsmasq; | 
 | 72 |    - cp /tmp/underpillar/pillar/*.sls /srv/pillar/; | 
 | 73 |    - cp /tmp/underpillar/states/*.sls /srv/salt/; | 
 | 74 |    - cp /srv/pillar/top_localdns.sls /srv/pillar/top.sls; | 
 | 75 |    - cp /srv/salt/top_localdns.sls /srv/salt/top.sls; | 
 | 76 |    - salt-call --local  --state-output=mixed state.sls dnsmasq; | 
 | 77 |    - salt-call --local  --state-output=mixed state.sls nginx; | 
 | 78 |    ######################################################## | 
 | 79 |    # Node is ready, allow SSH access | 
 | 80 |    - echo "Allow SSH access ..." | 
 | 81 |    - sudo iptables -D INPUT -p tcp --dport 22 -j DROP | 
 | 82 |    ######################################################## | 
 | 83 |  | 
 | 84 |   write_files: | 
 | 85 |    - path: /etc/network/interfaces | 
 | 86 |      content: | | 
 | 87 |           auto ens3 | 
 | 88 |           iface ens3 inet dhcp | 
 | 89 |           auto ens4 | 
 | 90 |           iface ens4 inet dhcp | 
 | 91 |  | 
 | 92 |    - path: /root/.ssh/config | 
 | 93 |      owner: root:root | 
 | 94 |      permissions: '0600' | 
 | 95 |      content: | | 
 | 96 |           Host * | 
 | 97 |             ServerAliveInterval 300 | 
 | 98 |             ServerAliveCountMax 10 | 
 | 99 |             StrictHostKeyChecking no | 
 | 100 |             UserKnownHostsFile /dev/null |