{"id":33782,"date":"2025-11-07T00:40:45","date_gmt":"2025-11-06T21:40:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33782"},"modified":"2025-11-07T00:40:45","modified_gmt":"2025-11-06T21:40:45","slug":"centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/","title":{"rendered":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen BT d\u00fcnyas\u0131nda, sunucu ve altyap\u0131 y\u00f6netimi giderek daha karma\u015f\u0131k hale gelmektedir. Y\u00fczlerce, hatta binlerce sunucuyu manuel olarak yap\u0131land\u0131rmak, g\u00fcncellemek ve y\u00f6netmek hem zaman al\u0131c\u0131 hem de hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir. \u0130\u015fte tam da bu noktada otomasyon ara\u00e7lar\u0131 devreye girer. Ansible, bu otomasyon ara\u00e7lar\u0131 aras\u0131nda pop\u00fclerli\u011fini, basitli\u011fini ve g\u00fcc\u00fcn\u00fc kan\u0131tlam\u0131\u015f, a\u00e7\u0131k kaynakl\u0131 bir yap\u0131land\u0131rma y\u00f6netimi, g\u00f6rev otomasyonu ve uygulama da\u011f\u0131t\u0131m arac\u0131d\u0131r.<\/p>\n<p>Ansible, Python ile yaz\u0131lm\u0131\u015ft\u0131r ve SSH protokol\u00fc \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in y\u00f6netilen d\u00fc\u011f\u00fcmlerde (managed nodes) herhangi bir \u00f6zel ajan (agent) yaz\u0131l\u0131m\u0131na ihtiya\u00e7 duymaz. Bu &#8220;agents\u0131z&#8221; mimari, kurulum ve bak\u0131m maliyetlerini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve g\u00fcvenlik risklerini minimize eder. \u0130nsan taraf\u0131ndan okunabilir YAML tabanl\u0131 playbook&#8217;lar\u0131 sayesinde, BT altyap\u0131s\u0131n\u0131n durumunu tan\u0131mlamak ve otomasyon g\u00f6revlerini olu\u015fturmak son derece kolayd\u0131r. Gerek sistem y\u00f6neticileri, gerekse DevOps m\u00fchendisleri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelen Ansible, tekrarlayan g\u00f6revleri otomatikle\u015ftirerek verimlili\u011fi art\u0131r\u0131r, tutarl\u0131l\u0131\u011f\u0131 sa\u011flar ve operasyonel maliyetleri d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<p>Bu kapsaml\u0131 rehberde, CentOS 7 i\u015fletim sistemi \u00fczerine Ansible&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temel yap\u0131land\u0131rmalar\u0131 nas\u0131l yapaca\u011f\u0131n\u0131z\u0131 ve ilk otomasyon g\u00f6revlerinizi nas\u0131l ger\u00e7ekle\u015ftirece\u011finizi ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Kontrol sunucusundan (control node) y\u00f6netilen d\u00fc\u011f\u00fcmlere kadar t\u00fcm s\u00fcreci detayl\u0131 bir \u015fekilde ele alarak, Ansible d\u00fcnyas\u0131na sa\u011flam bir giri\u015f yapman\u0131z\u0131 sa\u011flayaca\u011f\u0131z.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Ansible kurulumuna ba\u015flamadan \u00f6nce, ortam\u0131n\u0131z\u0131n belirli gereksinimleri kar\u015f\u0131lad\u0131\u011f\u0131ndan emin olmal\u0131s\u0131n\u0131z:<\/p>\n<p>*   <strong>CentOS 7 \u0130\u015fletim Sistemi:<\/strong> Ansible&#8217;\u0131 kuraca\u011f\u0131n\u0131z kontrol sunucusu olarak g\u00f6rev yapacak bir CentOS 7 sunucusu. Bu sunucunun g\u00fcncel olmas\u0131 \u00f6nerilir.<br \/>\n*   <strong>Sudo Yetkileri:<\/strong> Kurulum ve yap\u0131land\u0131rma i\u015flemleri i\u00e7in <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131na ihtiyac\u0131n\u0131z olacak. Genellikle <code>root<\/code> kullan\u0131c\u0131s\u0131 veya <code>sudoers<\/code> grubuna dahil edilmi\u015f bir kullan\u0131c\u0131 kullan\u0131l\u0131r.<br \/>\n*   <strong>\u0130nternet Ba\u011flant\u0131s\u0131:<\/strong> Ansible paketlerini indirmek i\u00e7in kontrol sunucusunun internet eri\u015fimi olmas\u0131 gerekmektedir.<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> Ansible, y\u00f6netilen d\u00fc\u011f\u00fcmlerle SSH \u00fczerinden ileti\u015fim kurar. Bu nedenle, y\u00f6netilen d\u00fc\u011f\u00fcmlerin SSH eri\u015fimine a\u00e7\u0131k olmas\u0131 ve kontrol sunucusunun bu d\u00fc\u011f\u00fcmlere SSH ile ba\u011flanabilmesi gerekmektedir.<br \/>\n*   <strong>Python:<\/strong> Y\u00f6netilen d\u00fc\u011f\u00fcmlerde Python 2 (2.6 veya \u00fcst\u00fc) veya Python 3 (3.5 veya \u00fcst\u00fc) kurulu olmal\u0131d\u0131r. CentOS 7 varsay\u0131lan olarak Python 2.7 ile gelir ve bu Ansible i\u00e7in yeterlidir.<\/p>\n<h3>CentOS 7 \u00dczerine Ansible Kurulumu<\/h3>\n<p>CentOS 7 \u00fczerine Ansible kurmak olduk\u00e7a basittir. Genellikle EPEL (Extra Packages for Enterprise Linux) deposu arac\u0131l\u0131\u011f\u0131yla kurulur.<\/p>\n<h4>1. Ad\u0131m: Sistem G\u00fcncelleme<\/h4>\n<p>Kuruluma ba\u015flamadan \u00f6nce, sisteminizin g\u00fcncel oldu\u011fundan emin olmak iyi bir pratiktir:<\/p>\n<pre><code class=\"language-bash\">sudo yum update -y<\/code><\/pre>\n<h4>2. Ad\u0131m: EPEL Deposunu Etkinle\u015ftirme<\/h4>\n<p>Ansible paketi, CentOS&#8217;un varsay\u0131lan depolar\u0131nda bulunmaz. Bu nedenle, \u00f6nce EPEL deposunu etkinle\u015ftirmemiz gerekir:<\/p>\n<pre><code class=\"language-bash\">sudo yum install epel-release -y<\/code><\/pre>\n<p>Bu komut, EPEL deposunu sisteminize ekler.<\/p>\n<h4>3. Ad\u0131m: Ansible Kurulumu<\/h4>\n<p>EPEL deposu etkinle\u015ftirildikten sonra, Ansible&#8217;\u0131 <code>yum<\/code> paket y\u00f6neticisi ile kolayca kurabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo yum install ansible -y<\/code><\/pre>\n<p>Bu komut, Ansible&#8217;\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 sisteminize y\u00fckleyecektir.<\/p>\n<h4>4. Ad\u0131m: Kurulumu Do\u011frulama<\/h4>\n<p>Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in Ansible s\u00fcr\u00fcm\u00fcn\u00fc sorgulayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ansible --version<\/code><\/pre>\n<p>Bu komut, kurulu Ansible s\u00fcr\u00fcm\u00fcn\u00fc, Python s\u00fcr\u00fcm\u00fcn\u00fc ve di\u011fer yap\u0131land\u0131rma bilgilerini g\u00f6sterecektir. \u00c7\u0131kt\u0131 a\u015fa\u011f\u0131daki gibi olacakt\u0131r:<\/p>\n<pre><code class=\"language-\">ansible 2.9.x\n  config file = \/etc\/ansible\/ansible.cfg\n  configured module search path = ['\/root\/.ansible\/plugins\/modules', '\/usr\/share\/ansible\/plugins\/modules']\n  ansible python module location = \/usr\/lib\/python2.7\/site-packages\/ansible\n  executable location = \/usr\/bin\/ansible\n  python version = 2.7.5 (default, ...)<\/code><\/pre>\n<p>Bu \u00e7\u0131kt\u0131, Ansible&#8217;\u0131n ba\u015far\u0131yla kuruldu\u011funu ve \u00e7al\u0131\u015fmaya haz\u0131r oldu\u011funu g\u00f6sterir.<\/p>\n<h3>Ansible Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Ansible&#8217;\u0131 kurduktan sonra, otomasyon g\u00f6revlerinizi ger\u00e7ekle\u015ftirebilmek i\u00e7in temel yap\u0131land\u0131rmalar\u0131 yapman\u0131z gerekir. Bu yap\u0131land\u0131rmalar iki ana bile\u015fenden olu\u015fur: <code>ansible.cfg<\/code> dosyas\u0131 ve Inventory dosyas\u0131.<\/p>\n<h4>1. Ansible Yap\u0131land\u0131rma Dosyas\u0131 (<code>ansible.cfg<\/code>)<\/h4>\n<p><code>ansible.cfg<\/code>, Ansible&#8217;\u0131n \u00e7al\u0131\u015fma \u015feklini kontrol eden ana yap\u0131land\u0131rma dosyas\u0131d\u0131r. Varsay\u0131lan olarak <code>\/etc\/ansible\/ansible.cfg<\/code> konumunda bulunur. Ancak, proje baz\u0131nda veya kullan\u0131c\u0131 baz\u0131nda farkl\u0131 yap\u0131land\u0131rma dosyalar\u0131 da kullanabilirsiniz. Ansible, yap\u0131land\u0131rma dosyas\u0131n\u0131 \u015fu s\u0131rayla arar:<br \/>\n1.  <code>ANSIBLE_CONFIG<\/code> ortam de\u011fi\u015fkeni ile belirtilen dosya.<br \/>\n2.  Ge\u00e7erli dizindeki <code>.\/ansible.cfg<\/code>.<br \/>\n3.  Kullan\u0131c\u0131n\u0131n ev dizinindeki <code>~\/.ansible.cfg<\/code>.<br \/>\n4.  <code>\/etc\/ansible\/ansible.cfg<\/code>.<\/p>\n<p>Bu dosya, SSH ba\u011flant\u0131 ayarlar\u0131ndan, loglama se\u00e7eneklerine, paralel i\u015flem say\u0131s\u0131ndan, varsay\u0131lan mod\u00fcl yollar\u0131na kadar bir\u00e7ok parametreyi i\u00e7erir. \u0130\u015fte baz\u0131 \u00f6nemli parametreler:<\/p>\n<p>*   <strong><code>inventory<\/code><\/strong>: Varsay\u0131lan inventory dosyas\u0131n\u0131n yolunu belirtir. Genellikle <code>\/etc\/ansible\/hosts<\/code> olarak ayarlan\u0131r.<br \/>\n*   <strong><code>remote_user<\/code><\/strong>: Y\u00f6netilen d\u00fc\u011f\u00fcmlere ba\u011flanmak i\u00e7in kullan\u0131lacak varsay\u0131lan kullan\u0131c\u0131 ad\u0131.<br \/>\n*   <strong><code>ask_pass<\/code><\/strong>: SSH ba\u011flant\u0131s\u0131 i\u00e7in parola sorulup sorulmayaca\u011f\u0131n\u0131 belirler (genellikle SSH anahtarlar\u0131 kullan\u0131ld\u0131\u011f\u0131 i\u00e7in <code>False<\/code> olarak ayarlan\u0131r).<br \/>\n*   <strong><code>become<\/code><\/strong>: Yetki y\u00fckseltme (sudo) ayarlar\u0131n\u0131 kontrol eder. <code>True<\/code> olarak ayarlan\u0131rsa, Ansible otomatik olarak <code>sudo<\/code> kullanmaya \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong><code>become_method<\/code><\/strong>: Yetki y\u00fckseltme y\u00f6ntemi (sudo, su, pbrun, doas vb.). Varsay\u0131lan <code>sudo<\/code>&#8216;dur.<br \/>\n*   <strong><code>become_user<\/code><\/strong>: Yetki y\u00fckseltme sonras\u0131 ge\u00e7ilecek kullan\u0131c\u0131 (varsay\u0131lan <code>root<\/code>).<br \/>\n*   <strong><code>host_key_checking<\/code><\/strong>: SSH anahtar kontrol\u00fcn\u00fc etkinle\u015ftirir veya devre d\u0131\u015f\u0131 b\u0131rak\u0131r. G\u00fcvenlik i\u00e7in <code>True<\/code> olmas\u0131 \u00f6nerilir.<br \/>\n*   <strong><code>private_key_file<\/code><\/strong>: SSH ba\u011flant\u0131s\u0131 i\u00e7in kullan\u0131lacak \u00f6zel anahtar dosyas\u0131n\u0131n yolu.<\/p>\n<p>\u00d6rnek bir <code>ansible.cfg<\/code> par\u00e7as\u0131:<\/p>\n<pre><code class=\"language-ini\">[defaults]\ninventory      = \/etc\/ansible\/hosts\nremote_user    = ansible_user\nask_pass       = False\n\n[privilege_escalation]\nbecome         = True\nbecome_method  = sudo\nbecome_user    = root\nbecome_ask_pass = False<\/code><\/pre>\n<p>Bu ayarlar, Ansible&#8217;\u0131n <code>ansible_user<\/code> adl\u0131 kullan\u0131c\u0131yla SSH \u00fczerinden ba\u011flanmas\u0131n\u0131 ve <code>sudo<\/code> kullanarak <code>root<\/code> yetkileriyle komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>2. Inventory Dosyas\u0131<\/h4>\n<p>Inventory dosyas\u0131, Ansible&#8217;\u0131n y\u00f6nete\u011fi sunucular\u0131n (host&#8217;lar\u0131n) bir listesidir. Bu dosya, host&#8217;lar\u0131 gruplar halinde d\u00fczenlemenize, host&#8217;lara \u00f6zg\u00fc de\u011fi\u015fkenler tan\u0131mlaman\u0131za ve ba\u011flant\u0131 parametrelerini ayarlaman\u0131za olanak tan\u0131r. Varsay\u0131lan olarak <code>\/etc\/ansible\/hosts<\/code> konumunda bulunur ve INI veya YAML format\u0131nda olabilir. INI format\u0131 daha yayg\u0131n kullan\u0131l\u0131r.<\/p>\n<p><strong>Inventory Dosyas\u0131 Yap\u0131s\u0131:<\/strong><\/p>\n<p>*   <strong>Host Tan\u0131mlama:<\/strong><br \/>\n    Her bir host, IP adresi veya hostname ile tan\u0131mlan\u0131r.<\/p>\n<pre><code class=\"language-ini\">server1.example.com\n    192.168.1.10<\/code><\/pre>\n<p>*   <strong>Grup Tan\u0131mlama:<\/strong><br \/>\n    Host&#8217;lar\u0131 gruplar halinde d\u00fczenlemek, belirli g\u00f6revleri sadece o gruba uygulamak i\u00e7in faydal\u0131d\u0131r. Grup isimleri k\u00f6\u015feli parantez i\u00e7inde belirtilir.<\/p>\n<pre><code class=\"language-ini\">[webservers]\n    web1.example.com\n    web2.example.com\n\n    [databases]\n    db1.example.com<\/code><\/pre>\n<p>*   <strong>Grup \u0130\u00e7indeki Host&#8217;lara De\u011fi\u015fken Tan\u0131mlama:<\/strong><br \/>\n    Bir gruba ait t\u00fcm host&#8217;lar i\u00e7in ge\u00e7erli olacak de\u011fi\u015fkenler tan\u0131mlayabilirsiniz.<\/p>\n<pre><code class=\"language-ini\">[webservers]\n    web1.example.com ansible_port=2222\n    web2.example.com\n\n    [webservers:vars]\n    ansible_user=webadmin\n    http_port=80<\/code><\/pre>\n<p>    Burada <code>webservers<\/code> grubundaki t\u00fcm host&#8217;lar i\u00e7in <code>ansible_user<\/code> de\u011fi\u015fkeni <code>webadmin<\/code> olarak ayarlanm\u0131\u015ft\u0131r. Ayr\u0131ca <code>web1.example.com<\/code> i\u00e7in \u00f6zel bir <code>ansible_port<\/code> tan\u0131mlanm\u0131\u015ft\u0131r.<\/p>\n<p>*   <strong>T\u00fcm Host&#8217;lara veya Gruplara De\u011fi\u015fken Tan\u0131mlama:<\/strong><br \/>\n    <code>[all:vars]<\/code> b\u00f6l\u00fcm\u00fc, t\u00fcm host&#8217;lar i\u00e7in ge\u00e7erli olacak de\u011fi\u015fkenleri tan\u0131mlar.<\/p>\n<pre><code class=\"language-ini\">[all:vars]\n    ansible_python_interpreter=\/usr\/bin\/python<\/code><\/pre>\n<p><strong>\u00d6rnek <code>\/etc\/ansible\/hosts<\/code> dosyas\u0131:<\/strong><\/p>\n<pre><code class=\"language-ini\"># Bu, Ansible inventory dosyan\u0131zd\u0131r.\n<h2>Daha fazla bilgi i\u00e7in: https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html<\/h2>\n\n<h2>\u00d6rnek host tan\u0131mlamalar\u0131:<\/h2>\n<h2>server1.example.com<\/h2>\n<h2>192.168.1.10<\/h2>\n\n<h2>\u00d6rnek grup tan\u0131mlamalar\u0131:<\/h2>\n[webservers]\nweb1.example.com ansible_host=192.168.1.11\nweb2.example.com ansible_host=192.168.1.12\n\n[databases]\ndb1.example.com ansible_host=192.168.1.13\n\n<h2>Grup de\u011fi\u015fkenleri:<\/h2>\n[webservers:vars]\nansible_user=ansible_admin\nansible_ssh_private_key_file=\/home\/ansible_admin\/.ssh\/id_rsa\nhttp_port=80\nmax_clients=200\n\n[databases:vars]\nansible_user=db_admin\nansible_ssh_private_key_file=\/home\/ansible_admin\/.ssh\/id_rsa\ndb_port=5432\n\n<h2>T\u00fcm host'lar i\u00e7in ge\u00e7erli de\u011fi\u015fkenler:<\/h2>\n[all:vars]\nansible_python_interpreter=\/usr\/bin\/python<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>ansible_host<\/code> de\u011fi\u015fkeni, host&#8217;un ger\u00e7ek IP adresini veya hostname&#8217;ini belirtmek i\u00e7in kullan\u0131l\u0131rken, <code>web1.example.com<\/code> gibi isimler sadece Ansible taraf\u0131ndan kullan\u0131lan takma adlard\u0131r. <code>ansible_user<\/code> ve <code>ansible_ssh_private_key_file<\/code> gibi de\u011fi\u015fkenler, Ansible&#8217;\u0131n SSH ba\u011flant\u0131s\u0131 kurarken kullanaca\u011f\u0131 kimlik do\u011frulama bilgilerini sa\u011flar.<\/p>\n<h3>Managed Node (Y\u00f6netilen D\u00fc\u011f\u00fcm) Haz\u0131rl\u0131\u011f\u0131<\/h3>\n<p>Ansible kontrol sunucusunu yap\u0131land\u0131rd\u0131ktan sonra, y\u00f6netece\u011finiz d\u00fc\u011f\u00fcmleri Ansible ba\u011flant\u0131s\u0131na haz\u0131r hale getirmeniz gerekir.<\/p>\n<h4>1. Ad\u0131m: SSH Anahtar \u00c7ifti Olu\u015fturma (Kontrol Sunucusunda)<\/h4>\n<p>Ansible&#8217;\u0131n y\u00f6netilen d\u00fc\u011f\u00fcmlere g\u00fcvenli ve parolas\u0131z bir \u015fekilde ba\u011flanabilmesi i\u00e7in SSH anahtar \u00e7ifti kullan\u0131lmas\u0131 \u015fiddetle tavsiye edilir. Kontrol sunucusunda, Ansible kullan\u0131c\u0131s\u0131 i\u00e7in bir SSH anahtar \u00e7ifti olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">ssh-keygen -t rsa -b 4096 -C \"ansible_user@control_node\"<\/code><\/pre>\n<p>Bu komut, varsay\u0131lan olarak <code>~\/.ssh\/id_rsa<\/code> (\u00f6zel anahtar) ve <code>~\/.ssh\/id_rsa.pub<\/code> (genel anahtar) dosyalar\u0131n\u0131 olu\u015fturacakt\u0131r. Parola (passphrase) sormas\u0131 durumunda bo\u015f b\u0131rakarak parolas\u0131z eri\u015fimi sa\u011flayabilirsiniz.<\/p>\n<h4>2. Ad\u0131m: Ortak Anahtar\u0131 Y\u00f6netilen D\u00fc\u011f\u00fcme Kopyalama<\/h4>\n<p>Olu\u015fturdu\u011funuz genel anahtar\u0131 (<code>id_rsa.pub<\/code>), y\u00f6netece\u011finiz her bir d\u00fc\u011f\u00fcme kopyalaman\u0131z gerekir. Bu i\u015flem i\u00e7in <code>ssh-copy-id<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ssh-copy-id ansible_user@managed_node_ip_address<\/code><\/pre>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, <code>managed_node_ip_address<\/code> adresindeki <code>ansible_user<\/code> kullan\u0131c\u0131s\u0131n\u0131n parolas\u0131 sorulacakt\u0131r. Do\u011fru parolay\u0131 girdikten sonra, genel anahtar\u0131n\u0131z y\u00f6netilen d\u00fc\u011f\u00fcmdeki <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131na eklenecektir. Bu ad\u0131mdan sonra, kontrol sunucusundan y\u00f6netilen d\u00fc\u011f\u00fcme parolas\u0131z SSH ba\u011flant\u0131s\u0131 kurabilmelisiniz.<\/p>\n<p>Alternatif olarak, manuel olarak da kopyalayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">cat ~\/.ssh\/id_rsa.pub | ssh ansible_user@managed_node_ip_address \"mkdir -p ~\/.ssh && chmod 700 ~\/.ssh && cat >> ~\/.ssh\/authorized_keys && chmod 600 ~\/.ssh\/authorized_keys\"<\/code><\/pre>\n<p>Bu komut da ayn\u0131 i\u015flevi g\u00f6r\u00fcr.<\/p>\n<h4>3. Ad\u0131m: Y\u00f6netilen D\u00fc\u011f\u00fcmde Python ve Sudo Yetkileri<\/h4>\n<p>*   <strong>Python:<\/strong> CentOS 7 varsay\u0131lan olarak Python 2.7 ile gelir ve bu Ansible i\u00e7in yeterlidir. Ek bir kurulum genellikle gerekmez. Ancak, Python 3 kullanmak isterseniz, y\u00f6netilen d\u00fc\u011f\u00fcmde Python 3&#8217;\u00fcn kurulu oldu\u011fundan ve inventory dosyas\u0131nda <code>ansible_python_interpreter<\/code> de\u011fi\u015fkeninin do\u011fru yola ayarland\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>Sudo Yetkileri:<\/strong> Ansible&#8217;\u0131n y\u00f6netilen d\u00fc\u011f\u00fcmlerde yetki gerektiren i\u015flemleri (paket kurulumu, servis y\u00f6netimi vb.) yapabilmesi i\u00e7in, Ansible&#8217;\u0131n ba\u011fland\u0131\u011f\u0131 kullan\u0131c\u0131n\u0131n <code>sudo<\/code> yetkisine sahip olmas\u0131 gerekir. Y\u00f6netilen d\u00fc\u011f\u00fcmde <code>ansible_user<\/code> kullan\u0131c\u0131s\u0131n\u0131n <code>sudoers<\/code> dosyas\u0131nda yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun. \u00d6rne\u011fin, parolas\u0131z sudo yetkisi vermek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\"># Y\u00f6netilen d\u00fc\u011f\u00fcmde root olarak veya sudo yetkisi olan bir kullan\u0131c\u0131 ile\n    sudo visudo<\/code><\/pre>\n<p>    Dosyan\u0131n sonuna a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin (kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 <code>ansible_user<\/code> ile de\u011fi\u015ftirin):<\/p>\n<pre><code class=\"language-\">ansible_user ALL=(ALL) NOPASSWD: ALL<\/code><\/pre>\n<p>    Bu, <code>ansible_user<\/code> kullan\u0131c\u0131s\u0131n\u0131n parola sormadan t\u00fcm komutlar\u0131 <code>sudo<\/code> ile \u00e7al\u0131\u015ft\u0131rmas\u0131na izin verir. G\u00fcvenlik nedenleriyle, \u00fcretim ortamlar\u0131nda daha k\u0131s\u0131tl\u0131 <code>sudo<\/code> yetkileri vermeniz \u00f6nerilir.<\/p>\n<h3>Temel Ansible Komutlar\u0131 ve Kullan\u0131m\u0131<\/h3>\n<p>Ansible ile iki ana y\u00f6ntemle otomasyon g\u00f6revleri ger\u00e7ekle\u015ftirebilirsiniz: ad-hoc komutlar ve playbook&#8217;lar.<\/p>\n<h4>1. Ad-hoc Komutlar (<code>ansible<\/code> komutu)<\/h4>\n<p>Ad-hoc komutlar, tek seferlik, h\u0131zl\u0131 g\u00f6revler veya basit sorgulamalar i\u00e7in kullan\u0131l\u0131r. Genellikle bir veya birka\u00e7 mod\u00fcl\u00fc do\u011frudan komut sat\u0131r\u0131ndan \u00e7al\u0131\u015ft\u0131rarak yap\u0131l\u0131r.<\/p>\n<p><strong>Genel Ad-hoc Komut Yap\u0131s\u0131:<\/strong><\/p>\n<pre><code class=\"language-bash\">ansible <host_veya_grup_ad\u0131> -m <mod\u00fcl_ad\u0131> -a \"<mod\u00fcl_arg\u00fcmanlar\u0131>\" [opsiyonlar]<\/code><\/pre>\n<p><strong>Yayg\u0131n Kullan\u0131lan Mod\u00fcller ve \u00d6rnekler:<\/strong><\/p>\n<p>*   <strong><code>ping<\/code> Mod\u00fcl\u00fc:<\/strong> Y\u00f6netilen d\u00fc\u011f\u00fcmlerle ba\u011flant\u0131y\u0131 test etmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">ansible all -m ping<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131:<\/p>\n<pre><code class=\"language-\">web1.example.com | SUCCESS => {\n        \"ansible_facts\": {\n            \"discovered_interpreter_python\": \"\/usr\/bin\/python\"\n        },\n        \"changed\": false,\n        \"ping\": \"pong\"\n    }<\/code><\/pre>\n<p>*   <strong><code>command<\/code> Mod\u00fcl\u00fc:<\/strong> Y\u00f6netilen d\u00fc\u011f\u00fcmde herhangi bir komutu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in.<\/p>\n<pre><code class=\"language-bash\">ansible webservers -m command -a \"uptime\"<\/code><\/pre>\n<p>    Bu, <code>webservers<\/code> grubundaki t\u00fcm sunucularda <code>uptime<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<p>*   <strong><code>shell<\/code> Mod\u00fcl\u00fc:<\/strong> <code>command<\/code> mod\u00fcl\u00fcnden daha geli\u015fmi\u015f \u00f6zellikler sunar, borulama (<code>|<\/code>), y\u00f6nlendirme (<code>><\/code>) gibi shell \u00f6zelliklerini kullanman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-bash\">ansible databases -m shell -a \"df -h | grep \/dev\/mapper\"<\/code><\/pre>\n<p>*   <strong><code>yum<\/code> Mod\u00fcl\u00fc (CentOS\/RHEL i\u00e7in):<\/strong> Paketleri y\u00f6netmek i\u00e7in.<\/p>\n<pre><code class=\"language-bash\"># Nginx paketini kurma\n    ansible webservers -m yum -a \"name=nginx state=present\" -b\n\n    # Nginx paketini kald\u0131rma\n    ansible webservers -m yum -a \"name=nginx state=absent\" -b\n\n    # T\u00fcm paketleri g\u00fcncelleme\n    ansible all -m yum -a \"name=* state=latest\" -b<\/code><\/pre>\n<p>    <code>-b<\/code> (veya <code>--become<\/code>) bayra\u011f\u0131, yetki y\u00fckseltme (sudo) kullan\u0131laca\u011f\u0131n\u0131 belirtir.<\/p>\n<p>*   <strong><code>service<\/code> Mod\u00fcl\u00fc:<\/strong> Servisleri ba\u015flatma, durdurma, yeniden ba\u015flatma.<\/p>\n<pre><code class=\"language-bash\"># Nginx servisini ba\u015flatma\n    ansible webservers -m service -a \"name=nginx state=started\" -b\n\n    # Nginx servisini yeniden ba\u015flatma\n    ansible webservers -m service -a \"name=nginx state=restarted\" -b\n\n    # Nginx servisini sistem ba\u015flang\u0131c\u0131nda etkinle\u015ftirme\n    ansible webservers -m service -a \"name=nginx enabled=yes\" -b<\/code><\/pre>\n<p>*   <strong><code>copy<\/code> Mod\u00fcl\u00fc:<\/strong> Kontrol sunucusundan y\u00f6netilen d\u00fc\u011f\u00fcme dosya kopyalama.<\/p>\n<pre><code class=\"language-bash\">ansible all -m copy -a \"src=\/etc\/ansible\/my_file.txt dest=\/tmp\/my_file.txt owner=ansible_user group=ansible_user mode=0644\"<\/code><\/pre>\n<p>*   <strong><code>file<\/code> Mod\u00fcl\u00fc:<\/strong> Dosya ve dizinlerin \u00f6zelliklerini y\u00f6netme (olu\u015fturma, silme, izinleri ayarlama).<\/p>\n<pre><code class=\"language-bash\"># Bir dizin olu\u015fturma\n    ansible all -m file -a \"path=\/opt\/my_app state=directory owner=ansible_user group=ansible_user mode=0755\"\n\n    # Bir dosyay\u0131 silme\n    ansible all -m file -a \"path=\/tmp\/old_file.txt state=absent\"<\/code><\/pre>\n<p>*   <strong><code>user<\/code> Mod\u00fcl\u00fc:<\/strong> Kullan\u0131c\u0131 hesaplar\u0131n\u0131 y\u00f6netme.<\/p>\n<pre><code class=\"language-bash\"># Yeni bir kullan\u0131c\u0131 olu\u015fturma\n    ansible all -m user -a \"name=devuser comment='Developer User' uid=1001 groups=wheel shell=\/bin\/bash state=present\" -b<\/code><\/pre>\n<p>*   <strong><code>group<\/code> Mod\u00fcl\u00fc:<\/strong> Grup hesaplar\u0131n\u0131 y\u00f6netme.<\/p>\n<pre><code class=\"language-bash\"># Yeni bir grup olu\u015fturma\n    ansible all -m group -a \"name=developers gid=1002 state=present\" -b<\/code><\/pre>\n<p><strong>Di\u011fer \u00d6nemli Ad-hoc Komut Opsiyonlar\u0131:<\/strong><\/p>\n<p>*   <code>-i <inventory_path><\/code>: \u00d6zel bir inventory dosyas\u0131 belirtmek i\u00e7in.<br \/>\n*   <code>-l <host_pattern><\/code>: Sadece belirli host&#8217;lar\u0131 veya gruplar\u0131 hedeflemek i\u00e7in.<br \/>\n*   <code>-K<\/code> (veya <code>--ask-become-pass<\/code>): Sudo parolas\u0131 sormak i\u00e7in.<br \/>\n*   <code>-k<\/code> (veya <code>--ask-pass<\/code>): SSH ba\u011flant\u0131 parolas\u0131 sormak i\u00e7in (SSH anahtar\u0131 kullanm\u0131yorsan\u0131z).<br \/>\n*   <code>-u <user><\/code>: Belirli bir kullan\u0131c\u0131 ile ba\u011flanmak i\u00e7in (<code>remote_user<\/code>&#8216;\u0131 ge\u00e7ersiz k\u0131lar).<br \/>\n*   <code>-v<\/code> (veya <code>--verbose<\/code>): Daha detayl\u0131 \u00e7\u0131kt\u0131 almak i\u00e7in.<\/p>\n<h4>2. Playbook&#8217;lar (<code>ansible-playbook<\/code> komutu)<\/h4>\n<p>Playbook&#8217;lar, Ansible&#8217;\u0131n g\u00fcc\u00fcn\u00fcn ve esnekli\u011finin kalbidir. Otomasyon g\u00f6revlerini tan\u0131mlayan, birden fazla g\u00f6revi ve ad\u0131m\u0131 s\u0131ral\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131ran YAML tabanl\u0131 dosyalard\u0131r. Playbook&#8217;lar ile karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131, uygulama da\u011f\u0131t\u0131mlar\u0131, yap\u0131land\u0131rma y\u00f6netimi ve s\u00fcrekli teslimat (CD) s\u00fcre\u00e7leri otomatize edilebilir.<\/p>\n<p><strong>Playbook Yap\u0131s\u0131:<\/strong><br \/>\nBir playbook, bir veya daha fazla &#8220;play&#8221; i\u00e7erir. Her play, belirli bir host grubunu hedefler ve bu host&#8217;lar \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lacak g\u00f6revleri (tasks) tan\u0131mlar.<\/p>\n<pre><code class=\"language-yaml\">---\n- name: Web sunucular\u0131n\u0131 yap\u0131land\u0131rma\n  hosts: webservers\n  become: yes # Bu play'deki g\u00f6revler sudo ile \u00e7al\u0131\u015ft\u0131r\u0131lacak\n  vars:\n    nginx_port: 80\n    doc_root: \/var\/www\/html\/my_app\n\n  tasks:\n    - name: Nginx paketini kur\n      yum:\n        name: nginx\n        state: present\n\n    - name: Nginx yap\u0131land\u0131rma dosyas\u0131n\u0131 kopyala\n      copy:\n        src: files\/nginx.conf.j2\n        dest: \/etc\/nginx\/nginx.conf\n        owner: root\n        group: root\n        mode: '0644'\n      notify: Restart Nginx\n\n    - name: Uygulama dizinini olu\u015ftur\n      file:\n        path: \"{{ doc_root }}\"\n        state: directory\n        owner: nginx\n        group: nginx\n        mode: '0755'\n\n    - name: Nginx servisini ba\u015flat ve etkinle\u015ftir\n      service:\n        name: nginx\n        state: started\n        enabled: yes\n\n  handlers: # G\u00f6revler taraf\u0131ndan tetiklenen eylemler\n    - name: Restart Nginx\n      service:\n        name: nginx\n        state: restarted<\/code><\/pre>\n<p><strong>Playbook A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<p>*   <code>---<\/code>: YAML dosyas\u0131n\u0131n ba\u015flang\u0131c\u0131n\u0131 belirtir.<br \/>\n*   <code>- name: ...<\/code>: Play&#8217;in veya g\u00f6revin a\u00e7\u0131klay\u0131c\u0131 ad\u0131.<br \/>\n*   <code>hosts: webservers<\/code>: Bu play&#8217;in <code>webservers<\/code> grubundaki host&#8217;lar \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir.<br \/>\n*   <code>become: yes<\/code>: Bu play i\u00e7indeki t\u00fcm g\u00f6revlerin <code>sudo<\/code> yetkisiyle \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>vars:<\/code>: Play&#8217;e \u00f6zel de\u011fi\u015fkenleri tan\u0131mlar.<br \/>\n*   <code>tasks:<\/code>: Bu play i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131lacak g\u00f6revlerin listesi. Her g\u00f6rev bir mod\u00fcl\u00fc \u00e7a\u011f\u0131r\u0131r ve arg\u00fcmanlar\u0131n\u0131 belirtir.<br \/>\n*   <code>notify: Restart Nginx<\/code>: <code>copy<\/code> g\u00f6revi de\u011fi\u015fti\u011finde (\u00f6rne\u011fin, <code>nginx.conf<\/code> dosyas\u0131 g\u00fcncellendi\u011finde), <code>handlers<\/code> b\u00f6l\u00fcm\u00fcndeki <code>Restart Nginx<\/code> handler&#8217;\u0131n\u0131 tetikler.<br \/>\n*   <code>handlers:<\/code>: Sadece bir g\u00f6rev taraf\u0131ndan <code>notify<\/code> edildi\u011finde \u00e7al\u0131\u015fan g\u00f6revler. Genellikle servis yeniden ba\u015flatmalar\u0131 gibi i\u015flemler i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p><strong>Playbook \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\nBir playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>ansible-playbook<\/code> komutunu kullan\u0131r\u0131z:<\/p>\n<pre><code class=\"language-bash\">ansible-playbook my_first_playbook.yml<\/code><\/pre>\n<p><strong>Yayg\u0131n <code>ansible-playbook<\/code> Opsiyonlar\u0131:<\/strong><\/p>\n<p>*   <code>-i <inventory_path><\/code>: \u00d6zel bir inventory dosyas\u0131 belirtmek i\u00e7in.<br \/>\n*   <code>--check<\/code> (veya <code>-C<\/code>): Playbook&#8217;u &#8220;kuru \u00e7al\u0131\u015fma&#8221; modunda \u00e7al\u0131\u015ft\u0131r\u0131r. Ger\u00e7ek de\u011fi\u015fiklik yapmaz, sadece nelerin de\u011fi\u015fece\u011fini raporlar.<br \/>\n*   <code>--diff<\/code>: Yap\u0131lan de\u011fi\u015fikliklerin ayr\u0131nt\u0131l\u0131 farklar\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <code>--syntax-check<\/code>: Playbook&#8217;un s\u00f6zdizimini kontrol eder.<br \/>\n*   <code>--list-hosts<\/code>: Playbook&#8217;un hangi host&#8217;lar \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131n\u0131 listeler.<br \/>\n*   <code>--limit <host_pattern><\/code>: Playbook&#8217;u sadece belirli host&#8217;lar veya gruplar \u00fczerinde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in.<br \/>\n*   <code>--tags <tag1,tag2><\/code>: Sadece belirli etiketlere sahip g\u00f6revleri \u00e7al\u0131\u015ft\u0131rmak i\u00e7in.<br \/>\n*   <code>--skip-tags <tag1,tag2><\/code>: Belirli etiketlere sahip g\u00f6revleri atlamak i\u00e7in.<br \/>\n*   <code>-e \"key=value\"<\/code>: Komut sat\u0131r\u0131ndan de\u011fi\u015fken tan\u0131mlamak veya mevcut de\u011fi\u015fkenleri ge\u00e7ersiz k\u0131lmak i\u00e7in.<\/p>\n<h3>Geli\u015fmi\u015f Ansible Konular\u0131 (K\u0131saca)<\/h3>\n<p>Ansible&#8217;\u0131n yetenekleri temel kurulum ve playbook&#8217;lar\u0131n \u00f6tesine ge\u00e7er. \u0130\u015fte baz\u0131 geli\u015fmi\u015f konulara k\u0131sa bir bak\u0131\u015f:<\/p>\n<p>*   <strong>Ansible Vault:<\/strong> Hassas verileri (parolalar, API anahtarlar\u0131 vb.) \u015fifrelemek ve y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Playbook&#8217;lar ve de\u011fi\u015fken dosyalar\u0131 i\u00e7inde \u015fifrelenmi\u015f verileri saklaman\u0131za olanak tan\u0131r.<br \/>\n*   <strong>Roller (Roles):<\/strong> Playbook&#8217;lar\u0131 daha mod\u00fcler, yeniden kullan\u0131labilir ve d\u00fczenli hale getirmek i\u00e7in kullan\u0131l\u0131r. Ortak g\u00f6rev setlerini, \u015fablonlar\u0131, de\u011fi\u015fkenleri ve handler&#8217;lar\u0131 belirli bir yap\u0131 alt\u0131nda grupland\u0131r\u0131r.<br \/>\n*   <strong>Dinamik Inventory:<\/strong> Bulut sa\u011flay\u0131c\u0131lar\u0131 (AWS, Azure, GCP), sanalla\u015ft\u0131rma platformlar\u0131 (VMware) veya CMDB sistemleri gibi harici kaynaklardan otomatik olarak inventory olu\u015fturmay\u0131 sa\u011flar.<br \/>\n*   <strong>Mod\u00fcller ve Eklentiler (Plugins):<\/strong> Ansible&#8217;\u0131n geni\u015fletilebilir yap\u0131s\u0131 sayesinde, \u00f6zel mod\u00fcller, ba\u011flant\u0131 eklentileri, lookup eklentileri gibi bile\u015fenler yazarak Ansible&#8217;\u0131n yeteneklerini kendi ihtiya\u00e7lar\u0131n\u0131za g\u00f6re geni\u015fletebilirsiniz.<br \/>\n*   <strong>\u015eablonlar (Templates &#8211; Jinja2):<\/strong> <code>template<\/code> mod\u00fcl\u00fc ve Jinja2 \u015fablon motoru kullan\u0131larak dinamik yap\u0131land\u0131rma dosyalar\u0131 olu\u015fturulur. De\u011fi\u015fkenler ve ko\u015fullu ifadelerle esnek dosya olu\u015fturma imkan\u0131 sunar.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Ansible kullan\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>SSH Ba\u011flant\u0131 Sorunlar\u0131 (<code>UNREACHABLE<\/code> veya <code>Authentication failed<\/code>):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Y\u00f6netilen d\u00fc\u011f\u00fcm\u00fcn IP adresini veya hostname&#8217;ini kontrol edin.<br \/>\n        *   SSH portunun (varsay\u0131lan 22) a\u00e7\u0131k oldu\u011fundan ve g\u00fcvenlik duvar\u0131 taraf\u0131ndan engellenmedi\u011finden emin olun.<br \/>\n        *   <code>ssh-copy-id<\/code> ile genel anahtar\u0131n do\u011fru kopyaland\u0131\u011f\u0131ndan emin olun.<br \/>\n        *   <code>ansible_user<\/code> kullan\u0131c\u0131s\u0131n\u0131n ad\u0131n\u0131n do\u011fru oldu\u011fundan emin olun.<br \/>\n        *   <code>ansible_ssh_private_key_file<\/code> yolunun do\u011fru oldu\u011fundan ve anahtar\u0131n izinlerinin (0600) do\u011fru oldu\u011fundan emin olun.<br \/>\n        *   <code>ssh -vvv ansible_user@managed_node_ip<\/code> komutuyla detayl\u0131 SSH hata ay\u0131klamas\u0131 yap\u0131n.<\/p>\n<p>*   <strong>Sudo Yetki Sorunlar\u0131 (<code>BECOME_ERROR<\/code> veya <code>Permission denied<\/code>):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   <code>ansible_user<\/code> kullan\u0131c\u0131s\u0131n\u0131n y\u00f6netilen d\u00fc\u011f\u00fcmde <code>sudo<\/code> yetkisine sahip oldu\u011fundan emin olun.<br \/>\n        *   <code>sudo visudo<\/code> ile <code>sudoers<\/code> dosyas\u0131n\u0131 kontrol edin ve kullan\u0131c\u0131n\u0131n do\u011fru \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan (\u00f6zellikle <code>NOPASSWD: ALL<\/code> veya k\u0131s\u0131tl\u0131 yetkiler) emin olun.<br \/>\n        *   Playbook veya ad-hoc komutlarda <code>become: yes<\/code> veya <code>-b<\/code> bayra\u011f\u0131n\u0131 kulland\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<p>*   <strong>Python Yorumlay\u0131c\u0131 Sorunlar\u0131 (<code>No such file or directory<\/code> for python interpreter):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Y\u00f6netilen d\u00fc\u011f\u00fcmde Python&#8217;\u0131n kurulu oldu\u011fundan emin olun.<br \/>\n        *   Inventory dosyas\u0131nda veya <code>ansible.cfg<\/code>&#8216;de <code>ansible_python_interpreter<\/code> de\u011fi\u015fkeninin do\u011fru Python yorumlay\u0131c\u0131 yolunu g\u00f6sterdi\u011finden emin olun (\u00f6rne\u011fin, <code>\/usr\/bin\/python<\/code> veya <code>\/usr\/bin\/python3<\/code>).<\/p>\n<p>*   <strong>Playbook S\u00f6zdizimi Hatalar\u0131 (YAML Parsing Errors):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   YAML, bo\u015fluklara (indentation) kar\u015f\u0131 \u00e7ok hassast\u0131r. Hatalar\u0131 genellikle bo\u015fluk veya sekme kullan\u0131m\u0131yla ilgilidir.<br \/>\n        *   YAML do\u011frulay\u0131c\u0131 ara\u00e7lar\u0131 (\u00f6rne\u011fin, online YAML validator&#8217;lar) kullan\u0131n.<br \/>\n        *   <code>ansible-playbook --syntax-check my_playbook.yml<\/code> komutuyla s\u00f6zdizimi kontrol\u00fc yap\u0131n.<\/p>\n<p>*   <strong>Mod\u00fcl Bulunamad\u0131 Hatalar\u0131:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Mod\u00fcl ad\u0131n\u0131 do\u011fru yazd\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n        *   Kulland\u0131\u011f\u0131n\u0131z Ansible s\u00fcr\u00fcm\u00fcnde o mod\u00fcl\u00fcn mevcut oldu\u011fundan emin olun.<br \/>\n        *   \u00d6zel bir mod\u00fcl kullan\u0131yorsan\u0131z, <code>ANSIBLE_LIBRARY<\/code> ortam de\u011fi\u015fkeni veya <code>ansible.cfg<\/code>&#8216;deki <code>module_utils_path<\/code> ile do\u011fru yolu belirtti\u011finizden emin olun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, CentOS 7 i\u015fletim sistemi \u00fczerine Ansible&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve temel yap\u0131land\u0131rmalar\u0131n\u0131 nas\u0131l yapaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. Ansible&#8217;\u0131n &#8220;agents\u0131z&#8221; mimarisi, SSH \u00fczerinden g\u00fcvenli ileti\u015fimi ve insan taraf\u0131ndan okunabilir YAML tabanl\u0131 playbook&#8217;lar\u0131 sayesinde, altyap\u0131 otomasyonunu basitle\u015ftiren g\u00fc\u00e7l\u00fc bir ara\u00e7 oldu\u011funu g\u00f6rd\u00fck.<\/p>\n<p>Kurulumdan sonra, <code>ansible.cfg<\/code> dosyas\u0131yla global ayarlar\u0131 yap\u0131land\u0131rd\u0131k ve Inventory dosyas\u0131yla y\u00f6netece\u011fimiz host&#8217;lar\u0131 gruplar halinde tan\u0131mlad\u0131k. Y\u00f6netilen d\u00fc\u011f\u00fcmlerin SSH anahtarlar\u0131 ve <code>sudo<\/code> yetkileriyle haz\u0131r hale getirilmesinin \u00f6nemini vurgulad\u0131k. Son olarak, ad-hoc komutlarla h\u0131zl\u0131 g\u00f6revleri nas\u0131l ger\u00e7ekle\u015ftirece\u011finizi ve playbook&#8217;larla karma\u015f\u0131k otomasyon i\u015f ak\u0131\u015flar\u0131n\u0131 nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 detayl\u0131 \u00f6rneklerle inceledik.<\/p>\n<p>Ansible, BT operasyonlar\u0131n\u0131zda verimlili\u011fi art\u0131rmak, tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak ve insan hatas\u0131n\u0131 minimize etmek i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bu rehberde edindi\u011finiz bilgilerle, kendi otomasyon yolculu\u011funuza g\u00fcvenle ba\u015flayabilir ve altyap\u0131 y\u00f6netiminizi bir sonraki seviyeye ta\u015f\u0131yabilirsiniz. Unutmay\u0131n, pratik yapmak ve farkl\u0131 senaryolar \u00fczerinde denemeler yapmak, Ansible ustal\u0131\u011f\u0131n\u0131z\u0131 geli\u015ftirmek i\u00e7in en iyi yoldur. \u0130leri d\u00fczey konular\u0131 (roller, vault, dinamik inventory) ke\u015ffetmeye devam ederek Ansible&#8217;\u0131n t\u00fcm potansiyelinden yararlanabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen BT d\u00fcnyas\u0131nda, sunucu v","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":[241],"tags":[],"class_list":{"0":"post-33782","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","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>CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - 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\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\" \/>\n<meta property=\"og:description\" content=\"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen BT d\u00fcnyas\u0131nda, sunucu v\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-06T21:40:45+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=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\",\"datePublished\":\"2025-11-06T21:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\"},\"wordCount\":2843,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\",\"name\":\"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-06T21:40:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\"}]},{\"@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":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - 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\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber","og_description":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen BT d\u00fcnyas\u0131nda, sunucu v","og_url":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-06T21:40:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber","datePublished":"2025-11-06T21:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/"},"wordCount":2843,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/","name":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-06T21:40:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/centos-7-uzerine-ansible-kurulumu-ve-yapilandirmasi-adim-adim-kapsamli-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CentOS 7 \u00dczerine Ansible Kurulumu ve Yap\u0131land\u0131rmas\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber"}]},{"@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\/33782","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=33782"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33782\/revisions"}],"predecessor-version":[{"id":33783,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33782\/revisions\/33783"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}