Ansible local_action示例如何工作

时间:2019-05-08 20:57:01

标签: ansible

以下Ansible游戏如何工作:

- name: Generate join command
    command: kubeadm token create --print-join-command
    register: join_command

  - name: Copy join command to local file
    local_action: copy content="{{ join_command.stdout_lines[0] }}" dest="./join-command"

据我所知,local_action与委托_to相同 但是,复制content =没有任何意义。不需要指定“ cp”之类的实际命令吗?

所以看一个例子: local_action: command ping -c 1 {{ inventory_hostname }} 我们可以说:

local_action: command cp content="{{ join_command.stdout_lines[0] }}" dest="./join-command"

2 个答案:

答案 0 :(得分:0)

很难说出 dest =“ ./ join-command” 的路径是什么。完整路径按预期工作。

例如:

dest="{{ playbook_dir }}/join-command"

答案 1 :(得分:0)

  

据我所知,local_action与委托_to相同...

local_actiondelegate_to: localhost类似,但是由于local_action要求您更改任务的语法,因此最好始终使用delegate_to。也就是说,对于标准任务,您可以编写:

- name: copy a file
  copy:
    src: myfile
    dest: /path/to/myfile

对于委派任务,您将使用完全相同的语法,并添加delegate_to行:

- name: copy a file
  delegate_to: localhost
  copy:
    src: myfile
    dest: /path/to/myfile

使用location_action时,您必须更改任务的语法:

- name: copy a file
  local_action:
    module: copy
    src: myfile
    dest: /path/to/myfile
  

copy content =没有任何意义。不需要指定“ cp”之类的实际命令吗?

否,copy是ansible模块的名称。您可以看到上面的一些示例,或者只看documentation

  

所以看一个例子:local_action:命令ping -c 1 {{库存主机名}}我们可以说:

     

local_action:命令cp content =“ {{join_command.stdout_lines [0]}}” dest =“ ./ join-command”

您应该使用delegate_to,并且应该这样写:

- delegate_to: localhost
  copy:
    content: "{{ join_command.stdout_lines[0] }}"
    dest: ./join-command

或者,如果您实际上想运行cp命令而不是copy模块,则可以编写以下内容:

- delegate_to: localhost
  command: cp some_file another_file

那只是运行标准的cp命令,而该命令对content=dest=一无所知。