Improve support for Fedora AMIs (#429)

* Make default/example AMI for EC2 use a recent Fedora 35 image (and update default user to match)
* Conditionally use epel-release when using CentOS, but not when using non-CentOS
* Enable socks proxy port in example config by default (uncomment) for convenience
* Change filesystem formatting to ext4 instead of ext3 (just to use the most recent ext version)
* Make python tests less sensitive to config file defaults changes without losing coverage
diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml
index c0eb250..b844f63 100644
--- a/ansible/roles/common/tasks/main.yml
+++ b/ansible/roles/common/tasks/main.yml
@@ -21,10 +21,12 @@
   retries: 10
   delay: 15
   until: epelresult is not failed
+  when: ansible_facts['distribution'] == "CentOS"
 - name: "install packages"
   yum:
     name:
       - vim
+      - bash-completion
       - git
       - wget
       - gcc-c++
@@ -47,7 +49,7 @@
   retries: 10
   delay: 15
   until: yumresult_centos7 is not failed
-  when: ansible_facts['distribution_major_version'] == "7"
+  when: (ansible_facts['distribution'] == "CentOS") and (ansible_facts['distribution_major_version'] == "7")
 - name: "Install packages specific to CentOS 8"
   yum:
     name:
@@ -60,7 +62,20 @@
   retries: 10
   delay: 15
   until: yumresult_centos8 is not failed
-  when: ansible_facts['distribution_major_version'] == "8"
+  when: (ansible_facts['distribution'] == "CentOS") and (ansible_facts['distribution_major_version'] == "8")
+- name: "Install packages specific to Fedora"
+  yum:
+    name:
+      - python3-policycoreutils
+      - collectd-disk
+      - collectd-write_http
+      - make
+    state: present
+  register: yumresult_fedora
+  retries: 10
+  delay: 15
+  until: yumresult_fedora is not failed
+  when: ansible_facts['distribution'] == "Fedora"
 - name: "get exact jdk folder path"
   find:
     file_type: directory
diff --git a/ansible/scripts/install_ansible.sh b/ansible/scripts/install_ansible.sh
index 5a4eb35..2286dfc 100755
--- a/ansible/scripts/install_ansible.sh
+++ b/ansible/scripts/install_ansible.sh
@@ -23,9 +23,12 @@
 set -e
 
 # enable yum epel repo
-is_installed_epel_release="rpm -q --quiet epel-release"
-install_epel_release="sudo yum install -q -y epel-release"
-for i in {1..10}; do ($is_installed_epel_release || $install_epel_release) && break || sleep 15; done
+os_id=$(grep '^ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"')
+if [[ $os_id = "centos" ]]; then
+  is_installed_epel_release="rpm -q --quiet epel-release"
+  install_epel_release="sudo yum install -q -y epel-release"
+  for i in {1..10}; do ($is_installed_epel_release || $install_epel_release) && break || sleep 15; done
+fi
 
 # install ansible
 is_installed_ansible="rpm -q --quiet ansible"
@@ -33,25 +36,29 @@
 for i in {1..10}; do ($is_installed_ansible || $install_ansible) && break || sleep 15; done
 
 # setup user-specific ansible configuration
-if [ ! -h ~/.ansible.cfg ]; then
+if [[ ! -h ~/.ansible.cfg ]]; then
   cd ~/
   rm -f .ansible.cfg
   ln -s $base_dir/conf/ansible.cfg .ansible.cfg
 fi
 
 # setup ansible hosts
-if [ ! -h /etc/ansible/hosts ]; then
+if [[ ! -h /etc/ansible/hosts ]]; then
   cd /etc/ansible
   sudo rm -f hosts
   sudo ln -s $base_dir/conf/hosts hosts
 fi
 
 # install lxml as it is a dependency for the maven_artifact Ansible module
-centos_version=`cat /etc/os-release | grep '^VERSION_ID' | cut -d'"' -f2`
-if [ $centos_version -eq 7 ]; then
-   sudo yum install -q -y python-lxml
-elif [ $centos_version -eq 8 ]; then
-   sudo yum install -q -y python3-lxml
+centos_version=$(grep '^VERSION_ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"')
+if [[ $os_id = "centos" ]]; then
+  if [[ $centos_version -eq 7 ]]; then
+     sudo yum install -q -y python-lxml
+  elif [[ $centos_version -eq 8 ]]; then
+     sudo yum install -q -y python3-lxml
+  fi
+elif [[ $os_id = "fedora" ]]; then
+  sudo yum install -q -y python3-lxml
 fi
 
 # install jq to ease JSON parsing on the proxy
diff --git a/conf/muchos.props.example b/conf/muchos.props.example
index ccdbbd9..5f8f5be 100644
--- a/conf/muchos.props.example
+++ b/conf/muchos.props.example
@@ -18,7 +18,7 @@
 cluster_type = ec2
 # Cluster user name (install command will SSH to cluster using this user)
 # Leave default below if launching cluster in AWS
-cluster_user = centos
+cluster_user = fedora
 # Cluster user group
 cluster_group = %(cluster_user)s
 # Cluster user home directory
@@ -30,7 +30,7 @@
 # from your machine. Hostname can be chosen from "nodes" section below.
 proxy_hostname = leader1
 # If set, a SOCKS proxy will be created on the specified port when connecting to proxy using 'muchos ssh <cluster>'
-#proxy_socks_port = 38585
+proxy_socks_port = 38585
 # Accumulo Instance name
 accumulo_instance = muchos
 # Accumulo Password
@@ -66,11 +66,9 @@
 logstash_version = 7.10.2
 
 [ec2]
-# AWS machine image to use. The default below is for a CentOS 7 image (in us-east-1).
+# AWS machine image to use. The default below is for a Fedora image (in us-east-1).
 # You may need to change this value if a new image has been released or you are running in a different region.
-# Before using this AMI, subscribe to it on the CentOS product page below or launching will fail:
-#   https://aws.amazon.com/marketplace/pp/B00O7WM7QW
-aws_ami = ami-0affd4508a5d2481b
+aws_ami = ami-08b4ee602f76bff79
 # Type of AWS instance launched by default
 default_instance_type = m5d.large
 # Type of AWS instance launched for any node running 'worker' service
@@ -91,7 +89,7 @@
 # Name below should be your 'Key pair name' in EC2 and not name of your public key file.
 key_name = my_aws_key
 # Type of filesystem to format instance storage as.
-fstype = ext3
+fstype = ext4
 # Force formatting of instance devices, even when it has an existing filesystem.
 force_format = no
 # Tags to add instances
diff --git a/lib/tests/azure/test_config.py b/lib/tests/azure/test_config.py
index 0ffa340..cb4ee10 100644
--- a/lib/tests/azure/test_config.py
+++ b/lib/tests/azure/test_config.py
@@ -44,7 +44,7 @@
     )
     assert c.get("azure", "vm_sku") == "Standard_D8s_v3"
     assert c.get("azure", "data_disk_sku") == "Standard_LRS"
