{"id":50385247,"url":"https://github.com/stackhpc/ansible-role-beegfs","last_synced_at":"2026-05-30T14:31:13.548Z","repository":{"id":45646678,"uuid":"141720277","full_name":"stackhpc/ansible-role-beegfs","owner":"stackhpc","description":"Create beegfs server and client","archived":false,"fork":false,"pushed_at":"2021-12-02T22:11:48.000Z","size":134,"stargazers_count":18,"open_issues_count":9,"forks_count":12,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-04-14T22:50:16.817Z","etag":null,"topics":["ansible","beegfs","hpc"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stackhpc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-20T14:13:33.000Z","updated_at":"2024-03-22T04:37:42.000Z","dependencies_parsed_at":"2022-09-16T09:02:14.191Z","dependency_job_id":null,"html_url":"https://github.com/stackhpc/ansible-role-beegfs","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/stackhpc/ansible-role-beegfs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-role-beegfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-role-beegfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-role-beegfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-role-beegfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackhpc","download_url":"https://codeload.github.com/stackhpc/ansible-role-beegfs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-role-beegfs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33696681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","beegfs","hpc"],"created_at":"2026-05-30T14:31:12.829Z","updated_at":"2026-05-30T14:31:13.542Z","avatar_url":"https://github.com/stackhpc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.com/stackhpc/ansible-role-beegfs.svg?branch=master)](https://travis-ci.com/stackhpc/ansible-role-beegfs)\n\n# stackhpc.beegfs\n\nThis Ansible role can be used to create and destroy a BeegFS cluster. In\nsummary, BeegFS is a parallel file system that spreads user data across\nmultiple servers. It is designed to be scalable both in terms of\nperformance and capacity. Learn more about BeeFS [here](www.beegfs.io).\n\nThe role was last tested using Ansible version 2.5.0.\n\n## Example\n\nSay we have an inventory that looks like this (`inventory-beegfs`):\n\n    [leader]\n    bgfs1 ansible_host=172.16.1.1 ansible_user=centos\n\n    [follower]\n    bgfs2 ansible_host=172.16.1.2 ansible_user=centos\n\n    [cluster:children]\n    leader\n    follower\n\n    [cluster_beegfs_mgmt:children]\n    leader\n\n    [cluster_beegfs_mds:children]\n    leader\n\n    [cluster_beegfs_oss:children]\n    leader\n    follower\n\n    [cluster_beegfs_client:children]\n    leader\n    follower\n\nAnd a corresponding playbook as this (`beegfs.yml`):\n\n    ---\n    - hosts:\n      - cluster_beegfs_mgmt\n      - cluster_beegfs_mds\n      - cluster_beegfs_oss\n      - cluster_beegfs_client \n      roles:\n      - role: stackhpc.beegfs\n        beegfs_enable:\n          admon: false\n          mgmt: \"{{ inventory_hostname in groups['cluster_beegfs_mgmt'] }}\"\n          meta: \"{{ inventory_hostname in groups['cluster_beegfs_mds'] }}\"\n          oss: \"{{ inventory_hostname in groups['cluster_beegfs_oss'] }}\"\n          tuning: \"{{ inventory_hostname in groups['cluster_beegfs_oss'] }}\"\n          client: \"{{ inventory_hostname in groups['cluster_beegfs_client'] }}\"\n        beegfs_oss:\n        - dev: \"/dev/sdb\"\n          port: 8003\n        - dev: \"/dev/sdc\"\n          port: 8103\n        - dev: \"/dev/sdd\"\n          port: 8203\n        beegfs_mgmt_host: \"{{ groups['cluster_beegfs_mgmt'] | first }}\"\n        beegfs_client:\n        - path: \"/mnt/beegfs\"\n          port: 8004\n        beegfs_fstype: \"xfs\"\n        beegfs_force_format: false\n        beegfs_interfaces: [\"ib0\"]\n        beegfs_rdma: true\n        beegfs_state: present\n    ...\n\nTo create a cluster:\n\n    # ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=present\n\nTo destroy a cluster:\n\n    # ansible-playbook beegfs.yml -i inventory-beegfs -e beegfs_state=absent\n\n## Notes\n\nEnabling various BeegFS services is as simple as configuring toggles\nunder `beegfs_enable` to `true` or `false` where:\n\n- `mgmt`: Management server - minimum one host\n- `mds`: Metadata storage server nodes\n- `oss`: Object storage server nodes\n- `client`: Clients of the BeeGFS storage cluster\n- `admon`: NOT IMPLEMENTED\n\nThis role is dependent upon each node's hostname resolving to the IP address\nused to reach the management host, as configured via `beegfs_host_mgmt`. In\nthis case, `bgsf1` and `bgfs2` must resolve to `172.16.1.1` and `172.16.1.2`\nrespectively. This may be done via DNS or `/etc/hosts`.\n\nIt is important to note that when provisioning the cluster, if the block\ndevices specified already have a file system specified, or the disk is not\nempty, it is important to force format the disk. This can be set my setting\n`beegfs_force_format` to `true`. THIS WILL DELETE THE CONTENT OF THE DISK(S).\nMake sure you have made backups if you care about their content.\n\nPartitions are supported but they must already have been created through\nanother means. Additionally, you will also need override the variable\n`beegfs_oss_tunable` with a list of parent block devices since partitions do\nnot live under `/sys/block/`. For example, to create partitions using an\nAnsible module called `parted` (works on Ansible version 2.5+), you can run the\nfollowing playbook:\n\n    ---\n    - hosts:\n      - cluster_beegfs_oss\n      vars:\n        partitions:\n        - dev: /dev/sdb\n          start: 0%\n          end: 50%\n          number: 1\n        - dev: /dev/sdb\n          start: 50%\n          end: 100%\n          number: 2\n      tasks:\n      - name: Create partitions\n        parted:\n          label: gpt\n          state: present\n          part_type: primary\n          device: \"{{ item.dev }}\"\n          part_start: \"{{ item.start }}\"\n          part_end: \"{{ item.end }}\"\n          number: \"{{ item.number }}\"\n        with_items: \"{{ partitions }}\"\n        become: true\n    ...\n\n## Tests\n\nSome tests are provided in [molecule folder](molecule). To run them locally you need:\n\n- [Vagrant](https://www.vagrantup.com/)\n- [VirtualBox](https://www.virtualbox.org/wiki/Downloads)\n- [Molecule](https://molecule.readthedocs.io/en/latest/)\n- [python-vagrant](https://pypi.org/project/python-vagrant/)\n\nOnce you have all the dependencies installed you can run the tests from the root folder of the role:\n\n```\n$\u003e molecule lint\n$\u003e molecule test\n$\u003e molecule test -s vagrant-ubuntu-16.04\n$\u003e molecule test -s vagrant-ubuntu-18.04\n```\n\n- The default molecule scenario will test the role in a Centos7.5 machine.\n- All the tests will deploy all the services in a single machine.\n- yaml lint and ansible lint are tested\n- idempotence is checked\n- Once the execution finishes some [testinfra](https://testinfra.readthedocs.io/en/latest/) are\nexecuted. All the scenarios use the same tests located in [molecule/tests](molecule/tests)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackhpc%2Fansible-role-beegfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackhpc%2Fansible-role-beegfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackhpc%2Fansible-role-beegfs/lists"}