我正在尝试自学python(和一般的编程),并且对变量赋值有点困惑.我明白,如果我有
>>> a = [1,2,3]
>>> b = a
Run Code Online (Sandbox Code Playgroud)
它b指的是内存中的同一个对象a.因此,如果我想创建一个新列表,b使用与当前相同的值a,我将如何实现?
另外,请考虑以下示例:
>>> a = [1, 2, 3]
>>> b = a
>>> x = a[1]
>>> a[1] = 4
>>> print a, b, x
[1, 4, 3] [1, 4, 3] 2
Run Code Online (Sandbox Code Playgroud)
我从这个例子中看到,这x是一个新对象,但b指向a.有人可以向我解释这里发生了什么,为什么x是一个新的对象,但b不是?
我正在使用ansible替换多个RHEL6和RHEL7服务器上的用户的ssh密钥。我正在运行的任务是:
- name: private key
copy:
src: /Users/me/Documents/keys/id_rsa
dest: ~/.ssh/
owner: unpriv
group: unpriv
mode: 0600
backup: yes
Run Code Online (Sandbox Code Playgroud)
我尝试更新的两个主机出现以下错误:
致命的:[host1]:失败!=> {“ failed”:true,“ msg”:“无法对临时文件设置权限当成为非特权用户时,需要创建Ansible(rc:1,err:chown:更改
/tmp/ansible-tmp-19/': Operation not permitted\nchown: changing ownership of/ tmp / ansible-tmp-的所有权19 / stat.py':不允许操作\ n)。有关解决此问题的信息,请参见 https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user “}
事实是,这两个正在得到错误的是一些正在更新的克隆。我已经比较了sudoers和sshd设置,以及/ tmp目录上的权限和安装选项。在问题主机和工作主机之间,它们都是相同的。关于下一步我可以检查的任何想法?
我在Mac OS Sierra上运行ansible 2.3.1.0,如果有帮助的话。
更新:
@techraf
我不知道为什么这可以在除两个主机之外的所有主机上工作。这是原始剧本:
- name: ssh_keys
hosts: my_hosts
remote_user: my_user
tasks:
- include: ./roles/common/tasks/keys.yml
become: yes
become_method: sudo
Run Code Online (Sandbox Code Playgroud)
和原始的keys.yml:
- name: public key
copy:
src: /Users/me/Documents/keys/id_rsab
dest: ~/.ssh/
owner: unpriv
group: unpriv
mode: 060
backup: …Run Code Online (Sandbox Code Playgroud)