| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- using Tests.EndToEnd.Infra;
- using Xunit.Abstractions;
- namespace Tests.EndToEnd;
- [Collection("Yaml CLI tests")]
- public class GenerateAnsibleInventoryTests(
- TempYamlCliFixture fs,
- ITestOutputHelper outputHelper)
- : IClassFixture<TempYamlCliFixture> {
- private async Task<(string output, string yaml)> ExecuteAsync(params string[] args) {
- outputHelper.WriteLine($"rpk {string.Join(" ", args)}");
- var output = await YamlCliTestHost.RunAsync(
- args,
- fs.Root,
- outputHelper,
- "config.yaml");
- outputHelper.WriteLine(output);
- var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
- return (output, yaml);
- }
- [Fact]
- public async Task generate_ansible_inventory_empty_config() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources: []
- """);
- (var output, _) = await ExecuteAsync("ansible", "inventory");
- Assert.Contains("Generated Inventory", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_single_system_ini_format() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: web-server-01
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 192.168.1.100
- ansible_user: admin
- env: production
- """);
- (var output, _) = await ExecuteAsync("ansible", "inventory", "--group-labels", "env");
- Assert.Contains("Generated Inventory", output);
- Assert.Contains("web-server-01", output);
- Assert.Contains("ansible_host=192.168.1.100", output);
- Assert.Contains("ansible_user=admin", output);
- Assert.Contains("[env_production]", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_with_tag_grouping() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: web-prod-01
- os: ubuntu-22.04
- cores: 2
- ram: 4
- tags: [production, web]
- labels:
- ansible_host: 10.0.1.10
- ansible_user: ubuntu
- - kind: System
- type: vm
- name: web-prod-02
- os: ubuntu-22.04
- cores: 2
- ram: 4
- tags: [production, web]
- labels:
- ansible_host: 10.0.1.11
- ansible_user: ubuntu
- - kind: System
- type: vm
- name: db-staging-01
- os: postgres-15
- cores: 4
- ram: 8
- tags: [staging, database]
- labels:
- ansible_host: 10.0.2.20
- ansible_user: postgres
- """);
- (var output, _) = await ExecuteAsync(
- "ansible", "inventory",
- "--group-tags", "production,staging,web,database");
- Assert.Contains("[production]", output);
- Assert.Contains("[staging]", output);
- Assert.Contains("[web]", output);
- Assert.Contains("[database]", output);
- Assert.Contains("web-prod-01", output);
- Assert.Contains("web-prod-02", output);
- Assert.Contains("db-staging-01", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_with_label_grouping() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: server-east-01
- os: debian-12
- cores: 2
- ram: 4
- labels:
- ansible_host: 10.0.1.10
- region: us-east
- - kind: System
- type: vm
- name: server-west-01
- os: debian-12
- cores: 2
- ram: 4
- labels:
- ansible_host: 10.0.2.10
- region: us-west
- - kind: System
- type: vm
- name: server-eu-01
- os: debian-12
- cores: 2
- ram: 4
- labels:
- ansible_host: 10.0.3.10
- region: eu-central
- """);
- (var output, _) = await ExecuteAsync(
- "ansible", "inventory",
- "--group-labels", "region");
- Assert.Contains("[region_us_east]", output);
- Assert.Contains("[region_us_west]", output);
- Assert.Contains("[region_eu_central]", output);
- Assert.Contains("server-east-01", output);
- Assert.Contains("server-west-01", output);
- Assert.Contains("server-eu-01", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_with_global_vars() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: app-server-01
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 192.168.1.50
- ansible_user: deploy
- env: prod
- """);
- (var output, _) = await ExecuteAsync(
- "ansible", "inventory",
- "--group-labels", "env",
- "--global-var", "ansible_ssh_common_args='-o StrictHostKeyChecking=no'",
- "--global-var", "python_version=3.10",
- "--global-var", "app_name=myapp");
- Assert.Contains("Generated Inventory", output);
- Assert.Contains("ansible_ssh_common_args", output);
- Assert.Contains("StrictHostKeyChecking=no", output);
- Assert.Contains("python_version=3.10", output);
- Assert.Contains("app_name=myapp", output);
- Assert.Contains("app-server-01", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_yaml_format() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: ansible-test-host
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 172.16.0.100
- ansible_user: root
- env: test
- """);
- (var output, _) = await ExecuteAsync("ansible", "inventory", "--format", "yaml", "--group-labels", "env");
- Assert.Contains("Generated Inventory", output);
- Assert.Contains("all:", output);
- Assert.Contains("children:", output);
- Assert.Contains("ansible-test-host:", output);
- Assert.Contains("ansible_host: 172.16.0.100", output);
- Assert.DoesNotContain("[all:vars]", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_combined_grouping() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: prod-web-01
- os: ubuntu-22.04
- cores: 2
- ram: 4
- tags: [production]
- labels:
- ansible_host: 10.0.1.10
- env: production
- tier: web
- - kind: System
- type: vm
- name: prod-db-01
- os: postgres-15
- cores: 4
- ram: 8
- tags: [production]
- labels:
- ansible_host: 10.0.1.20
- env: production
- tier: database
- """);
- (var output, _) = await ExecuteAsync(
- "ansible", "inventory",
- "--group-tags", "production",
- "--group-labels", "env,tier");
- Assert.Contains("[production]", output);
- Assert.Contains("[env_production]", output);
- Assert.Contains("[tier_web]", output);
- Assert.Contains("[tier_database]", output);
- Assert.Contains("prod-web-01", output);
- Assert.Contains("prod-db-01", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_mixed_resources() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: Server
- name: srv-prod-01
- labels:
- ansible_host: 192.168.1.10
- ansible_user: root
- env: production
- - kind: System
- type: vm
- name: vm-dev-01
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 192.168.1.20
- ansible_user: developer
- env: development
- - kind: Desktop
- name: dtp-admin-01
- labels:
- ansible_host: 192.168.1.30
- ansible_user: admin
- env: production
- - kind: Laptop
- name: ltp-remote-01
- labels:
- ansible_host: 192.168.1.40
- ansible_user: remote
- env: remote
- - kind: Switch
- name: sw-access-01
- labels:
- ansible_host: 192.168.1.50
- ansible_user: network
- env: network
- """);
- (var output, _) = await ExecuteAsync("ansible", "inventory", "--group-labels", "env");
- Assert.Contains("Generated Inventory", output);
- Assert.Contains("srv-prod-01", output);
- Assert.Contains("vm-dev-01", output);
- Assert.Contains("dtp-admin-01", output);
- Assert.Contains("ltp-remote-01", output);
- Assert.Contains("sw-access-01", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_with_multiple_labels() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: multi-label-host
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 10.0.0.1
- ansible_user: sysadmin
- environment: prod
- team: backend
- os: ubuntu
- """);
- (var output, _) = await ExecuteAsync(
- "ansible", "inventory",
- "--group-labels", "environment,team,os");
- Assert.Contains("[environment_prod]", output);
- Assert.Contains("[team_backend]", output);
- Assert.Contains("[os_ubuntu]", output);
- Assert.Contains("multi-label-host", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_ansible_var_labels() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: web-server-01
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 192.168.1.100
- ansible_user: deploy
- ansible_become: "yes"
- ansible_var_python_path: /usr/bin/python3
- ansible_var_site: production
- ansible_var_app_env: prod
- env: prod
- """);
- (var output, _) = await ExecuteAsync("ansible", "inventory", "--group-labels", "env");
- Assert.Contains("web-server-01", output);
- Assert.Contains("ansible_host=192.168.1.100", output);
- Assert.Contains("ansible_user=deploy", output);
- Assert.Contains("ansible_become=yes", output);
- Assert.Contains("python_path=/usr/bin/python3", output);
- Assert.Contains("site=production", output);
- Assert.Contains("app_env=prod", output);
- }
- [Fact]
- public async Task generate_ansible_inventory_yaml_format_with_ansible_vars() {
- await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), """
- version: 1
- resources:
- - kind: System
- type: vm
- name: ansible-var-test
- os: ubuntu-22.04
- cores: 2
- ram: 4
- labels:
- ansible_host: 10.0.0.50
- ansible_var_custom_var: custom_value
- ansible_var_number: "42"
- env: test
- """);
- (var output, _) = await ExecuteAsync(
- "ansible", "inventory",
- "--format", "yaml",
- "--group-labels", "env");
- Assert.Contains("ansible-var-test:", output);
- Assert.Contains("ansible_host: 10.0.0.50", output);
- Assert.Contains("custom_var: custom_value", output);
- Assert.Contains("number: 42", output);
- }
- }
|