github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/acceptancetests/repository/charms/mysql/hooks/master-relation-changed (about)

     1  #!/bin/sh
     2  #
     3  # Master side of master/slave replication
     4  
     5  set -e
     6  
     7  . /usr/share/charm-helper/sh/net.sh
     8  
     9  ROOTARGS="-uroot -p`cat /var/lib/mysql/mysql.passwd`"
    10  snapdir=/var/www/snaps
    11  mkdir -p $snapdir
    12  apt-get -y install apache2
    13  # disable wide-open access (restrict to each db IP)
    14  rhosts=""
    15  remote_ip=""
    16  for r in $(relation-ids master) ; do
    17      for runit in $(relation-list -r $r) ; do
    18          rhost=$(relation-get -r $r hostname $runit)
    19          if [ -n "$rhost" ] ; then
    20              rhosts=${rhosts},$rhost
    21              if [ "$runit" = "$JUJU_REMOTE_UNIT" ] ; then
    22                  remote_ip=$rhost
    23                  if ! ch_is_ip $remote_ip ; then
    24                      remote_ip=$(ch_get_ip $remote_ip)
    25                  fi
    26              fi
    27          fi
    28      done
    29  done
    30  # remove any leading comma
    31  rhosts=${rhosts##,}
    32  
    33  # if there are no hosts, we simply disable all access
    34  target=/etc/apache2/sites-available/mysql-dumps
    35  cat > $target <<EOF
    36  DocumentRoot /var/www
    37  <Directory /var/www>
    38    Order deny,allow
    39    Deny from all
    40  EOF
    41  if [ -n "$rhosts" ] ; then
    42  cat >> $target <<EOF
    43    allow from ${rhosts}
    44  EOF
    45  fi
    46  cat >> $target <<EOF
    47    Options -Indexes
    48  </Directory>
    49  EOF
    50  a2ensite mysql-dumps
    51  a2dissite default
    52  service apache2 reload
    53  
    54  pass=`pwgen -s 16`
    55  # TODO: settings.. make mmin tunable as it is highly subjective
    56  recent_backup=`find $snapdir -name 'replication_seed.*.sql.gz' -mmin -60|head -1`
    57  if [ -z "$recent_backup" ] ; then
    58      name=replication_seed.`date +%Y%m%d%H%M%S`.sql.gz
    59      echo `date`: Creating snapshot $recent_backup
    60      # Assumes transactional storage -- MyISAM please GO AWAY
    61      mysqldump $ROOTARGS --add-drop-database --all-databases --single-transaction --master-data |gzip>$snapdir/$name
    62      # Make sure webserver can serve it
    63  else
    64      name=`basename $recent_backup`
    65  fi
    66  chown -v -R www-data.www-data /var/www
    67  
    68  user=${JUJU_REMOTE_UNIT%%/*}
    69  action=$(basename $0)
    70  action=${action##master-relation-}
    71  case "$action" in
    72  changed)
    73      mysql $ROOTARGS -e "GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO \`$user\`@\`$remote_ip\` IDENTIFIED BY '$pass'"
    74      relation-set dumpurl=/snaps/$name \
    75                           user=$user \
    76                           password=$pass \
    77                           hostname=`unit-get private-address` \
    78                           port=3306
    79      ;;
    80  departed)
    81      mysql $ROOTARGS -e "REVOKE REPLICATION SLAVE, REPLICATION CLIENT ON *.* FROM `$user`@`$remote_ip`"
    82      ;;
    83  broken)
    84      # XXX Need some way to tie users to relation ID
    85      ;;
    86  esac