From 992887508df369a7b33b9d4f7a9ef9cfce2870b4 Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: Jun 22 2022 15:24:18 +0000 Subject: Add a Vagrant configuration to make development easier Signed-off-by: Aurélien Bompard --- diff --git a/.gitignore b/.gitignore index f9bf81c..a12226d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ MANIFEST *.pyo cscope.out ui/cache/ +.vagrant diff --git a/README.md b/README.md index c35e659..6597801 100644 --- a/README.md +++ b/README.md @@ -163,3 +163,20 @@ ALSO NOTE: If your application is already SAML aware you can simply run the install script with the --saml-no-httpd option. This will generate the certificates and the metadata.xml file you need to provide to the application and the IdP in the current directory. + + +Development with Vagrant +======================== + +A Vagrant setup is available if you prefer developing on Vagrant VMs. You'll +need the following packages: +- vagrant +- vagrant-libvirt +- vagrant-hostmanager +- vagrant-sshfs + +Then just run `vagrant up` and it will build a FreeIPA VM and an Ipsilon VM +for you. The Ipsilon VM comes with the +[test-auth](https://github.com/abompard/test-auth) application to test +authentication methods. Open your browser to http://ipsilon.test/ and you +should see the links. diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..758a662 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,48 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +ENV['VAGRANT_NO_PARALLEL'] = 'yes' + +Vagrant.configure(2) do |config| + config.hostmanager.enabled = true + config.hostmanager.manage_host = true + config.hostmanager.manage_guest = true + + config.vm.define "freeipa" do |freeipa| + freeipa.vm.box_url = "https://download.fedoraproject.org/pub/fedora/linux/releases/36/Cloud/x86_64/images/Fedora-Cloud-Base-Vagrant-36-1.5.x86_64.vagrant-libvirt.box" + freeipa.vm.box = "f36-cloud-libvirt" + freeipa.vm.hostname = "ipa.ipsilon.test" + freeipa.hostmanager.aliases = ("kerberos.ipsilon.test") + + freeipa.vm.synced_folder ".", "/vagrant", disabled: true + + freeipa.vm.provider :libvirt do |libvirt| + libvirt.cpus = 2 + libvirt.memory = 2048 + end + + freeipa.vm.provision "ansible" do |ansible| + ansible.playbook = "devel/ansible/freeipa.yml" + end + end + + config.vm.define "ipsilon" do |ipsilon| + ipsilon.vm.box_url = "https://download.fedoraproject.org/pub/fedora/linux/releases/36/Cloud/x86_64/images/Fedora-Cloud-Base-Vagrant-36-1.5.x86_64.vagrant-libvirt.box" + ipsilon.vm.box = "f36-cloud-libvirt" + ipsilon.vm.hostname = "ipsilon.test" + + ipsilon.vm.synced_folder ".", "/vagrant", disabled: true + ipsilon.vm.synced_folder ".", "/home/vagrant/ipsilon", type: "sshfs" # , rsync__exclude: ['./testdir*'] + + ipsilon.vm.provider :libvirt do |libvirt| + libvirt.cpus = 2 + libvirt.memory = 1024 + end + + ipsilon.vm.provision "ansible" do |ansible| + ansible.playbook = "devel/ansible/playbook.yml" + ansible.verbose = true + end + end + +end diff --git a/devel/ansible/freeipa.yml b/devel/ansible/freeipa.yml new file mode 100644 index 0000000..e7b60bb --- /dev/null +++ b/devel/ansible/freeipa.yml @@ -0,0 +1,9 @@ +--- +- hosts: freeipa + become: true + become_method: sudo + vars_files: + - vars.yml + roles: + - freeipa-server + diff --git a/devel/ansible/handlers.yml b/devel/ansible/handlers.yml new file mode 100644 index 0000000..9a9c187 --- /dev/null +++ b/devel/ansible/handlers.yml @@ -0,0 +1,5 @@ +- name: restart httpd + systemd: + state: restarted + name: httpd + diff --git a/devel/ansible/playbook.yml b/devel/ansible/playbook.yml new file mode 100644 index 0000000..370715d --- /dev/null +++ b/devel/ansible/playbook.yml @@ -0,0 +1,29 @@ +--- +- hosts: all + become: true + become_method: sudo + vars_files: + - vars.yml + handlers: + - import_tasks: handlers.yml + pre_tasks: + - name: Determine Python version + command: + argv: + - python3 + - -c + - from sys import version_info as vi; print(f'{vi[0]}.{vi[1]}') + register: _python3_version_result + changed_when: False + - name: Set Python version fact + set_fact: + py3ver: "{{ _python3_version_result.stdout | trim }}" + roles: + - freeipa-client + - dev + - test-auth + - role: oidc-register + vars: + ipsilon_url: https://ipsilon.test/idp + redirect_path: test-auth/oidc/oidc_callback + output_file: /home/vagrant/test-auth.client_secrets.json diff --git a/devel/ansible/roles/dev/defaults/main.yml b/devel/ansible/roles/dev/defaults/main.yml new file mode 100644 index 0000000..a78378b --- /dev/null +++ b/devel/ansible/roles/dev/defaults/main.yml @@ -0,0 +1 @@ +ipa_realm: "{{ ipa_domain | upper }}" diff --git a/devel/ansible/roles/dev/files/bashrc b/devel/ansible/roles/dev/files/bashrc new file mode 100644 index 0000000..dd54e9c --- /dev/null +++ b/devel/ansible/roles/dev/files/bashrc @@ -0,0 +1,11 @@ +# .bashrc + +export PATH=$PATH:/home/vagrant/.local/bin + +alias spammish-start="sudo systemctl start spammish.service && echo 'Spammish Accounts is running on http://spammish.test:5000'" +alias spammish-unit-tests="poetry run pytest -vv --cov spammish/ --cov-report term-missing" +alias spammish-logs="sudo journalctl -u spammish.service" +alias spammish-restart="sudo systemctl restart spammish.service && echo 'Spammish Accounts is running on http://spammish.test:5000'" +alias spammish-stop="sudo systemctl stop spammish.service && echo 'Spammish Accounts service stopped'" + +cd "ipsilon" diff --git a/devel/ansible/roles/dev/files/httpd-tmpfs.te b/devel/ansible/roles/dev/files/httpd-tmpfs.te new file mode 100644 index 0000000..8d0f854 --- /dev/null +++ b/devel/ansible/roles/dev/files/httpd-tmpfs.te @@ -0,0 +1,11 @@ + +module httpd-tmpfs 1.0; + +require { + type httpd_tmpfs_t; + type httpd_t; + class file execute; +} + +#============= httpd_t ============== +allow httpd_t httpd_tmpfs_t:file execute; diff --git a/devel/ansible/roles/dev/files/index.html b/devel/ansible/roles/dev/files/index.html new file mode 100644 index 0000000..9c62960 --- /dev/null +++ b/devel/ansible/roles/dev/files/index.html @@ -0,0 +1,8 @@ + + +