AWX Custom Execution Environment

Yağız Demirtaş
Turk Telekom Bulut Teknolojileri
5 min readJun 21, 2022

Merhaba, bu yazımızda AWX üzerinde Custom Execution Environment(EE) nedir, neden ihtiyacımız olur ve nasıl oluştururuz ondan bahsediyor olacağım.Yazı boyunca execution enviraonment yerine kısaca EE olarak kullanıyor olacağım.

Custom EE Nedir ?

Bildiğiniz üzere AWX artık bir kubernetes veya single node k3s, minikube cluster üzerinde koşmakta ve gerekli modulleri de bir EE(custom image) üzerinden çekmektedir. Awx ilk kurulumda zaten üzerinde varsayılan bir EE ile gelmektedir.

Bkz; https://quay.io/repository/ansible/awx-ee

Ancak varsayılan olarak gelen bu imaj üzerinde tüm moduller veya collection’lar yer almamaktadır. Örneğin; community.general collection default imaj içinde yer almadığı için o modulleri kullanmak istediğimizde hata ile karşılaşıyoruz.

Varsayılan olarak gelen bu imaj özelleştirilebilir ve istenilen moduller eklenerek tekrar yeni bir imaj oluşturularak kullanılabilir.

NOT: Tüm kurulum adımları Redhat’e subscribe bir rhel8.5 sunucu üzerinden Red Hat base imaj’ı kullanılarak yapılmıştır. Aynı adımlar Centos8 bir makina üzerinden herhangi bir base imaj kullanılarakta yapılabilir farklılıklardan adımlardan bahsederken anlatıyor olacağım.

Neler Gerekli ?

Rhel 8 veya Centos 8 server

Python3.8

Docker veya podman

Image Registry [ free quay.io account ]

Paket Kurulumları

Rhel 8 üzerinde podman varsayılan olarak geldiği için bu adımı geçiyorum ama Centos üzerinde çalışıyorsanız ilk olarak docker veya podman kurulumu gereklidir. Kurulum sonrası düzgün çalıştığı kontrol edilir.

Python3.8 kurulumu yapılır. Ben de kurulu olduğu için tekrar kurmuyorum. Python3.8 altındaki versiyonlarda çalışmadı ancak daha yeni versiyona sahipseniz muhtemelen çalışacaktır ancak burada python3.8 üzerinden devam ediyoruz.

Aşağıdaki gibi python set edilir ve kurulum doğrulanır.

Custom image build edebilmek için ansible builder yüklü olması gerekmektedir. Ben root yetkisinde pip3 ile kurulumu gerçekleştirdim ancak isterseniz virtual environment olusturup tüm bu adımları virtual env içinde de yapabilirsiniz. Ben root ile kuruluma devam ediyorum daha önce kurulu olduğu için herhangi bir paket kurmuyor.

Paket kurulumları tamamlandı şimdi custom EE oluşturmak için bir base image ihtiyacımız var. Ben kuruluma redhat’in base imajını kullanarak devam ediyorum.Bunun için registry.redhat.io login olmamız gerekiyor. Eğer bir redhat hesabınız yoksa ve başka bir base imaj ile kuruluma devam edecekseniz bu kısmı atlayabilirsiniz.

Podman veya docker ile base imajımızı artık pull edebiliriz. İmajı daha önce pull ettiğim için mevcutta yer alan katmanları otomatik olarak geçti sizde işlem biraz zaman alacaktır.

Görüldüğü üzere podman images ile imajları listeleyip kontrol sağlayabiliriz. Ben burada redhat’in minimal base imajını tercih ettim ki custom imajımızın boyutu hem çok büyük olmasın hem de ihtiyacımız olmayan moduller yer kaplamamış olsun.

Artık kendi imajımızı oluşturabilecek duruma geldik ancak devam etmeden önce birkaç bilgi vermek istiyorum. Host makinemde “yum repolist” ile repoları listeliyorum. Eğer ben “podman run — rm -it — entrypoint bash registry.redhat.io/ansible-automation-platform-20-early-access/ee-minimal-rhel8” ile base imaj’da shell alır ve “microndf repolist” ile repoları listelersem imaj repoları dışında sarı ile işaretlediğim repolarda görünecektir. Host makine eğer redhat subscribe değilse sadece base repolar listelenecektir.Eğer Centos veya subscribe olmayan bir sunucuda bu imajı kullanıyor olursak ve base repo’da yer almayan bir paket kurmak istediğimizde problem yaşayabiliriz.

Base imaj oluşturmadan önce son olarakta imaj içerisinde herhangi bir collection var mı onu kontrol edelim. Görüldüğü üzere minimal imaj olduğu için içerisinde şu an herhangi bir collection bulunmuyor. Collections’lar varsayılan olarak “/usr/share/ansible/collections” altında yer alıyor.

Artık build edeceğimiz imajı hazırlayabiliriz. Kullanım syntax’ı görüldüğü şekildedir. “_build” klasörü içinde “bindep.txt” system bağımlılıkları “requirements.yml” içinde ise kullanmak istediğimiz collections’lar yer alıyor. Bu örnekte mevcut değil ancak eğer python bağımlılıkları da mevcut ise bu klasör içinde “requirements.txt” oluşturup eklememiz gerekirdi.

“Execution-environment.yml” içerisinde belirttiğim gibi eğer python gereksinimlerimiz olsaydı “requirements.txt” eklememiz gerekirdi. Bu örnek özelinde ihtiyacımız olmadığı için yorum olarak bırakıyorum. Ek olarak diğer yorum satırlarında da “additional_build_steps” içerisine “append” ve “prepend” komutlarını kullanarak istediğimiz gibi özelleştirebiliriz. “append” main build sonrası “prepend” ise main build öncesi çalışacaktır. Bu örneğimizde ihityacımız olmadığı için yorum olarak ilerliyoruz. “EE_BASE_IMAGE” olarak daha önce pull ettiğimiz base imajı kullanıyoruz.

requirements.yml” ve “bindep.txt” dosyalarımızın içeriği aşağıdaki şekildedir.

Aşağıdaki komutla imajımızı build edebiliriz. Komutun sonunda “-v 3” parametresi ekleyerek isterseniz verbosity artırabilirsiniz.

“ansible-builder build — tag yagiz/awx_custom_ee — container-runtime podman -f execution-environment.yml”

Build ettiğimiz imajı listeleyelim.

Artık “podman push quay.io/username/reponame” komutu ile kendi imaj reponuza push’layabilirsiniz.

Son olarak oluşturduğumuz imaj içerisine girip collections’larımızı listeleyelim. Gördüğünüz gibi “requirements.yml” içerisine yazdığımız collections’lar listelenmenktedir.

Artık Awx’e giriş yapıp “Administration>Execution Environments” adımlarını izleyerek quay.io’ya push ettiğiniz imajı kullanabilirsiniz.

Bu makalemde sizelere AWX üzerinde kullanmak için custom execution environment nasıl oluşturulur ondan bahsetmeye çalıştım. Umarım faydalı olmuştur.

--

--