使用Ansible的客户机上的别名

tom*_*any 3 alias vagrant 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'"
但它们都没有奏效.第一个提出了一个例外,我认为它来自''.第二个根本就不添加别名.

yda*_*coR 10

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

要永久添加它,您需要将其添加到相关.bashrc.bash_aliases(.bashrc根据您的Linux风格/版本)来源.

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

shell: echo "alias serve='pub serve --hostname=0.0.0.0'" >> ~/.bash_aliases
Run Code Online (Sandbox Code Playgroud)

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

相反,您应该使用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
Run Code Online (Sandbox Code Playgroud)

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