我是Ansible的新手,我看到使用Ansible来使用所有必要的软件包等运行裸机服务器的优势。但是,我想知道它是否是我正在尝试的正确工具要做:
现在我正在使用shell脚本来执行部分工作,其余的都是手动的,但它很容易出错,所以我正在寻找更好的解决方案。
我可以想象一下这个任务的Ansible手册,但我不知道如何在不经常编辑定义需要添加/删除哪些客户文件的文件的情况下使其工作。这将使它至少像我的shell脚本一样容易出错。
所以我想知道Ansible是否适合这项工作,或者是否有更好的工具用于满足这一特定需求。如果有更好的工具,哪些?
答案 0 :(得分:0)
您可以创建一个代表一个客户的角色。让该角色执行必要的步骤,并允许客户之间可能存在差异的任何变量。
您可以在角色的默认文件中为变量设置合理的默认值,例如:
作用/默认/ main.yml:
customer_name: ~
customer_war_file: "{{ customer_name }}.war"
作用/模板/ server.config.j2:
some_setting_x: {{ setting_x }}
some_setting_y: {{ setting_y }}
这样,您可以反复在剧本中使用该角色:
- name: Playbook for customer deploys
...
roles:
- { role: my_deploy_role, customer_name: 'acme', setting_x: 'foo', setting_y: 'bar' }
- { role: my_deploy_role, customer_name: 'emca', setting_x: 'bat', setting_y: 'baz' }
对此进行扩展,您可以添加一个删除而不是在您的角色中部署的设置 - 或者如果它变得太复杂,只需为删除创建一个单独的角色:
roles:
- { role: my_deploy_role, customer_name: 'emca', setting_x: 'bat', setting_y: 'baz' }
- { role: my_remove_role, customer_name: 'acme' }
请记住,Ansible任务意味着幂等,这意味着您可以反复运行它们并获得相同的结果。你应该在脚本完成之后描述目标系统的状态。
Ansible的大多数模块都会为您处理这些问题,例如,如果上述示例中的 server.config.j2 模板已存在于目标计算机上并且相同,则Ansible将报告“ok “,而不是”改变“。
如果您担心在不需要时重新加载网络服务器,请查看handlers。这些是特殊任务,只在需要时运行,并在完成剧本后运行。
答案 1 :(得分:0)
要编辑ini文件,您可以使用http://www.pixelbeat.org/programs/crudini/ 使用即将发布的v0.5,您可以使用--verbose选项触发更改,如:
- command: crudini --set /your/config.ini section param value
register: command_result
changed_when: command_result.stderr | match("^changed")