S3不存在Ansible文件,但存在副本

时间:2016-01-25 21:00:46

标签: amazon-s3 ansible-playbook

我正在尝试将配置文件从ec2实例上的文件夹迁移到s3存储桶。我们使用ansible来更新每次部署时对这些配置文件的更改,并且我遇到了与s3一起工作的问题。这是用于将配置文件更新为ec2的旧的ansible部分。

- name: Install config files
  copy: src="{{core_repo}}/config/{{item.path}}" dest=/opt/company/config owner=user group=user mode=0644 directory_mode=0755
  with_items: config_files
  tags:
    - deploy
没什么好疯狂的,只需复制一堆具有特定权限的文件。 Ansible的副本在查找config_files中描述的文件时没有问题。

这是我用于将配置文件更新为s3的新ansible部分。

- name: Install config files
  s3: bucket=company-config object="/{{item.path}}" src="{{core_repo}}/config/{{item.path}}" mode=put aws_access_key=access aws_secret_key=secret
  with_items: config_files
  tags:
    - deploy

正如您所看到的,我没有改变我自己引用文件的方式。但是,我现在收到每个文件的错误:

failed: [ip] => (item={'path': 'application.properties'}) => {"failed": true, "item": {"path": "application.properties"}}
msg: Local object for PUT does not exist

知道我可能做错了什么吗?或者有关如何解决此问题的任何建议?我正在使用ansible-playbook 1.9.4。

1 个答案:

答案 0 :(得分:1)

假设您要将文件从EC2实例复制到S3,并且已使用安装配置文件任务将文件复制到EC2实例,则文件位于/opt/company/config上EC2实例。

然后应将

src属性更改为"/opt/company/config/{{item.path}}",并按如下方式调用s3模块:

- name: Install config files
  s3: bucket=company-config object="/{{item.path}}" src="/opt/company/config/{{item.path}}" mode=put aws_access_key=access aws_secret_key=secret
  with_items: config_files
  tags:
    - deploy

如果您想直接将文件从Ansible主机复制到S3,那么您可以使用local_action调用s3模块。各自的任务是:

- name: Install config files
  become: no
  local_action: s3 bucket=company-config object="/{{item.path}}" src="{{core_repo}}/config/{{item.path}}" mode=put aws_access_key=access aws_secret_key=secret
  with_items: config_files
  tags:
    - deploy