使用Ansible的客户机上的别名

时间:2015-05-10 05:31:36

标签: vagrant alias ansible ansible-playbook

我想在通过Vagrant运行的来宾计算机上添加一些别名。我的配置程序是Ansible,如果我可以在playbook中添加带有任务的别名,那将会很棒。我宁愿不必修改我的Vagrantfile

我已经尝试了这两个角色:
command: alias serve='pub serve --hostname=0.0.0.0'
shell: "alias serve='pub serve --hostname=0.0.0.0'"
但他们都没有奏效。第一个提出了一个例外,我认为它来自''。第二个根本就不添加别名。

1 个答案:

答案 0 :(得分:8)

shell选项看起来正确,但它只会为会话创建别名。然后,当您在配置后连接到它时,它将不存在。我也不确定剧本中的其他剧本是否可以使用它,因为他们可能会使用另一个SSH会话。

要永久添加,您需要将其添加到相关的.bashrc.bash_aliases(由.bashrc提供),具体取决于您的Linux风格/版本。

要做到这一点,你可以简单地使用:

shell: echo "alias serve='pub serve --hostname=0.0.0.0'" >> ~/.bash_aliases

但这不是幂等的,重新运行Ansible剧本或Vagrant配置(将重新运行Ansible剧本)每次都会添加重复的行。

相反,您应该使用lineinfile module之类的内容:

- name: Add serve alias for foo user
  lineinfile:
    dest=/home/foo/.bashrc
    line="alias serve='pub serve --hostname=0.0.0.0'"
    owner=foo
    regexp='^alias serve='pub serve --hostname=0.0.0.0'$'
    state=present
    insertafter=EOF
    create=True

上面的播放会将别名行添加到foo用户.bashrc文件的末尾(如果由于某种原因它不存在,则创建该文件)。当你重新运行它时,它会尝试匹配正则表达式值(这可能需要通过转义部分进行调整),如果匹配它,那么它将用行值替换它。