生物信息团队一般都有个集群,集群的管理无论是安装移除软件、修改配置或者更新等等,不能人手动一个一个节点操作,第一浪费时间第二怕不一致。Ansible 是这样一款辅助我们管理的工具,通过它我们在控制节点批量操作和管理。
Ansible 结构如下图,需要一个控制节点和若干被管理节点,在控制节点安装 Ansible 服务,根据管理清单(Inventory)对管理节点进行自动化管理。

安装
Ansible 可通过 pip 安装,也可以系统管理工具安装,这里选择系统安装。在 ubuntu 运行下列命令,在老版本 "software-properties-common" 可能叫 "python-software-properties" 如果出错更改试一下。
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
管理清单
默认管理清单是 /etc/ansible/hosts 文件也可以用 -i 参数指定其它配置文件,甚至同时用多个。可以将主机分组,往后 Ansible 可对分组进行操作,如下 2 个属于 webservers 组。Ansible 默认有 2 个组 all 和 ungrouped, 前者包含所有主机,后者是不被任何组(除 all)包含的主机。
[webservers]
foo.example.com
bar.example.com
主机名允许数字范围批量指定。
[webservers]
www[01:50].example.com
清单参数跟主机同一行用 key=value 格式,不同参数用空格分隔,如果 value 本身有空格,可以用引号区分。分组也可以定义参数,在该组所有节点生效,下面定义了 atlanta 整组的参数。
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
在控制节点用 ssh-agent 服务从而避免重复输入 ssh 密码。先将控制节点公钥拷贝到被管理节点,然后
# 启动 ssh-agent 服务
eval `ssh-agent`
# 添加到 ssh-agent
ssh-add ~/.ssh/id_rsa
本地主机不用 ssh 连接,设置连接为 "local".
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
查看已有清单配置用 ansible-inventory --list 命令。
playbook
playbooks 让 ansible 的管理用简单的方式实现可重复和可服用,也可以把它当作历史记录。
playbooks 要求 YAML 格式文本,里面包含多个 "play" ,每个 "play" 又可以包含多个任务(tasks),"play" 和任务都是从上到下执行。
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
- name: Write the apache config file
ansible.builtin.template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
- name: Update db servers
hosts: databases
remote_user: root
tasks:
- name: Ensure postgresql is at the latest version
ansible.builtin.yum:
name: postgresql
state: latest
- name: Ensure that postgresql is started
ansible.builtin.service:
name: postgresql
state: started
编辑好后 ansible-playbook 执行,并返回每一任务执行的状态。
ansible-playbook -v -K r_tidyverse.yml
其中 -v 输出详细执行记录,可以看到命令在远程机器执行时的标准输出和标准错误,-K 是手动输入 become 密码。
become
如果要用 sudo 执行命令需要设置 "become",如在 playbook 写入:
become: yes
become_method: sudo
become 可以设置在 play 层面,也可以在 task 层面。
become_method 可选值有 [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ]
其他的 become 参数还有:
--ask-become-pass 参数然后手动输入modules
模块列表在 All modules — Ansible Documentation 查看。
Ansible 模块直接在远程机器执行一些命令,可以命令行直接执行,也可以写入 playbooks.
ansible webservers -m service -a "name=httpd state=started"
ansible webservers -m ping
ansible webservers -m command -a "/sbin/reboot -t now"
# in playbook
- name: reboot the servers
command: /sbin/reboot -t now
apt 模块
apt 模块执行包管理命令 apt. 一般装包之前运行 apt update 命令:
- name: upgrade apt
apt:
update_cache: yes
设置包的 state 为 present/absent 来安装或移除包,latest 是更新到最新版。
- name: install package
apt:
name: wget
state: present
command 模块
command 模块执行 shell 命令,但是它不通过 shell 所以像 $HOME或一些操作符 >, <, |, ;, & 等等都不能生效,需要的话用 shell 模块。
可以将命令放 command 后,也可以放在 cmd 参数后
# command
- name: test command
command: echo BeeBee
# cmd
- name: test cmd
command:
cmd: echo BeeBee
想在指定目录执行命令用 chdir 参数,chdir 会在命令运行前生效
- name: test cmd
command:
cmd: ls
chdir: /home/beebee
file 模块
file 模块对文件执行各种操作,删除、新建、链接、修改属性等等,file 不方便用通配符那些,跟 find 模块一起用能实现批量操作,比如删除
- name: find old downloads
find:
paths: /home/beebee
patterns: modules-5.1.*
file_type: any
register: xpath
- name: remove old downloads
file:
path: "{{ item.path }}"
state: absent
with_items: "{{ xpath.files }}"
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生