我找到了一些带有find ansible模块的文件
- find:
paths: "/"
patterns: ["*.service"]
file_type: file
hidden: True
recurse: yes
register: find_results
when: ansible_service_mgr == "systemd"
现在我想检查修改某些文件的权限:
- file:
path: "{{ item.path }}"
owner: root
group: root
mode: 0644
with_items:
- "{{ find_results.files }}"
when:
- item.path | match("/sys/devices/power/events/*")
- ansible_service_mgr == "systemd"
问题在于我不想要比赛。我想要一切不符合这条道路的东西吗?
如何否定匹配过滤器? (!,不是,等等)?
答案 0 :(得分:2)
感谢您的帮助,您也可以这样做:
not (item.path | match("/sys/devices/power/events/*"))
答案 1 :(得分:0)
我建议按如下方式重写您的任务:
export default class LoginScreen extends Component {
constructor(props) {
super(props);
this.state = {
username: '',
password: ''
};
}
login = () => {
alert(this.state.username + " " + this.state.password);
}
render() {
return (
<View style={styles.container}>
<Image source={require('../images/hulk.jpg')} style={styles.backgroundimage}>
<View style={styles.content}>
<Image source={require('../images/logo.png')} style={styles.logo}>
</Image>
<View style={styles.inputcontainer}>
<TextInput underLineColorAndroid='transparent' style={styles.input} value={this.state.username} onChangeText={(username) => this.setState({ username })} placeholderText='username' > </TextInput>
<TextInput secureTextEntry={true} underLineColorAndroid='transparent' style={styles.input} value={this.state.password} onChangeText={(password) => this.setState({ password })} placeholderText='password' placeholderTextColor='black'> </TextInput>
</View>
<TouchableOpacity onPress={this.login} style={styles.buttonContainer}>
<Text style={styles.buttonText}>LOGIN</Text>
</TouchableOpacity>
</View>
</Image>
</View>
);
}
}
它使用- file:
path: "{{ item.path }}"
owner: root
group: root
mode: 0644
with_items: "{{ [] if ansible_service_mgr != 'systemd' else find_results.files | rejectattr('path','match','/sys/devices/power/events/.*') | list }}"
拒绝(删除)rejectattr
匹配find_results.files
regexp的所有项目。一种你想要的比赛否定。
它仅对所需项目进行循环。您的任务将循环显示所有找到的文件,并为每个/sys/devices/power/events/.*
语句未命中生成“已跳过”消息。
当托管的服务不是when
时,它还会将空列表[]
提供给with_items
。否则,您的任务可能会为每个systemd
项生成多个跳过的项,或者完全失败,因为之前的任务已被跳过并且find_results.files
未定义。
P.S。如果您有许多依赖于find_results.files
的任务,您可能希望将它们分成不同的yaml文件并有条件地仅将其包含在systemd
台计算机上 - 这将使代码更加清晰,如果没有这些systemd
when: ansible_service_mgr == "systemd"
}陈述。
答案 2 :(得分:0)
when: ("/sys/devices/power/events/*" not in item.path "/sys/devices/power/events/") and
(ansible_service_mgr == "systemd")
但是第二个条件没用,因为你已经在获得find_results