-    assert c.user_home() == "/home/centos"
+    assert c.user_home() == "/home/" + c.get("general", "cluster_user")
     assert c.mount_root() == "/var/data"
     assert c.use_multiple_vmss() is False
     assert c.worker_data_dirs() == ["/var/data1", "/var/data2", "/var/data3"]
@@ -106,8 +106,9 @@
     assert c.get("general", "proxy_hostname") == "leader1"
     assert c.proxy_public_ip() == "23.0.0.0"
     assert c.proxy_private_ip() == "10.0.0.0"
-    assert c.get("general", "cluster_user") == "centos"
-    assert c.get("general", "cluster_group") == "centos"
+    assert c.get("general", "cluster_user") == (
+            c.get("general", "cluster_group")
+    )
     assert c.get_non_proxy() == [
         ("10.0.0.1", "leader2"),
         ("10.0.0.2", "worker1"),
diff --git a/lib/tests/ec2/test_config.py b/lib/tests/ec2/test_config.py
index b41c9da..95ffbeb 100644
--- a/lib/tests/ec2/test_config.py
+++ b/lib/tests/ec2/test_config.py
@@ -38,11 +38,11 @@
     )
     assert c.get("ec2", "default_instance_type") == "m5d.large"
     assert c.get("ec2", "worker_instance_type") == "m5d.large"
-    assert c.get("ec2", "aws_ami") == "ami-0affd4508a5d2481b"
-    assert c.user_home() == "/home/centos"
+    assert c.get("ec2", "aws_ami").startswith("ami-")
+    assert c.user_home() == "/home/" + c.get("general", "cluster_user")
     assert c.max_ephemeral() == 1
     assert c.mount_root() == "/media/ephemeral"
-    assert c.fstype() == "ext3"
+    assert c.fstype() == "ext4"
     assert c.force_format() == "no"
     assert c.worker_data_dirs() == ["/media/ephemeral0"]
     assert c.default_data_dirs() == ["/media/ephemeral0"]
@@ -110,8 +110,9 @@
     assert c.get("general", "proxy_hostname") == "leader1"
     assert c.proxy_public_ip() == "23.0.0.0"
     assert c.proxy_private_ip() == "10.0.0.0"
-    assert c.get("general", "cluster_user") == "centos"
-    assert c.get("general", "cluster_group") == "centos"
+    assert c.get("general", "cluster_user") == (
+            c.get("general", "cluster_group")
+    )
     assert c.get_non_proxy() == [
         ("10.0.0.1", "leader2"),
         ("10.0.0.2", "worker1"),