stone-payments.mongodb
stone-payments.mongodb
Ansible角色,用于管理独立设置或副本集中的MongoDB。
支持的系统
为了节省开发精力,我们决定支持的操作系统需要满足以下条件:
- 当前由操作系统制造商支持(即不在生命周期结束(EOL)中);
- 当前由MongoDB.org支持(这一要求可能很快会取消);
- 基于systemd;
- 拥有足够广泛的用户基础。
因此,当前支持的系统列表为:
- 企业Linux(包括CentOS和RHEL)
- 7.3
- 7.4
- 7.5
- Ubuntu
- 16.04
如满足要求,可根据请求添加更多发行版。
用法
快速开始
设置一个基本的、无密码、仅限回环的独立MongoDB设置不需要任何变量。只需在播放中包含它:
- name: 安装mongodb
hosts: all
roles: stone-payments.mongodb
副本集设置
为了建立一个副本集,您需要通知主节点它是主节点,以及连接到哪个主节点的副本。您可以使用以下内容完成所有操作:
- name: 安装mongodb副本集
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_conf_bindIp: "0.0.0.0"
mongodb_replSet_enabled: true
mongodb_replSet_name: "someReplicaSetName"
mongodb_replSet_master: "1.2.3.4" #必须是IP地址
mongodb_replSet_key: "someLongKey" #可选,跨副本认证密钥
mongodb_replSet_member: "{{ ansible_eth1['ipv4']['address'] }}" #可选,指定不同的接口进行复制
mongodb_replSet_arbiter: "{{ true if inventory_hostname == 'hostThatIsArbiter' else false }}"
认证
您可以通过以下方式启用认证并创建一个管理员账户:
- name: 安装带认证的mongodb
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_conf_auth: true
mongodb_admin_user: "admin"
mongodb_admin_password: "somePassword"
日志记录
您可以通过提供mongodb_conf_logging
字典来设置任何systemLog选项:
- name: 安装带网络调试日志的mongodb
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_conf_logging:
verbosity: 0
component:
network:
verbosity: 5
destination: file
path: /var/log/mongodb/mongod.log
防火墙
此规则将配置ufw或firewalld以默认启用传入连接。您可以使用以下选项自定义它(这些选项特定于您正在使用的防火墙解决方案):
- name: 安装带自定义防火墙设置的mongodb
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_firewall_zone: "public" #仅适用于firewalld
mongodb_firewall_interface: "eth0" #仅适用于ufw
mongodb_firewall_source: "192.168.0.0/24" #仅适用于ufw
您还可以通过设置mongodb_install_firewall: false
来抑制防火墙配置。
Linux安全模块
此角色默认将配置LSM(当前仅支持SELinux)。您可以通过设置:
mongodb_install_lsm: false
来禁用此功能。
其他配置
我相信几乎所有其他配置都是自解释的或直接与MongoDB核心功能相关。只需覆盖defaults/main.yml
中的配置,它们会(希望)应用到您的系统上。
测试
此角色使用分子在Docker上实现了大多数单元测试。请注意,我们仅支持Molecule 2.0或更高版本。一些测试在Vagrant和VirtualBox上实现,以便测试需要完整虚拟机的方面。然而,对于需要Vagrant的测试,由于没有公开的支持嵌套虚拟化的CI,因此没有CI集成。
以下场景可用:
场景名称 | 驱动程序 | 描述 |
---|---|---|
default |
docker | 基本角色完整性测试 |
replica-set |
docker | 副本集中的混合发行版设置 |
security |
vagrant | 完整虚拟机以测试LSM和防火墙配置 |
Docker环境设置
您可以使用以下命令在虚拟环境中安装Molecule和Docker交互库。请注意,虚拟环境内部和外部都需要docker-py:
sudo pip install docker-py
virtualenv .venv
.venv/bin/activate
pip install molecule docker-py
Docker的安装和配置超出本讨论范围。
如果您有SELinux启用的主机,您还必须安装libselinux-python库。在将任务委派给localhost时,Molecule剧本中会有特殊的附加内容,以使用主机的python解释器,而不是虚拟环境中的python,以便正确访问SELinux绑定。您可以通过以下方式在Fedora和CentOS上安装此软件包:
sudo yum install python2-libselinux
Vagrant环境设置
您可以使用以下命令在虚拟环境中安装Molecule:
virtualenv .venv
.venv/bin/activate
pip install molecule
Vagrant和VirtualBox的安装和配置超出本讨论范围。
运行测试
在虚拟环境中设置好Molecule后,您可以使用以下命令运行测试:
molecule converge [-s scenario_name]
其中scenario_name
是molecule
下的一个测试用例名称。如果没有传递参数,将运行默认测试用例。
贡献
请随时提交PR。我们欢迎PR!
待办事项
以下是您可以做的一些建议:
- 支持使用发行版打包的MongoDB。
- 使用serverspec或testinfra编写更多独立测试。
- 改进副本集的测试用例。
许可证
此角色在MIT许可证下分发。