使用 Ansible 在访客计算机上设置别名

问题描述 投票:0回答:2

我想在通过 Vagrant 运行的来宾计算机上添加一些别名。我的配置程序是 Ansible,如果我可以在剧本上添加带有任务的别名,那就太好了,我希望不必修改我的

Vagrantfile

我在一个角色中尝试过这两种方法:

command: alias serve='pub serve --hostname=0.0.0.0'

shell: "alias serve='pub serve --hostname=0.0.0.0'"

但它们都没有起作用。第一个引发了一个例外,我认为该例外来自 ''。第二个根本不添加别名。

vagrant alias ansible
2个回答
19
投票

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

要永久添加它,您需要将其添加到相关的

.bashrc
.bash_aliases
(然后由
.bashrc
获取),具体取决于您的 Linux 风格/版本。

为此,您可以简单地使用:

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

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

相反,您应该使用 lineinfile 模块,例如:

- name: Add serve alias for foo user
  lineinfile:
    path=/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
文件的末尾(如果由于某种原因不存在则创建该文件)。当您重新运行它时,它会尝试匹配正则表达式值(这可能需要使用转义部分进行调整),如果匹配,那么它将用行值替换它。


2
投票

感谢这个答案,在添加别名行后:

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

您还需要

source
文件:

- name: Source .bashrc
  shell: "source /home/foo/.bashrc"
  args:
    executable: /bin/bash
© www.soinside.com 2019 - 2024. All rights reserved.