我已经设置了一个david具有sudo权限的用户的盒子.我可以进入框中并执行sudo操作apt-get install.当我尝试使用Ansible的"成为特权升级"做同样的事情时,我收到一个permission denied错误.所以一个简单的剧本可能看起来像这样:
simple_playbook.yml:
---
- name: Testing...
hosts: all
become: true
become_user: david
become_method: sudo
tasks:
- name: Just want to install sqlite3 for example...
apt: name=sqlite3 state=present
Run Code Online (Sandbox Code Playgroud)
我使用以下命令运行此playbook:
ansible-playbook -i inventory simple_playbook.yml --ask-become-pass
Run Code Online (Sandbox Code Playgroud)
这给了我一个密码的提示,我给出了,我得到以下错误(缩写):
fatal: [123.45.67.89]: FAILED! => {...
failed: E: Could not open lock file /var/lib/dpkg/lock - open (13:
Permission denied)\nE: Unable to lock the administration directory
(/var/lib/dpkg/), are you root?\n", ...}
Run Code Online (Sandbox Code Playgroud)
为什么我被拒绝了?
附加信息
我正在运行Ansible 2.1.1.0并且我的目标是Ubuntu 16.04.如果我按照Ansible <v1.9 使用remote_user和 …
运行Rails 3.1.3 ......
我将使用一个嵌套关联的简单示例(不确定这是否是正确的术语).基本上我是在建模数据库 - 每个数据库都有自己的表,每个表都有自己的列:
class Database < ActiveRecord::Base
has_many :tables
end
class Table < ActiveRecord::Base
belongs_to :database
has_many :columns
end
class Column < ActiveRecord::Base
belongs_to :table
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想在视图中显示数据库的表和列,在将这些数据传递给视图之前捆绑这些数据的好方法.基本上,我的控制器和视图会是什么样子?
我想出了以下内容,但如果没有更好的方法,我会感到惊讶:
我的控制器:
class DatabasesController < ApplicationController
def show
@database = Database.find_by_id(params[:id])
@tables = @database.tables
@columns = @database.tables.columns
end
end
Run Code Online (Sandbox Code Playgroud)
我的看法:
Database: <%= @database.database_name %><br />
<% @tables.each do |table| %>
Table: <%= table.table_name %><br />
<% table.columns.each do |column| %>
Column: <%= column.column_name %><br />
<% end %>
<% end …Run Code Online (Sandbox Code Playgroud) 我希望在满足条件时将哈希键值提取到数组.例如,使用散列h我想提取值为"true"的键:
h = { :a => true, :b => false, :c =>true }
Run Code Online (Sandbox Code Playgroud)
我想出来了:
h.map {|k,v| k if v==true} - [nil]
Run Code Online (Sandbox Code Playgroud)
任何替代品?
两个数据集:
第一组数据有很多观察结果:
data ds1;
do var1=1 to 3;
output;
end;
run;
Run Code Online (Sandbox Code Playgroud)第二个数据集有1个观察结果:
data ds2;
var2=1;
run;
Run Code Online (Sandbox Code Playgroud)每个数据集中的变量数量无关紧要.
我想将DS2中的单个观察值与DS1中的所有观察值合并得到:
数据集DS3:
VAR1 VAR2
1 1
2 1
3 1
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用PROC SQL步骤执行此操作:
proc sql noprint;
create table ds3 as
select a.*, b.*
from ds1 as a, ds2 as b;
quit;
Run Code Online (Sandbox Code Playgroud)
是否可以通过单个数据步骤进行预处理?