{"id":19505,"date":"2023-08-03T14:19:47","date_gmt":"2023-08-03T13:19:47","guid":{"rendered":"https:\/\/www.oderland.se\/support\/?post_type=ht_kb&#038;p=19505"},"modified":"2023-08-03T14:36:43","modified_gmt":"2023-08-03T13:36:43","slug":"hur-schemalagger-jag-snapshots-i-oderland-cloud","status":"publish","type":"ht_kb","link":"https:\/\/www.oderland.se\/support\/artikel\/hur-schemalagger-jag-snapshots-i-oderland-cloud\/","title":{"rendered":"Hur schemal\u00e4gger jag snapshots i Oderland Cloud?"},"content":{"rendered":"\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-alert\">Denna guide \u00e4r avsedd f\u00f6r avancerade anv\u00e4ndare.<\/p>\n\n\n\n<p>F\u00f6r n\u00e4rvarande finns det inget st\u00f6d f\u00f6r schemal\u00e4ggning av snapshots i <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oderland.se\/cloud\/\" data-type=\"URL\" data-id=\"https:\/\/www.oderland.se\/cloud\/\" target=\"_blank\">Oderland Cloud<\/a>, men du kan anv\u00e4nda <a href=\"https:\/\/docs.openstack.org\/api-quick-start\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenStack API<\/a> f\u00f6r att l\u00f6sa det p\u00e5 egen hand. Genom att anv\u00e4nda ett bash-skript (eller valfritt annat spr\u00e5k som du f\u00f6redrar) och en schemal\u00e4ggningstj\u00e4nst s\u00e5 som cron eller en systemd-timer, kan du automatiskt ta snapshots av alla monterade volymer p\u00e5 din virtuella server.<\/p>\n\n\n\n<p>Vi har skrivit ett f\u00f6rslag till ett s\u00e5dant skript som du kan anv\u00e4nda som inspiration (tv\u00e5 varianter p\u00e5 samma tema). Du beh\u00f6ver fylla i alla variabler under kommentarerna <code>OpenStack credentials<\/code> och <code>Virtual server ID<\/code> (samt <code>Email settings<\/code> om du anv\u00e4nder varianten som skickar mail efter k\u00f6rning). Skriptet nedan kommer att iterera \u00f6ver alla volymer monterade p\u00e5 server, ta en snapshot p\u00e5 dem, kontrollera status och d\u00e4refter skriva ut resultatet i terminalen (samt skicka en rapport p\u00e5 mail om du s\u00e5 \u00f6nskar).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uppgifter som beh\u00f6vs f\u00f6r skriptet<\/h2>\n\n\n\n<p>Innan du kan s\u00e4tta upp och b\u00f6rja anv\u00e4nda bash-skriptet beh\u00f6ver du n\u00e5gra uppgifter om ditt Cloud-konto samt den server du vill skapa snapshots f\u00f6r:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Inloggningsuppgifterna f\u00f6r ditt Cloud-konto<\/strong> (anv\u00e4ndarnamn och l\u00f6senord). Har du inte dessa kan du f\u00e5 fram dem enligt instruktionerna <a href=\"https:\/\/www.oderland.se\/support\/artikel\/hur-loggar-jag-in-pa-kontrollpanelen-for-oderland-cloud\/#aterstalla-losenordet\">h\u00e4r<\/a> (avsnittet &#8221;\u00c5terst\u00e4lla l\u00f6senordet&#8221;).<\/li>\n\n\n\n<li><strong>Projekt-ID<\/strong> f\u00f6r ditt Cloud-konto. Detta kan du se n\u00e4r du \u00e4r <a href=\"https:\/\/www.oderland.se\/support\/artikel\/hur-loggar-jag-in-pa-kontrollpanelen-for-oderland-cloud\/\" data-type=\"ht_kb\" data-id=\"18245\" target=\"_blank\" rel=\"noreferrer noopener\">inloggad p\u00e5 kontrollpanelen f\u00f6r Cloud<\/a>, h\u00f6gst upp \u00e5t h\u00f6ger:<br><a href=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_project_id.png\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"73\" class=\"wp-image-19508\" style=\"width: 256px;\" src=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_project_id.png\" alt=\"\" srcset=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_project_id.png 256w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_project_id-50x14.png 50w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_project_id-60x17.png 60w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_project_id-100x29.png 100w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/a><\/li>\n\n\n\n<li><strong>Server-ID<\/strong> f\u00f6r din server. Detta hittar du <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oderland.se\/support\/artikel\/hur-loggar-jag-in-pa-kontrollpanelen-for-oderland-cloud\/\" data-type=\"ht_kb\" data-id=\"18245\" target=\"_blank\">inne p\u00e5 kontrollpanelen f\u00f6r Oderland Cloud<\/a>, om du g\u00e5r in p\u00e5 <code>Compute<\/code>&nbsp;(ikonen som ser ut som en kub) -&gt;&nbsp;<code>Virtual machines<\/code>&nbsp;i menyn ute till v\u00e4nster:<br><a href=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines.png\"><img loading=\"lazy\" decoding=\"async\" width=\"342\" height=\"359\" class=\"wp-image-18252\" style=\"width: 342px;\" src=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines.png\" alt=\"\" srcset=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines.png 342w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines-286x300.png 286w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines-48x50.png 48w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines-57x60.png 57w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/03\/oderland_cloud_menu_virtual_machines-95x100.png 95w\" sizes=\"auto, (max-width: 342px) 100vw, 342px\" \/><\/a><br>Klicka sedan p\u00e5 raden f\u00f6r servern du vill skapa snapshots f\u00f6r och rulla ner till raden <code>ID<\/code> i den h\u00f6gra delen av f\u00f6nstret.<br><a href=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1056\" height=\"419\" class=\"wp-image-19522\" style=\"width: 1056px;\" src=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1.png\" alt=\"\" srcset=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1.png 1056w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1-300x119.png 300w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1-1024x406.png 1024w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1-768x305.png 768w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1-50x20.png 50w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1-60x24.png 60w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/08\/oderland_cloud_server_id-1-100x40.png 100w\" sizes=\"auto, (max-width: 1056px) 100vw, 1056px\" \/><\/a><\/li>\n<\/ul>\n\n\n\n<p>Du har nu allt du beh\u00f6ver f\u00f6r att kunna skapa skriptet enligt v\u00e5ra f\u00f6rslag nedan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bash-skript f\u00f6r snapshots<\/h2>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-danger\">Var f\u00f6rsiktig med var du f\u00f6rvarar skriptet, d\u00e5 de uppgifter som finns d\u00e4ri till\u00e5ter \u00e5tkomst till samtliga servrar p\u00e5 ditt Oderland Cloud-konto.<\/p>\n\n\n\n<p>N\u00e4r du h\u00e4mtat ut alla uppgifter enligt avsnittet <a href=\"#uppgifter-som-behovs-for-skriptet\">ovan<\/a> kan du skapa skriptet. V\u00e4lj om du vill ha mail fr\u00e5n skriptet eller ej genom att kopiera den variant av skriptet du \u00f6nskar nedan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Skript som skickar mail med resultat<\/h3>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">Skriptet beh\u00f6ver paketen <code>openstack<\/code>, <code>jq<\/code> och <code>mailx<\/code> f\u00f6r att kunna k\u00f6ras. Har du dem inte tillg\u00e4ngliga beh\u00f6ver de installeras f\u00f6rst. Hur du g\u00f6r detta t\u00e4cks inte av denna guide.<\/p>\n\n\n\n<p>Kopiera koden nedan till en fil p\u00e5 servern som du d\u00f6per till exempelvis <code>snapshot.sh<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-danger\">Var noga med att byta ut inneh\u00e5llet i <code>OS_PASSWORD<\/code>, <code>OS_PROJECT_NAME<\/code>, <code>OS_USERNAME<\/code> och <code>server_id<\/code> till de uppgifter du plockat fram enligt <a href=\"#uppgifter-som-behovs-for-skriptet\">ovan<\/a>.<br><br>Ange ocks\u00e5 alla efterfr\u00e5gade uppgifter under avsnittet &#8221;Email settings&#8221; f\u00f6r att mail ska skickas ut med resultatet av k\u00f6rningen.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n\n# OpenStack credentials\nexport OS_AUTH_TYPE='password'\nexport OS_AUTH_URL='https:\/\/cloud-api.oderland.com:5000\/v3\/'\nexport OS_DOMAIN_NAME='cloud'\nexport OS_PASSWORD='<code>CLOUDL\u00d6SENORD<\/code>'\nexport OS_PROJECT_NAME='<code>PROJEKT-ID<\/code>'\nexport OS_USERNAME='<code>CLOUDANV\u00c4NDARNAMN<\/code>'\n\n# Virtual server ID\nserver_id='<code>SERVER-ID<\/code>'\n\n# Email settings\nrecipient=''\nsender=''\nsmtp_password=''\nsmtp_port=''\nsmtp_server=''\nsmtp_username=''\n\n# Exit on unset variables\nset -uo pipefail\n\n# Check for dependencies\nfor dep in openstack mailx jq; do\n  if ! hash \"$dep\" &amp;&gt; \/dev\/null; then\n    printf 'Missing executable dependency: %s\\n' \"$dep\"\n    exit 1\n  fi\ndone\n\n# Get the name of the virtual server\nserver_name=$(openstack server show -c name -f value \"$server_id\")\n\n# Get the list of volumes attached to the virtual server\nvolume_list=$(\n  openstack server show -c volumes_attached -f json \"$server_id\" |\n    jq -r '.volumes_attached[].id'\n)\n\n# Variable to store the result message\nresult_message=\"\"\n\n# Iterate over each volume and take a snapshot\nfor volume_id in $volume_list; do\n  snapshot_name=\"snapshot-$(date +\"%Y%m%d%H%M%S\")\"\n\n  # Create the snapshot\n  if openstack volume snapshot create --volume \"$volume_id\" --force \"$snapshot_name\" 1&gt; \/dev\/null; then\n    result_message+=\"Snapshot created successfully for volume $volume_id.\\n\"\n\n    # Wait for the snapshot to become available\n    timeout=60\n    elapsed_time=0\n    while true; do\n      snapshot_status=$(openstack volume snapshot show -c status --format value \"$snapshot_name\")\n      if [ \"$snapshot_status\" == \"available\" ]; then\n        result_message+=\"Snapshot $snapshot_name is available for volume $volume_id.\\n\"\n        break\n      fi\n      sleep 5\n      elapsed_time=$((elapsed_time + 5))\n      if [ $elapsed_time -ge $timeout ]; then\n        result_message+=\"Error: Snapshot $snapshot_name did not become available for volume $volume_id within the timeout period.\\n\"\n        break\n      fi\n    done\n  else\n    result_message+=\"Error creating snapshot for volume $volume_id.\\n\"\n  fi\ndone\n\n# Send email with the result\nprintf \"$result_message\" |\n  mailx \\\n    -s \"Snapshot Result for $server_name\" \\\n    -S 'v15-compat' \\\n    -S \"mta=smtp:\/\/$smtp_username:$smtp_password@$smtp_server:$smtp_port\" \\\n    -S 'smtp-use-starttls' \\\n    -S 'smtp-auth=login' \\\n    -r \"$sender\" \\\n    \"$recipient\"\n\nprintf \"$result_message\"<\/pre>\n\n\n\n<p>Gl\u00f6m inte att g\u00f6ra filen som inneh\u00e5ller skriptkoden k\u00f6rbar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">chmod +x \/s\u00f6kv\u00e4g\/till\/snapshot.sh<\/pre>\n\n\n\n<p>Du kan nu testa att skapa snapshots med hj\u00e4lp av scriptet genom att k\u00f6ra det:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/s\u00f6kv\u00e4g\/till\/snapshot.sh<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Skript som inte skickar mail med resultat<\/h3>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">Skriptet beh\u00f6ver paketen <code>openstack<\/code> och <code>jq<\/code> f\u00f6r att kunna k\u00f6ras. Har du dem inte tillg\u00e4ngliga beh\u00f6ver de installeras f\u00f6rst. Hur du g\u00f6r detta t\u00e4cks inte av denna guide.<\/p>\n\n\n\n<p>Kopiera koden nedan till en fil p\u00e5 servern som du d\u00f6per till exempelvis <code>snapshot.sh<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-danger\">Var noga med att byta ut inneh\u00e5llet i <code>OS_PASSWORD<\/code>, <code>OS_PROJECT_NAME<\/code>, <code>OS_USERNAME<\/code> och <code>server_id<\/code> till de uppgifter du plockat fram enligt <a href=\"#uppgifter-som-behovs-for-skriptet\">ovan<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash\n\n# OpenStack credentials\nexport OS_AUTH_TYPE='password'\nexport OS_AUTH_URL='https:\/\/cloud-api.oderland.com:5000\/v3\/'\nexport OS_DOMAIN_NAME='cloud'\nexport OS_PASSWORD='<code>CLOUDL\u00d6SENORD<\/code>'\nexport OS_PROJECT_NAME='<code>PROJEKT-ID<\/code>'\nexport OS_USERNAME='<code>CLOUDANV\u00c4NDARNAMN<\/code>'\n\n# Virtual server ID\nserver_id='<code>SERVER-ID<\/code>'\n\n# Exit on unset variables\nset -uo pipefail\n\n# Check for dependencies\nfor dep in openstack jq; do\n  if ! hash \"$dep\" &amp;&gt; \/dev\/null; then\n    printf 'Missing executable dependency: %s\\n' \"$dep\"\n    exit 1\n  fi\ndone\n\n# Get the name of the virtual server\nserver_name=$(openstack server show -c name -f value \"$server_id\")\n\n# Get the list of volumes attached to the virtual server\nvolume_list=$(\n  openstack server show -c volumes_attached -f json \"$server_id\" |\n    jq -r '.volumes_attached[].id'\n)\n\n# Variable to store the result message\nresult_message=\"\"\n\n# Iterate over each volume and take a snapshot\nfor volume_id in $volume_list; do\n  snapshot_name=\"snapshot-$(date +\"%Y%m%d%H%M%S\")\"\n\n  # Create the snapshot\n  if openstack volume snapshot create --volume \"$volume_id\" --force \"$snapshot_name\" 1&gt; \/dev\/null; then\n    result_message+=\"Snapshot created successfully for volume $volume_id.\\n\"\n\n    # Wait for the snapshot to become available\n    timeout=60\n    elapsed_time=0\n    while true; do\n      snapshot_status=$(openstack volume snapshot show -c status --format value \"$snapshot_name\")\n      if [ \"$snapshot_status\" == \"available\" ]; then\n        result_message+=\"Snapshot $snapshot_name is available for volume $volume_id.\\n\"\n        break\n      fi\n      sleep 5\n      elapsed_time=$((elapsed_time + 5))\n      if [ $elapsed_time -ge $timeout ]; then\n        result_message+=\"Error: Snapshot $snapshot_name did not become available for volume $volume_id within the timeout period.\\n\"\n        break\n      fi\n    done\n  else\n    result_message+=\"Error creating snapshot for volume $volume_id.\\n\"\n  fi\ndone\n\nprintf \"$result_message\"<\/pre>\n\n\n\n<p>Gl\u00f6m inte att g\u00f6ra filen som inneh\u00e5ller skriptkoden k\u00f6rbar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">chmod +x \/s\u00f6kv\u00e4g\/till\/snapshot.sh<\/pre>\n\n\n\n<p>Du kan nu testa att skapa snapshots med hj\u00e4lp av scriptet genom att k\u00f6ra det:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/s\u00f6kv\u00e4g\/till\/snapshot.sh<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Skapa schemalagda snapshots<\/h2>\n\n\n\n<p>N\u00e4r du nu har skriptet kan du s\u00e4tta upp schemal\u00e4ggning av snapshots, s\u00e5 du slipper t\u00e4nka p\u00e5 att skapa dem manuellt. Enklaste l\u00f6sningen f\u00f6r detta \u00e4r att s\u00e4tta upp ett cronjob, vilket vi g\u00e5r igenom nedan. Du kan ocks\u00e5 skapa en systemd-timer f\u00f6r schemal\u00e4ggningen, men detta t\u00e4cks inte av den h\u00e4r guiden.<\/p>\n\n\n\n<p>\u00d6ppna redigeringen av cronjob:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">crontab -e<\/pre>\n\n\n\n<p>Sist i crontab, l\u00e4gg in f\u00f6jande f\u00f6r att schemal\u00e4gga k\u00f6rningen till kl 02:00 p\u00e5 natten varje dag. Du kan givetvis ange andra tider, intervall etc &#8211; detta \u00e4r bara ett exempel.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0 2 * * * \/s\u00f6kv\u00e4g\/till\/snapshot.sh<\/pre>\n\n\n\n<p>Avsluta d\u00e4refter redigeringen av din crontab.<\/p>\n\n\n\n<p>Ditt skript kommer nu k\u00f6ras av servern vid den\/de tidpunkt(er) du angivit i cronjobbet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00f6r n\u00e4rvarande finns det inget st\u00f6d f\u00f6r schemal\u00e4ggning av snapshots i Oderland Cloud, men du kan anv\u00e4nda OpenStack API f\u00f6r att l\u00f6sa det p\u00e5 egen hand. Genom att anv\u00e4nda ett bash-skript (eller valfritt annat spr\u00e5k som du f\u00f6redrar) och en schemal\u00e4ggningstj\u00e4nst s\u00e5 som cron eller en systemd-timer, kan du automatiskt&#8230;<\/p>\n","protected":false},"author":12,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"ht-kb-category":[681],"ht-kb-tag":[],"class_list":["post-19505","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-cloud"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb\/19505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/comments?post=19505"}],"version-history":[{"count":18,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb\/19505\/revisions"}],"predecessor-version":[{"id":19529,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb\/19505\/revisions\/19529"}],"wp:attachment":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/media?parent=19505"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb-category?post=19505"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb-tag?post=19505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}