{"id":32032,"date":"2025-10-16T23:41:11","date_gmt":"2025-10-16T20:41:11","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32032"},"modified":"2025-10-16T23:41:11","modified_gmt":"2025-10-16T20:41:11","slug":"digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/","title":{"rendered":"DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma"},"content":{"rendered":"<p><body><\/p>\n<h2>DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, altyap\u0131 y\u00f6netimi ve da\u011f\u0131t\u0131m\u0131 s\u00fcre\u00e7lerini otomatikle\u015ftirmek, modern BT operasyonlar\u0131n\u0131n temel bir gereklili\u011fidir. Manuel yap\u0131land\u0131rmalar zaman al\u0131c\u0131, hataya a\u00e7\u0131k ve \u00f6l\u00e7eklendirilmesi zor s\u00fcre\u00e7lerdir. Bu noktada, &#8220;Altyap\u0131 Kod Olarak&#8221; (Infrastructure as Code &#8211; IaC) yakla\u015f\u0131m\u0131 devreye girer. IaC, altyap\u0131n\u0131z\u0131 yaz\u0131l\u0131m kodu gibi tan\u0131mlaman\u0131za, s\u00fcr\u00fcm kontrol\u00fcnde tutman\u0131za ve otomatik olarak da\u011f\u0131tman\u0131za olanak tan\u0131r.<\/p>\n<p>Bu makalede, pop\u00fcler bir bulut sa\u011flay\u0131c\u0131s\u0131 olan DigitalOcean&#8217;\u0131n g\u00fc\u00e7l\u00fc API v2&#8217;sini, otomasyon arac\u0131 Ansible 2.0 ile entegre ederek, altyap\u0131 y\u00f6netimini nas\u0131l otomatikle\u015ftirebilece\u011fimizi ayr\u0131nt\u0131l\u0131 olarak inceleyece\u011fiz. Kontrol makinesi olarak Ubuntu 14.04 i\u015fletim sistemini kullanaca\u011f\u0131z. Ubuntu 14.04, nispeten eski bir s\u00fcr\u00fcm olsa da, hala belirli kurumsal veya miras sistemlerde kullan\u0131lmakta olup, temel prensipleri anlamak i\u00e7in m\u00fckemmel bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar. DigitalOcean API v2, Droplet&#8217;lerden (sanal sunucular), depolama birimlerine, a\u011f yap\u0131land\u0131rmalar\u0131na ve veritabanlar\u0131na kadar t\u00fcm DigitalOcean kaynaklar\u0131n\u0131 programatik olarak y\u00f6netmenizi sa\u011flar. Ansible ise, basit ve okunabilir YAML tabanl\u0131 playbook&#8217;lar\u0131 arac\u0131l\u0131\u011f\u0131yla bu API&#8217;yi kullanarak altyap\u0131n\u0131z\u0131 tan\u0131mlaman\u0131za ve y\u00f6netmenize olanak tan\u0131r.<\/p>\n<p>Bu makalenin amac\u0131, DigitalOcean API v2&#8217;yi Ansible 2.0 ile entegre etmenin ad\u0131mlar\u0131n\u0131, \u00f6n gereksinimleri, yap\u0131land\u0131rma \u00f6rneklerini ve s\u0131k kar\u015f\u0131la\u015f\u0131lan sorunlar\u0131 kapsaml\u0131 bir \u015fekilde a\u00e7\u0131klamakt\u0131r. B\u00f6ylece, okuyucular kendi otomatik altyap\u0131 da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini tasarlayabilir ve uygulayabilirler.<\/p>\n<h2>\u00d6n Gereksinimler<\/h2>\n<p>Bu rehberi takip edebilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>Ubuntu 14.04 Kurulu Bir Sistem:<\/strong> Ansible kontrol makinesi olarak kullan\u0131lacak olan bir Ubuntu 14.04 sunucusu veya sanal makinesi. Bu makalede t\u00fcm kurulum ve yap\u0131land\u0131rma ad\u0131mlar\u0131 bu i\u015fletim sistemi \u00fczerinde g\u00f6sterilecektir.<br \/>\n*   <strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 kullan\u0131m\u0131, paket y\u00f6netimi (<code>apt-get<\/code>), dosya sistemi navigasyonu gibi temel Linux komutlar\u0131na a\u015final\u0131k.<br \/>\n*   <strong>DigitalOcean Hesab\u0131:<\/strong> Aktif bir DigitalOcean hesab\u0131na sahip olman\u0131z gerekmektedir. E\u011fer yoksa, kolayca bir hesap olu\u015fturabilirsiniz.<br \/>\n*   <strong>DigitalOcean API Token&#8217;\u0131:<\/strong> DigitalOcean hesab\u0131n\u0131zda API eri\u015fimi i\u00e7in bir ki\u015fisel eri\u015fim token&#8217;\u0131 (Personal Access Token) olu\u015fturmu\u015f olman\u0131z gerekmektedir. Bu token, Ansible&#8217;\u0131n DigitalOcean kaynaklar\u0131n\u0131za eri\u015fimini sa\u011flayacakt\u0131r. Token&#8217;\u0131n hem okuma hem de yazma (Read &#038; Write) izinlerine sahip olmas\u0131 \u00f6nemlidir.<br \/>\n*   <strong>Temel Ansible Bilgisi:<\/strong> Ansible&#8217;\u0131n temel kavramlar\u0131na (playbook, g\u00f6revler, mod\u00fcller, envanter vb.) a\u015fina olmak, bu makaledeki \u00f6rnekleri daha iyi anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>1. Ubuntu 14.04 Ortam\u0131n\u0131 Haz\u0131rlama<\/h2>\n<p>Ansible&#8217;\u0131 kurmadan ve DigitalOcean API ile etkile\u015fime ge\u00e7meden \u00f6nce, Ubuntu 14.04 kontrol makinemizi haz\u0131rlamam\u0131z gerekmektedir.<\/p>\n<h3>Sistem G\u00fcncelleme<\/h3>\n<p>Herhangi bir yaz\u0131l\u0131m kurulumuna ba\u015flamadan \u00f6nce sistem paket listesini g\u00fcncellemek ve mevcut paketleri y\u00fckseltmek iyi bir uygulamad\u0131r. Bu, potansiyel ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 \u00f6nlemeye yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get upgrade -y<\/code><\/pre>\n<p>Bu komutlar, sistemdeki paket depolar\u0131n\u0131 g\u00fcnceller ve mevcut t\u00fcm paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltir.<\/p>\n<h3>Python ve PIP Kurulumu<\/h3>\n<p>Ansible, Python ile yaz\u0131lm\u0131\u015ft\u0131r ve \u00e7al\u0131\u015fmas\u0131 i\u00e7in Python&#8217;a ihtiya\u00e7 duyar. Ayr\u0131ca, Ansible&#8217;\u0131n DigitalOcean mod\u00fcllerinin baz\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7in Python paket y\u00f6neticisi <code>pip<\/code>&#8216;e ihtiyac\u0131m\u0131z olacakt\u0131r. Ubuntu 14.04&#8217;te Python genellikle \u00f6n y\u00fckl\u00fc gelir, ancak <code>pip<\/code>&#8216;i ve baz\u0131 temel Python geli\u015ftirme ara\u00e7lar\u0131n\u0131 kurmam\u0131z gerekebilir.<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install python-minimal python-pip python-dev -y<\/code><\/pre>\n<p><code>python-minimal<\/code> temel Python \u00e7al\u0131\u015ft\u0131rma ortam\u0131n\u0131 sa\u011flar, <code>python-pip<\/code> Python paket y\u00f6neticisidir ve <code>python-dev<\/code> ise baz\u0131 Python mod\u00fcllerinin derlenmesi i\u00e7in gerekli olan geli\u015ftirme dosyalar\u0131n\u0131 i\u00e7erir. <code>pip<\/code>&#8216;i en son s\u00fcr\u00fcme g\u00fcncellemek de \u00f6nerilir:<\/p>\n<pre><code class=\"language-bash\">sudo pip install --upgrade pip<\/code><\/pre>\n<h3>Ansible Kurulumu<\/h3>\n<p>Ubuntu 14.04 i\u00e7in Ansible 2.0&#8217;\u0131 kurman\u0131n en g\u00fcvenilir yolu, Ansible&#8217;\u0131n kendi PPA (Personal Package Archive) deposunu kullanmakt\u0131r. Bu sayede, daha g\u00fcncel bir Ansible s\u00fcr\u00fcm\u00fcne eri\u015febiliriz.<\/p>\n<p>\u00d6ncelikle PPA deposunu eklemek i\u00e7in <code>software-properties-common<\/code> paketini kurmam\u0131z gerekebilir:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install software-properties-common -y<\/code><\/pre>\n<p>Ard\u0131ndan Ansible PPA&#8217;s\u0131n\u0131 ekleyin:<\/p>\n<pre><code class=\"language-bash\">sudo apt-add-repository ppa:ansible\/ansible -y<\/code><\/pre>\n<p>Depoyu ekledikten sonra, paket listesini tekrar g\u00fcncellemeniz gerekmektedir:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update<\/code><\/pre>\n<p>\u015eimdi Ansible&#8217;\u0131 kurabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get install ansible -y<\/code><\/pre>\n<p>Kurulumun ba\u015far\u0131l\u0131 oldu\u011funu ve do\u011fru Ansible s\u00fcr\u00fcm\u00fcn\u00fc kurdu\u011funuzu do\u011frulamak i\u00e7in s\u00fcr\u00fcm kontrol\u00fc yapabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ansible --version<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>ansible 2.0.x.x<\/code> gibi bir s\u00fcr\u00fcm numaras\u0131 g\u00f6rmelisiniz.<\/p>\n<h2>2. DigitalOcean API v2 Eri\u015fimi \u0130\u00e7in Haz\u0131rl\u0131klar<\/h2>\n<p>Ansible&#8217;\u0131n DigitalOcean API ile ileti\u015fim kurabilmesi i\u00e7in baz\u0131 \u00f6zel ayarlamalar yapmam\u0131z gerekmektedir.<\/p>\n<h3>DigitalOcean API Token Olu\u015fturma<\/h3>\n<p>DigitalOcean API v2&#8217;ye programatik eri\u015fim sa\u011flaman\u0131n anahtar\u0131 bir ki\u015fisel eri\u015fim token&#8217;\u0131d\u0131r. Bu token, hesab\u0131n\u0131zdaki kaynaklar\u0131 olu\u015fturma, de\u011fi\u015ftirme veya silme yetkisine sahiptir, bu y\u00fczden g\u00fcvenli bir \u015fekilde saklanmal\u0131d\u0131r.<\/p>\n<p>1.  <strong>DigitalOcean Kontrol Paneline Giri\u015f Yap\u0131n:<\/strong> Taray\u0131c\u0131n\u0131zdan DigitalOcean hesab\u0131n\u0131za giri\u015f yap\u0131n.<br \/>\n2.  <strong>API B\u00f6l\u00fcm\u00fcne Gidin:<\/strong> Sol men\u00fcden &#8220;API&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n3.  <strong>Yeni Token Olu\u015fturun:<\/strong> &#8220;Generate New Token&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n4.  <strong>Token Ad\u0131 ve \u0130zinleri:<\/strong> Token&#8217;\u0131n\u0131za anlaml\u0131 bir isim verin (\u00f6rne\u011fin, &#8220;ansible-integration&#8221;). &#8220;Write&#8221; (Yazma) kutucu\u011funun i\u015faretli oldu\u011fundan emin olun, \u00e7\u00fcnk\u00fc Ansible kaynaklar\u0131 olu\u015fturmak ve de\u011fi\u015ftirmek i\u00e7in bu izne ihtiya\u00e7 duyacakt\u0131r. &#8220;Read&#8221; (Okuma) izni otomatik olarak se\u00e7ilecektir.<br \/>\n5.  <strong>Token&#8217;\u0131 Kopyalay\u0131n:<\/strong> Token olu\u015fturulduktan sonra ekranda beliren token dizesini kopyalay\u0131n. <strong>Bu token&#8217;\u0131 bir daha g\u00f6remeyeceksiniz<\/strong>, bu y\u00fczden kopyalad\u0131\u011f\u0131n\u0131zdan ve g\u00fcvenli bir yere (\u00f6rne\u011fin, bir parola y\u00f6neticisi) kaydetti\u011finizden emin olun. Bu token, Ansible playbook&#8217;lar\u0131n\u0131zda kullan\u0131lacakt\u0131r.<\/p>\n<h3>Python <code>requests<\/code> K\u00fct\u00fcphanesi Kurulumu<\/h3>\n<p>Ansible&#8217;\u0131n DigitalOcean mod\u00fclleri, DigitalOcean API ile HTTP istekleri arac\u0131l\u0131\u011f\u0131yla ileti\u015fim kurar. Bu ileti\u015fim i\u00e7in genellikle Python&#8217;\u0131n <code>requests<\/code> k\u00fct\u00fcphanesini kullan\u0131r. Bu k\u00fct\u00fcphaneyi kontrol makinesine kurmak, sorunsuz bir \u00e7al\u0131\u015fma i\u00e7in gereklidir.<\/p>\n<pre><code class=\"language-bash\">sudo pip install requests<\/code><\/pre>\n<p>Bu komut, Ansible&#8217;\u0131n DigitalOcean mod\u00fcllerinin API \u00e7a\u011fr\u0131lar\u0131n\u0131 yapabilmesi i\u00e7in gerekli olan <code>requests<\/code> k\u00fct\u00fcphanesini kurar.<\/p>\n<h2>3. Ansible ile DigitalOcean API v2 Kullan\u0131m\u0131<\/h2>\n<p>\u015eimdi, Ansible&#8217;\u0131 DigitalOcean API ile entegre etmenin pratik ad\u0131mlar\u0131na ge\u00e7ebiliriz.<\/p>\n<h3>Ansible Yap\u0131land\u0131rmas\u0131 ve Kimlik Do\u011frulama<\/h3>\n<p>API token&#8217;\u0131n\u0131z\u0131 playbook&#8217;lar\u0131n\u0131zda do\u011frudan d\u00fcz metin olarak saklamak g\u00fcvenlik a\u00e7\u0131s\u0131ndan son derece risklidir. Ansible, hassas verileri \u015fifrelemek i\u00e7in <code>Ansible Vault<\/code> ad\u0131nda bir \u00f6zellik sunar. Bu, API token&#8217;\u0131n\u0131z\u0131 g\u00fcvenli bir \u015fekilde saklaman\u0131n \u00f6nerilen yoludur.<\/p>\n<p>1.  <strong>Vault Dosyas\u0131 Olu\u015fturma:<\/strong><br \/>\n    \u00d6ncelikle, API token&#8217;\u0131n\u0131z\u0131 i\u00e7erecek \u015fifreli bir dosya olu\u015ftural\u0131m. Proje dizininizde <code>vars<\/code> ad\u0131nda bir klas\u00f6r olu\u015fturun ve i\u00e7ine <code>digitalocean_vars.yml<\/code> ad\u0131nda bir dosya yarat\u0131n:<\/p>\n<pre><code class=\"language-bash\">mkdir -p vars\n    ansible-vault create vars\/digitalocean_vars.yml<\/code><\/pre>\n<p>    Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, sizden bir parola belirlemeniz istenecektir. Bu parola, vault dosyas\u0131n\u0131 \u015fifrelemek ve \u015fifresini \u00e7\u00f6zmek i\u00e7in kullan\u0131lacakt\u0131r. Parolay\u0131 g\u00fcvenli bir yerde saklay\u0131n.<\/p>\n<p>    Dosya a\u00e7\u0131ld\u0131\u011f\u0131nda (bir metin edit\u00f6r\u00fcnde), i\u00e7ine API token&#8217;\u0131n\u0131z\u0131 a\u015fa\u011f\u0131daki gibi ekleyin:<\/p>\n<pre><code class=\"language-yaml\">do_api_token: \"sizin_digitalocean_api_tokeniniz\"<\/code><\/pre>\n<p>    Dosyay\u0131 kaydedip kapat\u0131n. Art\u0131k API token&#8217;\u0131n\u0131z \u015fifreli bir \u015fekilde saklanmaktad\u0131r.<\/p>\n<p>2.  <strong>Playbook&#8217;ta Vault Dosyas\u0131n\u0131 Kullanma:<\/strong><br \/>\n    Playbook&#8217;lar\u0131n\u0131zda bu \u015fifreli de\u011fi\u015fkenleri kullanmak i\u00e7in <code>vars_files<\/code> anahtar\u0131n\u0131 kullanman\u0131z gerekmektedir.<\/p>\n<h3>\u0130lk Playbook: Droplet Olu\u015fturma<\/h3>\n<p>DigitalOcean&#8217;da bir sanal sunucuya &#8220;Droplet&#8221; denir. Ansible&#8217;\u0131n <code>digital_ocean_droplet<\/code> mod\u00fcl\u00fc, Droplet&#8217;leri olu\u015fturmak, g\u00fcncellemek ve silmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnek, <code>ansible-test-droplet<\/code> ad\u0131nda, <code>nyc3<\/code> b\u00f6lgesinde, <code>s-1vcpu-1gb<\/code> boyutunda ve Ubuntu 18.04 i\u015fletim sistemi imaj\u0131na sahip bir Droplet olu\u015fturur. Ubuntu 14.04 kontrol makinesinde olsak da, olu\u015fturaca\u011f\u0131m\u0131z Droplet i\u00e7in daha g\u00fcncel bir imaj kullanmak iyi bir uygulamad\u0131r.<\/p>\n<p><code>create_droplet.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: DigitalOcean Droplet Olu\u015fturma\n  hosts: localhost\n  connection: local\n  gather_facts: no # Bu playbook sadece yerel makinede \u00e7al\u0131\u015faca\u011f\u0131 i\u00e7in facts toplamaya gerek yok\n  vars_files:\n    - vars\/digitalocean_vars.yml # Vault ile \u015fifrelenmi\u015f API token'\u0131 i\u00e7eren dosya\n\n  tasks:\n    - name: Yeni bir Droplet olu\u015ftur\n      digital_ocean_droplet:\n        state: present             # Droplet'in var olmas\u0131n\u0131 sa\u011flar (olu\u015fturur)\n        api_token: \"{{ do_api_token }}\" # Vault'tan al\u0131nan API token'\u0131\n        name: \"ansible-test-droplet\" # Droplet'in ad\u0131\n        size: \"s-1vcpu-1gb\"        # Droplet boyutu (en k\u00fc\u00e7\u00fck)\n        region: \"nyc3\"             # B\u00f6lge\n        image: \"ubuntu-18-04-x64\"  # Kullan\u0131lacak i\u015fletim sistemi imaj\u0131\n        ssh_keys:                  # Opsiyonel: Droplet'e eklenecek SSH anahtarlar\u0131n\u0131n ID'leri veya parmak izleri\n          - \"buraya_ssh_anahtar_id_nizi_veya_parmak_izinizi_girin\"\n        wait: yes                  # Droplet olu\u015fturulana kadar bekle\n        count: 1                   # Bir adet Droplet olu\u015ftur\n      register: new_droplet        # Olu\u015fturulan Droplet bilgilerini de\u011fi\u015fkene kaydet\n\n    - name: Olu\u015fturulan Droplet bilgilerini g\u00f6ster\n      debug:\n        var: new_droplet           # De\u011fi\u015fkenin i\u00e7eri\u011fini ekrana yazd\u0131r<\/code><\/pre>\n<p><strong>\u00d6nemli:<\/strong> <code>ssh_keys<\/code> alan\u0131na kendi DigitalOcean hesab\u0131n\u0131za ekledi\u011finiz bir SSH anahtar\u0131n\u0131n ID&#8217;sini veya parmak izini girmeniz gerekmektedir. E\u011fer SSH anahtar\u0131n\u0131z yoksa, DigitalOcean panelinden ekleyebilir veya bu sat\u0131r\u0131 \u015fimdilik kald\u0131rabilirsiniz, ancak Droplet&#8217;e ba\u011flanmak i\u00e7in root \u015fifresiyle giri\u015f yapman\u0131z gerekir ki bu \u00f6nerilmez.<\/p>\n<p>Playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook create_droplet.yml --ask-vault-pass<\/code><\/pre>\n<p>Bu komut, sizden vault dosyas\u0131n\u0131 \u015fifrelerken kulland\u0131\u011f\u0131n\u0131z parolay\u0131 isteyecektir. Do\u011fru parolay\u0131 girdikten sonra Ansible, Droplet olu\u015fturma i\u015flemini ba\u015flatacakt\u0131r. Ba\u015far\u0131l\u0131 bir \u00e7al\u0131\u015ft\u0131rmadan sonra, <code>new_droplet<\/code> de\u011fi\u015fkeninin i\u00e7eri\u011fi <code>debug<\/code> g\u00f6revi ile ekrana yazd\u0131r\u0131lacak ve Droplet&#8217;in IP adresi, durumu gibi bilgiler g\u00f6r\u00fcnecektir.<\/p>\n<h3>Droplet&#8217;e Ba\u011flanma ve \u0130lk Konfig\u00fcrasyon<\/h3>\n<p>Bir Droplet olu\u015fturulduktan sonra, Ansible&#8217;\u0131 kullanarak ona ba\u011flanabilir ve ilk konfig\u00fcrasyonunu yapabiliriz. Bunun i\u00e7in, olu\u015fturulan Droplet&#8217;in IP adresini dinamik olarak Ansible envanterine eklememiz gerekir.<\/p>\n<p>A\u015fa\u011f\u0131daki playbook, yukar\u0131daki Droplet olu\u015fturma g\u00f6revini tekrarlar (veya mevcut Droplet&#8217;i kontrol eder) ve ard\u0131ndan olu\u015fturulan Droplet&#8217;in IP adresini ge\u00e7ici bir envanter grubuna ekleyerek ona ping atar ve <code>apt<\/code> \u00f6nbelle\u011fini g\u00fcnceller.<\/p>\n<p><code>configure_droplet.yml<\/code> ad\u0131nda yeni bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: Yeni Droplet'e ba\u011flan ve konfig\u00fcrasyon yap\n  hosts: localhost\n  connection: local\n  gather_facts: no\n  vars_files:\n    - vars\/digitalocean_vars.yml\n\n  tasks:\n    - name: Yeni bir Droplet olu\u015ftur veya mevcut olan\u0131 kontrol et\n      digital_ocean_droplet:\n        state: present\n        api_token: \"{{ do_api_token }}\"\n        name: \"ansible-test-droplet\"\n        size: \"s-1vcpu-1gb\"\n        region: \"nyc3\"\n        image: \"ubuntu-18-04-x64\"\n        ssh_keys:\n          - \"buraya_ssh_anahtar_id_nizi_veya_parmak_izinizi_girin\"\n        wait: yes\n      register: new_droplet_info\n\n    - name: Yeni Droplet'i ge\u00e7ici envantere ekle\n      add_host:\n        hostname: \"{{ new_droplet_info.droplet.ipv4_address }}\"\n        groupname: new_droplets\n        ansible_user: root # Droplet'e ba\u011flanmak i\u00e7in root kullan\u0131c\u0131s\u0131\n        ansible_ssh_private_key_file: \"~\/.ssh\/id_rsa\" # Kontrol makinesindeki \u00f6zel SSH anahtar\u0131n\u0131z\u0131n yolu\n      when: new_droplet_info.changed # Sadece Droplet yeni olu\u015fturulduysa veya de\u011fi\u015ftiyse ekle\n\n- name: Yeni Droplet'te ilk konfig\u00fcrasyon\n  hosts: new_droplets # Dinamik olarak eklenen Droplet'leri hedefle\n  gather_facts: yes\n  become: yes # G\u00f6revleri sudo ile \u00e7al\u0131\u015ft\u0131r\n  tasks:\n    - name: Droplet'e ping atarak ba\u011flant\u0131y\u0131 test et\n      ping:\n\n    - name: Apt cache'i g\u00fcncelle\n      apt:\n        update_cache: yes\n        cache_valid_time: 3600 # \u00d6nbelle\u011fi 1 saat ge\u00e7erli tut<\/code><\/pre>\n<p><strong>\u00d6nemli:<\/strong> <code>ansible_ssh_private_key_file<\/code> alan\u0131na, SSH anahtar\u0131n\u0131z\u0131n kontrol makinesindeki tam yolunu girmelisiniz (\u00f6rne\u011fin, <code>~\/.ssh\/id_rsa<\/code>). Bu \u00f6zel anahtar, Ansible&#8217;\u0131n olu\u015fturulan Droplet&#8217;e SSH ile ba\u011flanmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<p>Playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook configure_droplet.yml --ask-vault-pass<\/code><\/pre>\n<p>Bu playbook, Droplet&#8217;i olu\u015fturacak (veya zaten varsa bilgileri alacak), IP adresini al\u0131p ge\u00e7ici <code>new_droplets<\/code> grubuna ekleyecek ve ard\u0131ndan bu gruba dahil olan Droplet&#8217;lerde ping atma ve <code>apt<\/code> \u00f6nbelle\u011fini g\u00fcncelleme g\u00f6revlerini \u00e7al\u0131\u015ft\u0131racakt\u0131r.<\/p>\n<h3>Droplet Bilgilerini Alma ve Y\u00f6netme<\/h3>\n<p>Mevcut Droplet&#8217;lerin bilgilerini almak i\u00e7in <code>digital_ocean_droplet_facts<\/code> mod\u00fcl\u00fcn\u00fc kullanabiliriz. Bu mod\u00fcl, bir veya daha fazla Droplet hakk\u0131nda detayl\u0131 bilgileri getirir.<\/p>\n<p><code>get_droplet_info.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: DigitalOcean Droplet Bilgilerini Alma\n  hosts: localhost\n  connection: local\n  gather_facts: no\n  vars_files:\n    - vars\/digitalocean_vars.yml\n\n  tasks:\n    - name: Belirli bir Droplet'in bilgilerini al\n      digital_ocean_droplet_facts:\n        api_token: \"{{ do_api_token }}\"\n        name: \"ansible-test-droplet\" # Bilgilerini almak istedi\u011finiz Droplet'in ad\u0131\n      register: droplet_facts\n\n    - name: Droplet bilgilerini g\u00f6ster\n      debug:\n        var: droplet_facts.droplets[0] # E\u011fer birden fazla ayn\u0131 isimde varsa ilkini al\u0131r<\/code><\/pre>\n<p>Playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook get_droplet_info.yml --ask-vault-pass<\/code><\/pre>\n<p>Bu, <code>ansible-test-droplet<\/code> adl\u0131 Droplet&#8217;in t\u00fcm mevcut bilgilerini (IP adresi, durumu, boyutu, b\u00f6lgesi vb.) ekrana yazd\u0131racakt\u0131r.<\/p>\n<h3>Droplet&#8217;i Silme<\/h3>\n<p>Bir Droplet&#8217;i silmek i\u00e7in <code>digital_ocean_droplet<\/code> mod\u00fcl\u00fcn\u00fc <code>state: absent<\/code> parametresiyle kullan\u0131r\u0131z.<\/p>\n<p><code>delete_droplet.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: DigitalOcean Droplet Silme\n  hosts: localhost\n  connection: local\n  gather_facts: no\n  vars_files:\n    - vars\/digitalocean_vars.yml\n\n  tasks:\n    - name: Belirtilen Droplet'i sil\n      digital_ocean_droplet:\n        state: absent              # Droplet'in yok olmas\u0131n\u0131 sa\u011flar (siler)\n        api_token: \"{{ do_api_token }}\"\n        name: \"ansible-test-droplet\" # Silinecek Droplet'in ad\u0131\n        wait: yes                  # Silme i\u015flemi tamamlanana kadar bekle\n      register: delete_result\n\n    - name: Silme sonucunu g\u00f6ster\n      debug:\n        var: delete_result<\/code><\/pre>\n<p>Playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook delete_droplet.yml --ask-vault-pass<\/code><\/pre>\n<p>Bu komut, <code>ansible-test-droplet<\/code> adl\u0131 Droplet&#8217;i DigitalOcean hesab\u0131n\u0131zdan kal\u0131c\u0131 olarak silecektir.<\/p>\n<h2>4. Di\u011fer DigitalOcean Kaynaklar\u0131n\u0131 Y\u00f6netme (K\u0131sa Bak\u0131\u015f)<\/h2>\n<p>Ansible, Droplet&#8217;lerden \u00e7ok daha fazlas\u0131n\u0131 y\u00f6netmek i\u00e7in DigitalOcean mod\u00fclleri sunar. \u0130\u015fte baz\u0131 \u00f6nemli \u00f6rnekler:<\/p>\n<h3>SSH Anahtarlar\u0131 (<code>digital_ocean_sshkey<\/code>)<\/h3>\n<p>DigitalOcean hesab\u0131n\u0131za SSH anahtarlar\u0131 ekleyebilir, silebilir veya listeleyebilirsiniz. Bu, Droplet olu\u015ftururken SSH anahtarlar\u0131n\u0131 otomatik olarak eklemenizi sa\u011flar.<\/p>\n<pre><code class=\"language-yaml\">- name: Yeni bir SSH anahtar\u0131 ekle\n  digital_ocean_sshkey:\n    state: present\n    api_token: \"{{ do_api_token }}\"\n    name: \"my-ansible-ssh-key\"\n    ssh_pub_key: \"{{ lookup('file', '~\/.ssh\/id_rsa.pub') }}\" # Genel anahtar dosyan\u0131z\u0131n i\u00e7eri\u011fi<\/code><\/pre>\n<h3>Firewall Kurallar\u0131 (<code>digital_ocean_firewall<\/code>)<\/h3>\n<p>Droplet&#8217;ler i\u00e7in g\u00fcvenlik duvar\u0131 kurallar\u0131 olu\u015fturabilir, g\u00fcncelleyebilir ve silebilirsiniz.<\/p>\n<pre><code class=\"language-yaml\">- name: Web sunucusu i\u00e7in yeni bir g\u00fcvenlik duvar\u0131 olu\u015ftur\n  digital_ocean_firewall:\n    state: present\n    api_token: \"{{ do_api_token }}\"\n    name: \"web-server-firewall\"\n    inbound_rules:\n      - protocol: tcp\n        ports: \"80\"\n        sources:\n          addresses: [\"0.0.0.0\/0\"]\n      - protocol: tcp\n        ports: \"22\"\n        sources:\n          addresses: [\"your_ip_address\/32\"] # Kendi IP adresinizi buraya girin\n    droplet_ids:\n      - \"{{ new_droplet_info.droplet.id }}\" # Olu\u015fturdu\u011funuz Droplet'in ID'si<\/code><\/pre>\n<h3>Load Balancer&#8217;lar (<code>digital_ocean_load_balancer<\/code>)<\/h3>\n<p>Uygulaman\u0131z i\u00e7in y\u00fck dengeleyiciler olu\u015fturabilir ve y\u00f6netebilirsiniz.<\/p>\n<pre><code class=\"language-yaml\">- name: Yeni bir Load Balancer olu\u015ftur\n  digital_ocean_load_balancer:\n    state: present\n    api_token: \"{{ do_api_token }}\"\n    name: \"my-web-lb\"\n    region: \"nyc3\"\n    forwarding_rules:\n      - entry_protocol: http\n        entry_port: 80\n        target_protocol: http\n        target_port: 80\n    droplet_ids:\n      - \"{{ droplet1.id }}\"\n      - \"{{ droplet2.id }}\"<\/code><\/pre>\n<h3>Blok Depolama (Block Storage) (<code>digital_ocean_block_storage<\/code>)<\/h3>\n<p>Droplet&#8217;lerinize ekleyebilece\u011finiz blok depolama birimleri olu\u015fturabilir ve y\u00f6netebilirsiniz.<\/p>\n<pre><code class=\"language-yaml\">- name: Yeni bir blok depolama birimi olu\u015ftur\n  digital_ocean_block_storage:\n    state: present\n    api_token: \"{{ do_api_token }}\"\n    name: \"my-data-volume\"\n    size_gigabytes: 10 # 10 GB boyutunda\n    region: \"nyc3\"\n    droplet_id: \"{{ new_droplet_info.droplet.id }}\" # Ba\u011flanaca\u011f\u0131 Droplet ID'si<\/code><\/pre>\n<p>Bu mod\u00fcllerin genel kullan\u0131m mant\u0131\u011f\u0131 <code>digital_ocean_droplet<\/code> ile benzerdir: <code>state: present\/absent<\/code> ile kayna\u011f\u0131n varl\u0131\u011f\u0131n\u0131 kontrol eder, <code>api_token<\/code> ile kimlik do\u011frulamas\u0131 yapar ve kayna\u011fa \u00f6zg\u00fc parametrelerle yap\u0131land\u0131rmay\u0131 sa\u011flar.<\/p>\n<h2>5. Dinamik Envanter Kullan\u0131m\u0131<\/h2>\n<p>Ansible&#8217;\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri dinamik envanter yetene\u011fidir. Statik bir envanter dosyas\u0131 (<code>hosts<\/code> veya <code>inventory<\/code>) yerine, dinamik envanter betikleri, bulut sa\u011flay\u0131c\u0131lar\u0131ndan veya di\u011fer veri kaynaklar\u0131ndan mevcut sunucular\u0131n listesini ve ilgili meta verilerini otomatik olarak \u00e7ekerek Ansible&#8217;a sunar. DigitalOcean i\u00e7in de bir dinamik envanter beti\u011fi bulunmaktad\u0131r.<\/p>\n<p>Dinamik envanter beti\u011fi, DigitalOcean hesab\u0131n\u0131zdaki t\u00fcm Droplet&#8217;leri otomatik olarak tespit eder ve bunlar\u0131 Ansible&#8217;\u0131n kullanabilece\u011fi bir envanter format\u0131nda d\u00fczenler. Bu, \u00f6zellikle \u00e7ok say\u0131da Droplet&#8217;iniz oldu\u011funda veya altyap\u0131n\u0131z s\u0131k s\u0131k de\u011fi\u015fti\u011finde son derece faydal\u0131d\u0131r.<\/p>\n<p><strong>Dinamik Envanter Beti\u011fini Kullanma Ad\u0131mlar\u0131:<\/strong><\/p>\n<p>1.  <strong>Beti\u011fi \u0130ndirme:<\/strong><br \/>\n    DigitalOcean dinamik envanter beti\u011fini Ansible&#8217;\u0131n GitHub deposundan veya do\u011frudan indirebilirsiniz. Kontrol makinenizde bir dizin olu\u015fturun ve beti\u011fi oraya indirin:<\/p>\n<pre><code class=\"language-bash\">mkdir -p ~\/ansible-do-inventory\n    cd ~\/ansible-do-inventory\n    wget https:\/\/raw.githubusercontent.com\/ansible\/ansible\/stable-2.0\/contrib\/inventory\/digital_ocean.py\n    wget https:\/\/raw.githubusercontent.com\/ansible\/ansible\/stable-2.0\/contrib\/inventory\/digital_ocean.ini\n    chmod +x digital_ocean.py<\/code><\/pre>\n<p>    Burada <code>stable-2.0<\/code> dal\u0131n\u0131 kulland\u0131k, \u00e7\u00fcnk\u00fc makalemiz Ansible 2.0 \u00fczerine odaklanm\u0131\u015ft\u0131r.<\/p>\n<p>2.  <strong>Yap\u0131land\u0131rma Dosyas\u0131 (<code>digital_ocean.ini<\/code>) Olu\u015fturma:<\/strong><br \/>\n    \u0130ndirdi\u011finiz <code>digital_ocean.ini<\/code> dosyas\u0131n\u0131 d\u00fczenlemeniz gerekmektedir. Bu dosya, dinamik envanter beti\u011finin DigitalOcean API&#8217;sine nas\u0131l ba\u011flanaca\u011f\u0131n\u0131 belirler. API token&#8217;\u0131n\u0131z\u0131 bu dosyaya ekleyebilirsiniz:<\/p>\n<pre><code class=\"language-ini\">[digital_ocean]\n    # DigitalOcean API token. Required.\n    # Can also be specified via the DO_API_TOKEN environment variable.\n    api_token = sizin_digitalocean_api_tokeniniz\n\n    # Cache for the inventory.\n    # Toggle caching and set cache expiration time (in seconds).\n    cache = True\n    cache_max_age = 300\n    cache_path = ~\/.ansible\/tmp<\/code><\/pre>\n<p>    <code>api_token<\/code> alan\u0131na DigitalOcean API token&#8217;\u0131n\u0131z\u0131 yap\u0131\u015ft\u0131r\u0131n. Ayr\u0131ca, token&#8217;\u0131 bir ortam de\u011fi\u015fkeni olarak da ayarlayabilirsiniz (<code>export DO_API_TOKEN=\"sizin_tokeniniz\"<\/code>), bu durumda <code>.ini<\/code> dosyas\u0131ndaki sat\u0131r\u0131 bo\u015f b\u0131rakabilirsiniz. Ortam de\u011fi\u015fkeni kullanmak, API token&#8217;\u0131n\u0131 dosyalarda saklamaktan daha g\u00fcvenli bir y\u00f6ntem olabilir.<\/p>\n<p>3.  <strong>Dinamik Envanteri Kullanma:<\/strong><br \/>\n    Art\u0131k Ansible&#8217;\u0131 bu dinamik envanter beti\u011fiyle \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00d6rne\u011fin, t\u00fcm DigitalOcean Droplet&#8217;lerinize ping atmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">ansible -i digital_ocean.py all -m ping --user root --private-key ~\/.ssh\/id_rsa<\/code><\/pre>\n<p>    Bu komut, <code>digital_ocean.py<\/code> beti\u011fini kullanarak mevcut t\u00fcm Droplet&#8217;lerinizi listeler ve her birine ping atmay\u0131 dener. <code>ansible_user<\/code> ve <code>ansible_ssh_private_key_file<\/code> parametrelerini, Droplet&#8217;lerinize SSH ile ba\u011flanmak i\u00e7in do\u011fru kimlik bilgilerini sa\u011flamak \u00fczere ayarlaman\u0131z \u00f6nemlidir.<\/p>\n<p>Dinamik envanter, altyap\u0131n\u0131z\u0131n s\u00fcrekli de\u011fi\u015fti\u011fi, Droplet&#8217;lerin otomatik olarak \u00f6l\u00e7eklendi\u011fi veya s\u0131k s\u0131k olu\u015fturulup silindi\u011fi senaryolarda vazge\u00e7ilmez bir ara\u00e7t\u0131r.<\/p>\n<h2>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p>DigitalOcean API v2&#8217;yi Ansible ile kullan\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve bunlar\u0131n \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>API Token Hatalar\u0131 (Yetkilendirme Sorunlar\u0131):<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>Authentication Failed<\/code> veya <code>Unauthorized<\/code> gibi hatalar al\u0131yorsunuz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> API token&#8217;\u0131n\u0131z\u0131n do\u011fru oldu\u011fundan, kopyalarken herhangi bir karakterin eksik kalmad\u0131\u011f\u0131ndan ve <code>digitalocean_vars.yml<\/code> dosyas\u0131nda do\u011fru \u015fekilde tan\u0131mland\u0131\u011f\u0131ndan emin olun. Ayr\u0131ca, token&#8217;\u0131n hem okuma hem de yazma izinlerine sahip oldu\u011fundan emin olun. Vault parolas\u0131n\u0131 do\u011fru girdi\u011finizden de emin olun.<br \/>\n*   <strong>Mod\u00fcl Eksiklikleri:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>No module named requests<\/code> veya benzeri Python k\u00fct\u00fcphanesi hatalar\u0131 al\u0131yorsunuz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>sudo pip install requests<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak gerekli Python k\u00fct\u00fcphanelerini kurdu\u011funuzdan emin olun. Ansible&#8217;\u0131n DigitalOcean mod\u00fclleri genellikle <code>requests<\/code> k\u00fct\u00fcphanesine ihtiya\u00e7 duyar.<br \/>\n*   <strong>A\u011f Sorunlar\u0131 (Firewall, DNS):<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Ansible, DigitalOcean API&#8217;sine veya olu\u015fturdu\u011fu Droplet&#8217;lere ba\u011flanam\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Kontrol makinenizin internet ba\u011flant\u0131s\u0131n\u0131 kontrol edin. DigitalOcean API&#8217;sinin eri\u015filebilir oldu\u011fundan emin olun (\u00f6rne\u011fin, <code>curl https:\/\/api.digitalocean.com\/v2\/<\/code> komutuyla test edebilirsiniz). Olu\u015fturdu\u011funuz Droplet&#8217;e SSH ile manuel olarak ba\u011flanmay\u0131 deneyin. Droplet&#8217;in g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131n (varsa) SSH (port 22) trafi\u011fine izin verdi\u011finden emin olun.<br \/>\n*   <strong>Idempotence&#8217;\u0131n \u00d6nemi:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Ayn\u0131 playbook&#8217;u tekrar \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda beklenmedik sonu\u00e7lar veya hatalar al\u0131yorsunuz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Ansible mod\u00fclleri genellikle idempotent olacak \u015fekilde tasarlanm\u0131\u015ft\u0131r, yani bir g\u00f6revi birden \u00e7ok kez \u00e7al\u0131\u015ft\u0131rmak ayn\u0131 sonucu vermelidir. E\u011fer bir Droplet zaten varsa <code>state: present<\/code> onu tekrar olu\u015fturmaya \u00e7al\u0131\u015fmaz, sadece mevcut oldu\u011funu do\u011frular. Ancak, baz\u0131 \u00f6zel senaryolarda veya custom betiklerde idempotence&#8217;\u0131 sa\u011flamak sizin sorumlulu\u011funuzdad\u0131r. Playbook&#8217;lar\u0131n\u0131z\u0131 idempotent olacak \u015fekilde tasarlad\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n*   <strong>Ubuntu 14.04 ve S\u00fcr\u00fcm Uyumlulu\u011fu:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Python veya Ansible&#8217;\u0131n belirli mod\u00fclleri Ubuntu 14.04&#8217;teki eski Python s\u00fcr\u00fcmleriyle uyumluluk sorunlar\u0131 ya\u015f\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Bu makalede belirtildi\u011fi gibi PPA kullanarak Ansible 2.0&#8217;\u0131 kurmak ve <code>pip<\/code> ile k\u00fct\u00fcphaneleri g\u00fcncel tutmak bu t\u00fcr sorunlar\u0131 minimize etmelidir. Ancak, \u00e7ok eski bir i\u015fletim sistemi kullan\u0131rken baz\u0131 modern Python k\u00fct\u00fcphaneleriyle uyumluluk sorunlar\u0131 ya\u015fanmas\u0131 beklenebilir. Gerekirse, bir Python sanal ortam\u0131 (<code>virtualenv<\/code>) kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz, ancak bu Ubuntu 14.04&#8217;\u00fcn varsay\u0131lan Python&#8217;unu etkilemeden ba\u011f\u0131ml\u0131l\u0131klar\u0131 izole etmenin daha geli\u015fmi\u015f bir yoludur.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu makalede, DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 kontrol makinesi \u00fczerinde nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde inceledik. Altyap\u0131 kod olarak (IaC) prensiplerini benimseyerek, DigitalOcean Droplet&#8217;lerini olu\u015fturma, yap\u0131land\u0131rma, bilgilerini alma ve silme gibi temel i\u015flemleri otomatikle\u015ftirmeyi \u00f6\u011frendik. Ayr\u0131ca, Ansible Vault kullanarak API token&#8217;\u0131 gibi hassas bilgileri g\u00fcvenli bir \u015fekilde saklaman\u0131n \u00f6nemine de\u011findik ve dinamik envanter kullan\u0131m\u0131n\u0131n faydalar\u0131n\u0131 g\u00f6rd\u00fck.<\/p>\n<p>DigitalOcean&#8217;\u0131n zengin API&#8217;si ve Ansible&#8217;\u0131n esnek otomasyon yetenekleri birle\u015fti\u011finde, bulut altyap\u0131n\u0131z\u0131 h\u0131zl\u0131, tutarl\u0131 ve \u00f6l\u00e7eklenebilir bir \u015fekilde y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 seti elde edersiniz. Bu entegrasyon, geli\u015ftirme ve \u00fcretim ortamlar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirir, insan hatas\u0131n\u0131 azalt\u0131r ve operasyonel verimlili\u011fi art\u0131r\u0131r.<\/p>\n<p>\u00d6\u011frenilen bu bilgilerle, sadece Droplet&#8217;lerle s\u0131n\u0131rl\u0131 kalmay\u0131p, DigitalOcean&#8217;daki di\u011fer kaynaklar\u0131 (blok depolama, y\u00fck dengeleyiciler, g\u00fcvenlik duvarlar\u0131, veritabanlar\u0131 vb.) da Ansible mod\u00fclleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netebilirsiniz. Bu, karma\u015f\u0131k bulut altyap\u0131lar\u0131n\u0131 tek bir kod taban\u0131ndan kontrol etmenize olanak tan\u0131r.<\/p>\n<p>\u0130leriye d\u00f6n\u00fck olarak, bu temel bilgileri kullanarak daha karma\u015f\u0131k senaryolar \u00fczerinde \u00e7al\u0131\u015fabilirsiniz:<\/p>\n<p>*   <strong>U\u00e7tan Uca Uygulama Da\u011f\u0131t\u0131m\u0131:<\/strong> Bir Droplet olu\u015fturmaktan, bir web sunucusu kurmaya, veritaban\u0131n\u0131 yap\u0131land\u0131rmaya ve bir uygulamay\u0131 da\u011f\u0131tmaya kadar t\u00fcm s\u00fcreci otomatikle\u015ftiren playbook&#8217;lar yaz\u0131n.<br \/>\n*   <strong>Dinamik \u00d6l\u00e7eklendirme:<\/strong> Bir izleme sistemi ile entegre olarak, belirli ko\u015fullar alt\u0131nda otomatik olarak Droplet ekleyen veya kald\u0131ran Ansible playbook&#8217;lar\u0131 olu\u015fturun.<br \/>\n*   <strong>Di\u011fer Bulut Sa\u011flay\u0131c\u0131lar\u0131:<\/strong> Ansible&#8217;\u0131n AWS, Azure, Google Cloud gibi di\u011fer bulut sa\u011flay\u0131c\u0131lar\u0131 i\u00e7in de benzer mod\u00fclleri bulunmaktad\u0131r. \u00d6\u011frendi\u011finiz prensipleri bu platformlara uygulayarak \u00e7oklu bulut stratejileri geli\u015ftirebilirsiniz.<br \/>\n*   <strong>CI\/CD Entegrasyonu:<\/strong> Ansible playbook&#8217;lar\u0131n\u0131z\u0131 Jenkins, GitLab CI\/CD veya CircleCI gibi s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131na entegre ederek tamamen otomatik bir da\u011f\u0131t\u0131m s\u00fcreci olu\u015fturun.<\/p>\n<p>Altyap\u0131 otomasyonu, modern yaz\u0131l\u0131m geli\u015ftirme ve operasyonlar\u0131n\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Ansible ve DigitalOcean API v2 gibi ara\u00e7lar\u0131 ustaca kullanarak, daha verimli, g\u00fcvenilir ve esnek bir dijital altyap\u0131 in\u015fa etme yolunda \u00f6nemli ad\u0131mlar atm\u0131\u015f olursunuz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, altyap\u0131 y\u00f6netimi","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-32032","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DigitalOcean API v2&#039;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DigitalOcean API v2&#039;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma\" \/>\n<meta property=\"og:description\" content=\"DigitalOcean API v2&#039;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, altyap\u0131 y\u00f6netimi\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-16T20:41:11+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma\",\"datePublished\":\"2025-10-16T20:41:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\"},\"wordCount\":2926,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\",\"name\":\"DigitalOcean API v2'yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-16T20:41:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DigitalOcean API v2'yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/","og_locale":"tr_TR","og_type":"article","og_title":"DigitalOcean API v2'yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma","og_description":"DigitalOcean API v2'yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, altyap\u0131 y\u00f6netimi","og_url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-16T20:41:11+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma","datePublished":"2025-10-16T20:41:11+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/"},"wordCount":2926,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/","url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/","name":"DigitalOcean API v2'yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-16T20:41:11+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-api-v2yi-ansible-2-0-ile-ubuntu-14-04-uzerinde-kullanma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DigitalOcean API v2&#8217;yi Ansible 2.0 ile Ubuntu 14.04 \u00dczerinde Kullanma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32032"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32032\/revisions"}],"predecessor-version":[{"id":32033,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32032\/revisions\/32033"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}